uboot移植之uboot和kernel的参数传递

从uboot启动内核的形式theKernel (0, machid, bd->bi_boot_params)
可以看出uboot给内核传递了3个参数,第1个是0,第2个是机器码,第3个是参数列表在SDRAM的起始位置
刚好满足一下调用内核的条件
• R0=0。
• R1=机器类型ID;
• R2=启动参数标记列表在RAM 中起始基地址

①在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函数中
指定机器码
gd->bd->bi_arch_number = MACH_TYPE_MINI2440 
而MACH_TYPE_MINI2440定义在include/asm-arm/mach-types.h
#define MACH_TYPE_MINI2440             1999

需对应内核的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行代码
MACHINE_START(MINI2440, "MINI2440 test")
而MINI2440定义在linux/arch/arm/tools/mach-types
mini2440        MACH_MINI2440        MINI2440        1999

②在 uboot/board/tekkamanninja/mini2440/mini2440.c的board_init函数中
指定参数位置
    gd->bd->bi_boot_params = 0x30000100;

对应内核的linux/arch/arm/mach-s3c2440/mach-mini2440.c中一行代码
.boot_params    = S3C2410_SDRAM_PA + 0x100,
如果uboot没有给出 gd->bd->bi_boot_params的值,则linux默认去这个地址寻址tag
如果uboot给出了 gd->bd->bi_boot_params的值 ,则linux则按照uboot的给的这个地址去寻址tag

所以即使uboot中设置
    gd->bd->bi_boot_params = 0x30000000或  0x30000200  0x300000300 (或许设置一个空闲的内存区就可以)
而内核
的.boot_params    = S3C2410_SDRAM_PA + 0x100, (就用不到了)
也能顺利启动内核
,已试过

在试验中发现uboot中设置gd->bd->bi_boot_params
=0或将 gd->bd->bi_boot_params 注释掉,都未能顺利启动内核 。貌似在uboot 必须为gd->bd->bi_boot_params 指定一个值才行,而linux的 .boot_params 始终都没有用到。


gd是一个全局结构体指针,用于uboot中各个文件中重要的参数传递,其成员见http://blog.csdn.net/songqqnew/article/details/6847699
看一下uboot在sdram 0x30000100处给内核传递了什么东东,见http://blog.csdn.net/songqqnew/article/details/6847609
参考嵌入式Linux应用开发完全手册ch15.1 p243
转自:http://blog.csdn.net/songqqnew/article/details/6847392
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值