LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3163|回复: 6

initrd,initramfs,"root="的关系

[复制链接]
发表于 2007-4-11 22:01:47 | 显示全部楼层 |阅读模式
请教2.6内核中initramfs_data.cpio.gz,和内核启动参数中的"initrd=0x00400000,0x20000"指定的initrd,以及"root=/dev/ram"指定的根设备的作用和区别
问题起因:
用的是arm linux 2.6.12,编译选项打开了CONFIG_BLK_DEV_INITRD以支持initrd,
把ramdisk.img放在开发板的0x00400000地址处,并在启动参数中通过"initrd=0x00400000,0x20000"告诉内核initrd的地址,同时有"root=/dev/ram"参数,内核成功启动,并以ramdisk.img为最后登陆看到的根文件系统"/", 这里initrd和/dev/ram是什么关系了?
修改参数调试:
1,把"root=/dev/ram"改成"root=/dev/mtdblock0"(/dev/mtdblock0是我nandflash的一个分区)后,会出现“RAMDISK: Couldn't find valid RAM disk image starting at 0”的提示,这个提示是检查initrd映像文件的类型时输出的,不能获得ramdisk的块的数目,然而内核仍然能够把mtdblock0 mount成用户空间根文件系统,只是再接着执行init时出错,这是因为我的mtdblock0中没有init程序,属正常
2,去掉"root=/dev/ram",只留下"initrd=0x00400000,0x20000"参数,仍然有“RAMDISK: Couldn't find valid RAM disk image starting at 0”的提示,但内核mount不到根文件系统,出错

这个"initrd="指定的ramdisk映像和"root="指定的根设备关系怎样的了?
谢谢!
发表于 2007-4-11 23:07:59 | 显示全部楼层
默认不指定 root 的话,就是 /dev/ram,如果我没记错。至少在有initrd的时候是这样的。

至于指定的镜像和root关系,就是initrd永远都是 /dev/ram 里边的东西。如果我没记错 block name 的话。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-12 13:22:26 | 显示全部楼层
Post by 晨想
默认不指定 root 的话,就是 /dev/ram,如果我没记错。至少在有initrd的时候是这样的。

至于指定的镜像和root关系,就是initrd永远都是 /dev/ram 里边的东西。如果我没记错 block name 的话。


多谢回复!
不指定root而只指定initrd地址的情况,判断不出initrd中的类型阿,指定initrd的情况下,root必须指定为/dev/ram,因为确实initrd映像中的内容就是copy进/dev/ram中了

我的疑惑是root指定的仅仅是最后的用户空间的根文件系统,为什么不是/dev/ram就在identify_ramdisk_image()函数中不能判断其类型和块数
再次感谢!
回复 支持 反对

使用道具 举报

发表于 2007-4-12 18:07:46 | 显示全部楼层
这个问题,我无法回答,太深奥了,我只知道怎么用。。呵呵。
回复 支持 反对

使用道具 举报

发表于 2007-4-13 11:43:53 | 显示全部楼层
我的理解:
initrd="指定的ramdisk映像"指定了文件系统的物理地址,
至于:root=/dev/指定的文件系统,内核要根据这个字符串(仅仅是个字符串)来创建内核中的的rootfs目录树数据结构,然后把此字符串赋值给rootfs的根挂载点成员变量。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-13 13:02:29 | 显示全部楼层
我是在查看启动代码时发现疑惑的:
内核根据"initrd="参数获得initrd映象的物理地址,把initramfs_data.cpio.gz中的目录扩展成内核中的临时的"/",在把initrd映象拷贝到/initrd.image中,再建立/dev/ram设备,再把/initrd.img拷贝到/dev/ram中,最后根据"root="参数,如果是/dev/ram,就是以initrd为最后的用户空间的"/"了,但如果root=指定的不是/dev/root,就initrd就没用置弃了,但这个"root="参数设置的是最后用户空间的"/",却能影响前面initrd映象的拷贝和识别,不解中。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-13 13:02:51 | 显示全部楼层
不好意思,发重了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表