u-boot传递启动参数不成功的解决方法

Linux内核的启动参数可以由内核默认设定,也可以通过u-boot传递。相对来说,u-boot传递的灵活性更强,只须设置bootargs环境变量即可;而内核的默认设置改变,则需要重新编译内核。
把u-boot移植到s3c2410的板,多次是复制修改smdk2410的配置。然而,smdk2410的默认配置没有启用启动参数传递,引导内核使用的是内核默认的启动参数。即使设置:
setenv bootargs root=/dev/mtdblock2 init=/bin/bash console=ttySAC0,115200
内核仍然使用其默认参数,该启动参数并没有传递。
原因分析如下:
先看看lib_arm/Armlinux.c中:
 
.........
#if defined (CONFIG_SETUP_MEMORY_TAGS) || /
    defined (CONFIG_CMDLINE_TAG) || /
    defined (CONFIG_INITRD_TAG) || /
    defined (CONFIG_SERIAL_TAG) || /
    defined (CONFIG_REVISION_TAG) || /
    defined (CONFIG_LCD) || /
    defined (CONFIG_VFD)
static void setup_start_tag (bd_t *bd)
{
    params = (struct tag *) bd->bi_boot_params;
…………
 

 


该段程序先判断是否定义了CONFIG_CMDLINE_TAG等,才决定是否给内核传递参数。而board/smdk2410/smdk2410.h中并没有定义CONFIG_CMDLINE_TAG,问题就出现在这里。
因此,这里参照smdk2440.h的配置,在smdk2410.h(开发板名字.h)中添加以下3条定义(蓝色部分):
  #define CONFIG_SYS_CLK_FREQ    12000000 /* SMDK2400 has 12 MHz input clock */
#undef CONFIG_USE_IRQ            /* we don't need IRQ/FIQ stuff    */
#define CONFIG_CMDLINE_TAG     1    /* enable passing of ATAGs    */
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_INITRD_TAG     1
 

重新编译就OK了。

 

(PS:只添加“#define CONFIG_CMDLINE_TAG      1”行不行?经过测试是不行的,系统启动到booting the kernel.就没有显示了。猜想是启动参数不完整造成,没有深入分析。)

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/6_system/linux/Linuxjs/20100520/202813.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值