免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1268 | 回复: 0
打印 上一主题 下一主题

u-boot传递启动参数不成功的解决方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-22 01:33 |只看该作者 |倒序浏览

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.就没有显示了。猜想是启动参数不完整造成,没有深入分析。)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/73911/showart_1088249.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP