主题 : 内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4086
精华: 0
发帖: 19
金钱: 115 两
威望: 45 点
综合积分: 38 分
注册时间: 2009-02-24
最后登录: 2014-08-15
楼主  发表于: 2009-02-27 18:48

 内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"问题

u-boot 中定义CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0",传给内核的启动参数说明内核需要找到/linuxrc进行初始化,而mini2440光盘中提供的根文件系统root_qtopia_mouse.tgz和root_qtopia_tp.tgz,解压后没有/linuxrc这个文件,请问内核是如何启动找到/etc/inittab的?(root_nfs.tgz、root_default.tgz、root_mizi.tgz都有/linuxrc)
Happy your life, healthy on the road...
级别: 新手上路
UID: 3725
精华: 0
发帖: 25
金钱: 260 两
威望: 260 点
综合积分: 50 分
注册时间: 2009-02-04
最后登录: 2009-05-06
1楼  发表于: 2009-03-02 13:00

 Re:内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC ..

俺也想知道,了解中……
先帮你顶!
==================http://www.icdeap.org==================
级别: 新手上路
UID: 8531
精华: 0
发帖: 5
金钱: 50 两
威望: 25 点
综合积分: 10 分
注册时间: 2009-08-27
最后登录: 2009-08-28
2楼  发表于: 2009-08-28 10:28

 Re:内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC ..

../linux_2.6.29/arch/arm/kernel/setup.c
查找函数parse_tag_cmdline();bootloader的命令行就是通过这个函数传递给kernel的。可以直接屏蔽掉这个函数中的命令行传递,在kernel的config下直接写入你想要的命令行参数。位置:
.config文件中:#
# Boot options
#
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
CONFIG_CMDLINE=""   <----写入 noinitrd root=/dev/mt....效果是一样的。不过在这里做命令行传递调试更方便,试好了可以去做bootloader的代码变更。
==================http://www.icdeap.org==================
级别: 新手上路
UID: 8531
精华: 0
发帖: 5
金钱: 50 两
威望: 25 点
综合积分: 10 分
注册时间: 2009-08-27
最后登录: 2009-08-28
3楼  发表于: 2009-08-28 10:39

 Re:内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC ..

又及:
linuxrc是在编译和制作busybox阶段产生的。Busybox编译和安装完成后,在/opt/.../root(....路径看你的busubox的.config文件配置)目录下有linux文件,和ARM系统上的文件是一致的。
Just do it
级别: 侠客
UID: 2754
精华: 4
发帖: 66
金钱: 2435 两
威望: 873 点
综合积分: 212 分
注册时间: 2008-12-07
最后登录: 2016-04-13
4楼  发表于: 2009-08-28 11:24

 Re:内核启动参数CONFIG_BOOTARGS ="noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC ..

    if (execute_command) {
        run_init_process(execute_command);
        printk(KERN_WARNING "Failed to execute %s.  Attempting "
                    "defaults...\n", execute_command);
    }
    run_init_process("/sbin/init");
    run_init_process("/etc/init");
    run_init_process("/bin/init");
    run_init_process("/bin/sh");

    panic("No init found.  Try passing init= option to kernel.");
看看这个代码就知道了,如果没有找到linuxrc,则只要下面的
           run_init_process("/sbin/init");
    run_init_process("/etc/init");
    run_init_process("/bin/init");
    run_init_process("/bin/sh");
中任意一条能执行也是OK的,linuxrc文件不是必须的
级别: 新手上路
UID: 114402
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
综合积分: 4 分
注册时间: 2015-04-13
最后登录: 2015-04-23
5楼  发表于: 2015-04-23 10:25

 回 4楼(jeefjiang) 的帖子

为什么我的rootfs sbin/init   etc/init  bin/init       bin/sh    dev/console    dev/null 都存在,却还是说找不到init,这与init的什么库文件有关吗,我用的是动态编译busybox

setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.1.111:/embed/fs/rootfs ip=192.168.1.112  init=/linuxrc console=ttySAC1,115200
[ 此帖被flaming在2015-04-23 10:31重新编辑 ]