滚滚长江东逝水,浪花淘尽英雄,是非成败转头空:青山依旧在,几度夕阳红。 白发渔樵江渚上,惯看秋月春风,一壶浊酒喜相逢:古今多少事,都付笑谈中。

终于用u-boot成功引导Linux内核了

上一篇 / 下一篇  2007-02-14 00:58:39

前几天移植了u-boot,但是始终无法加载内核。使用的内核是优龙给的现成的,在优龙的bootloader下引导没有问题,但是在u-boot下无法成功引导,每当解压结束之后就halt了。
一 连困扰了很多天,一开始以为是参数传不进去就把参数写死到内核了,还是不行,于是想到可能是引导内核前环境设置的不对,而对u-boot的代码不是很懂, 不会修改,于是想出了一个方法:参照优龙的bootloader引导内核的代码,向u-boot添加了一个新的命令,用于引导Linux内核。

添加pyboot命令:
上网查了一下资料,了解了一下向u-boot中加命令的方法,首先在include/cmd_confdefs.h中加入新命令对应的宏,该文件中已经有了很多的命令,添加的时候定义的值不要和其他命令重复就行,而且必须是某一位为1,其他都是0的值,这里添加如下:
#define CFG_CMD_PYBOOT   0x8000000000000000ULL

然后在common下新建一个cmd_pyboot.c文件,这个文件是pyboot命令的具体实现代码,在include下新建pyboot.h文件,该文件是cmd_pyboot.c所使用的头文件。之后修改common下的Makefile,在
COBJS = xxxxxxxxx\
        xxxxxxxxx\
       .......
加入cmd_pyboot.o,让编译的时候编译cmd_pyboot文件。
最后回到开发板的配置文件处(include/configs/py2410.h),在这里的命令列表中加上CFG_CMD_PYBOOT,告诉u-boot编译进pyboot命令。然后make一下,下载到开发板上就可以了。
pyboot能够使用的前提是板子上的kernel以及cramfs都是优龙自带的,自己编译的内核可不可以现在未知。

比较关键的是cmd_pyboot.c文件,里面填充了一个指向0x30000100的params_struct结构体,用来存放内核参数,并且将Nand Flash上的kernel读到内存的0x30200000处,不知道为什么不是0x30008000???
cmd_pyboot.c的框架如下:
#include <common.h>
#include <config.h>
#include <command.h>
#include <pyboot.h>

#ifdef (CFG_COMMAND & CFG_CMD_PYBOOT)
..........
do_pyboot(...)
{
    ............
}

U_BOOT_CMD(
  pyboot, 1, 1, do_pyboot,
  "Help Infos\n",
  "Long Help Infos\n"
);
#endif
do_pyboot是命令的主函数,使用U_BOOT_CMD宏来向系统注册一个命令。
另外值得一提的是,这次使用了source insight来看优龙的代码,这个东西真是不错啊,功能强大,适合用来查看/编辑大型的程序

不管怎么说,终于是弄出来了。TNND这几天累完了,游戏都没玩好

相关阅读:

TAG:

引用 删除 Guest   /   2008-09-04 13:44:45
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-09-06  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 28467
  • 日志数: 57
  • 图片数: 1
  • 建立时间: 2006-07-25
  • 更新时间: 2008-05-21

RSS订阅

Open Toolbar