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


所属类别:Linux

文章作者:Jan365

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


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

相关信息

· 关于Oracle数据库热备份脚本深入剖析

·  bootcfg命令详解

· 老外写的一分Win32API学习资料,很好

· 在Word 2002中为字符添加上划线








....

70172 92047