Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4239846
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类:

2011-04-25 15:00:57

原文地址:G-Bios启动Linux成功 作者:hyfeng18

G-Bios启动Linux成功

Hyfeng E-Mail:hyfeng18@126.com

         今天终于移植好了g-bios,现在已经能够通过g-bios启动linux了。之前一直有在做uboot的移植,不过在移植uboot的时候就是参考友善公司提供的移植文档和网上一些大牛的博客按部就班的去完成了uboot的移植,其实当时有很多东西都不知道是为什么只是跟着做。直到前几天看到了网上介绍了一个开源的bootloader那就是g-bios,处于好奇心就将g-bios的源码给下了下来,参考了Tekkaman Ninja《《MaxWit及其中的g-bios mini2440的初次使用》》成功的完成了编译,由于g-bios对于s3c2440的支持非常的好,比如之前在uboot中需要去修改flash、网卡、led之类的底层的驱动支持,但是在g-bios中这些都不需要修改的所以只要编译好了基本上就能够将它下载到nand flash中运行。既然已经能运行下面的工作当然是去引导操作系统了哇,毕竟这才是正题啊,也正是下面工作让我看到了我对于uboot的移植特别是操作系统引导的这个地方根本就没搞懂。下面就进入正题吧,要想通过g-bios去引导linux操作系统,对于mini2440256Mflash的开发板需要做下面三件事情:

1.       修改sysconf.c文件中的分区属性,修改成下面的分区:

  1. static const struct PartAttr g_vFlashParts[] =
  2. {
  3.     {
  4.         .nPartType = PT_BL_GBIOS,
  5.         .ulPartSize = DEF_GB_SIZE,
  6.         .szPartName = "g-bios"
  7.     },
  8.     {
  9.         .nPartType = PT_OS_LINUX,
  10.         .ulPartSize = DEF_LINUX_IMAGE_SIZE,
  11.         .szPartName = "kernel"
  12.     },
  13. #if 1
  14.     {
  15.         .nPartType    = PT_FS_YAFFS2,
  16.         .szPartName = "rootfs"
  17.     },
  18. #else
  19. 还需要将每个分区的大小修改一下,修改如下
  20. #define DEF_GB_SIZE KB(512)
  21. #define DEF_LINUX_IMAGE_SIZE MB(5)

分区好了以后在启动的时候会看到如下的分区提示

通过修改分区我们待会可以很方便的将内核以及文件系统下载到flash的固定位置当中,这样就不需要我们通过uboot那样,又是nand erasenand write等一堆操作,具体的下载最后我会给出详细的下载命令的。

2.       修改配置区的大小

移植过uboot的朋友一定知道在uboot中有一块叫param的分区,那块区域是用来存放uboot一些参数的,在g-bios中也有这么一块地方是用来存放g-bios参数的,下面的修改就是对于这个部分的修改。由于nand flash是通过块擦除方式实现对于flash的擦除的,而256Mnand flash一块是128K也就是0x20000,而默认的g-bios中的参数区大小16k,并且每次像这16K的参数写数据的时候都会先擦除这块区域的,可是16K的大小没有办法单独擦除的,所以参数就无法保存,要想能够保存参数就必须将参数区的大小变成128K的倍数,于是只要将sysconf.h文件中的#define FLASH_CONF_SIZE    KB(16)修改成#define FLASH_CONF_SIZE    KB(128)即可。

3.       关于linux的启动参数

昨天下午启动linux的时候总是Uncompressing Linux... done, booting the kernel就停止启动了,到网上一查,有人说可能是启动命令不对,然后我就去看g-bios中的启动命令,的确是不正确的,于是乎我就用最简单的方法,就是直接将启动命令在程序中写好,没想到弄了以后就正的能启动了。我修改方法如下:在boot_linux.c文件第619行也就是下面这两句话之间

具体的烧写命令如下:

注意烧写内核的时候一定要通过cd命令切换到1分区,从上面的分区表可知1分区是用来放内核的。对于根文件系统的烧写我没有通过g-bios的命令烧写,因为烧的太慢所以没事大家可以自己去试试看。







阅读(1087) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~