Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114504
  • 博文数量: 23
  • 博客积分: 975
  • 博客等级: 准尉
  • 技术积分: 262
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-19 00:54
文章分类
文章存档

2011年(2)

2010年(3)

2008年(18)

我的朋友

分类: LINUX

2008-07-22 01:33:54

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

阅读(2817) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-01-19 09:05:19

是不是因为只添加“#define CONFIG_CMDLINE_TAG 1”内核找不到根文件系统?