请教两个根文件系统mount的问题我的配置
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="../rootfs.cpio"
我的系统启动总是提示找不到根文件系统
现在有几个问题想请教一下
1. kernel_init的最后一段是
do_basic_setup();
/*
* check if there is an early userspace init. If yes, let it do all
* the work
*/
if (!ramdisk_execute_command)
ramdisk_execute_command = "/init";
if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {//问题1 这里的“/”不还是ULK3上说的rootfs吗?怎么可能会存在init
ramdisk_execute_command = NULL;
prepare_namespace(); //我的系统肯定到这里来了
}
/*
* Ok, we have completed the initial bootup, and
* we're essentially up and running. Get rid of the
* initmem segments and start the user-mode stuff..
*/
init_post();
return 0;
接着是prepare_namespace里的代码
...
if (initrd_load())
goto out;
...
initrd_load 是这样的
if (mount_initrd) {
create_dev("/dev/ram", Root_RAM0);
/*
* Load the initrd data into /dev/ram0. Execute it as initrd
* unless /dev/ram0 is supposed to be our actual root device,
* in that case the ram disk is just set up here, and gets
* mounted in the normal path.
*/
if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) { // 我的root是ram0,所以下面3行代码不执行,prepare_namespace 继续执行(不goto out)
sys_unlink("/initrd.image");
handle_initrd();
return 1;
}
}
sys_unlink("/initrd.image");
return 0;
最后到了prepare_namespace的最后己行代码
mount_root();
out:
sys_mount(".", "/", NULL, MS_MOVE, NULL);
sys_chroot(".");
security_sb_post_mountroot();
在mount_root中,有最后几行(就是mount_root失败了.VFS: could not mount root)
#ifdef CONFIG_BLOCK
create_dev("/dev/root", ROOT_DEV);
mount_block_root("/dev/root", root_mountflags);
#endif
mount_block_root("/dev/root", root_mountflags); 这个函数会用所有的文件系统类型对/dev/root(cpio)进行mount
但是所有的文件系统类型都失败了,最后就是那个panic
问题二是,我这个文件系统是什么类型? 我不知道它是什么类型的,也找不到相关资料,就知道它和kernel被作成了bzImage
我的代码是2.6.23
grub:
kernel /bzImage root=ram0 rw
boot
CONFIG_INITRAMFS_SOURCE="../rootfs.cpio"
你在rootfs.cpio中自己指定init,如果是busybox做的rootfs,直接在根文件系统中ln -s bin/busybox init就可以
从你问你的问题看, 你是想使用cpio-initrd, 可是你把rootfs直接链接到kernel中,这是initramfs的用法
如果你想使用cpio-initrd,需要由boot loader initrd 文件加载到内存的特定位置
想使用initramfs,你可以指定CONFIG_INITRAMFS_SOURCE把它直接链接到kernel中。
[url]http://www.ibm.com/developerworks/cn/linux/l-k26initrd/index.html[/url]
[url][/url]
[[i] 本帖最后由 x4ulocca 于 2007-11-23 16:53 编辑 [/i]]
谢谢,前面来有段代码没看到,ULK也没怎么说rootfs,就是initramfs释放到rootfs,我的rootfs里没有/init 所以接着处理initrd,而我确没有,所以就vfs没有root了
建个链接就好了
谢谢