Chinaunix首页 | 论坛 | 博客
  • 博客访问: 718586
  • 博文数量: 140
  • 博客积分: 8196
  • 博客等级: 中将
  • 技术积分: 1350
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-16 19:53
文章分类

全部博文(140)

文章存档

2011年(2)

2010年(2)

2009年(2)

2008年(20)

2007年(52)

2006年(62)

分类: LINUX

2007-02-09 16:23: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
#include
#include
#include

#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这几天累完了,游戏都没玩好

这里是cmd_pyboot.c和pyboot.h

文件:pyboot-code.tar.bz2
大小:4KB
下载:下载

阅读(3965) | 评论(8) | 转发(0) |
0

上一篇:鸡和蛋

下一篇:惜哉奉孝!—— 论郭嘉

给主人留下些什么吧!~~