initrd,挂载到/dev/ram0,究竟是怎么一回事?还有关于busybox
本帖最后由 ChiyuT 于 2011-05-28 21:25 编辑
今天为这个问题百思不得其解,请大家多多指教。
内核会将initrd映像从ram拷贝到内核内部的一段空间,也就是/dev/ram0这个设备,并且挂载成一个虚拟根文件系统。
我纳闷的是,根据这个说法,在挂载之前,就没有所谓的根文件系统了,那么这个/dev/ram0究竟是个什么东东?是怎么生成的,什么时候生成的?类似的还有/dev/console。
请大家多指教。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
本帖最后由 ChiyuT 于 2011-05-27 23:49 编辑
另外,关于busybox。
我发觉一直没有把文件系统和根文件系统这两个概念弄清楚。
busybox做成的jffs2是一个根文件系统吧?它是不是就没有经过initrd这么一个步骤。。。?那么它究竟又是如何被内核挂载成为一个根文件系统的呢?
另外,jffs2在启动的时候,是不是会将nand flash先扫描一遍,将信息全部储存在ram中?如果对某一个文件进行擦写,跟真正的文件,是否同步?
谢谢!
原文有2段是这样阐述的:
When the kernel boots, first it detects the presence of the initrd image. Then it copies the compressed binary file from the specified physical location in RAM into a proper kernel ramdisk and mounts it as the root file system。
当内核启动的时候,它首先会检测initrd映像的存在,然后它将这个压缩的二进制文件从RAM里的特定位置拷贝到内核里一个合适的内存磁盘里,并且将它挂载为根文件系统。
the kernel decompresses the compressed initrd image from physical memory and eventually copies the contents of this file into a ramdisk device (/dev/ram). At this point, we have a proper file system on a kernel ramdisk. After the file system has been read into the ramdisk, the kernel effectively mounts this ramdisk device as its root file system. Finally, the kernel spawns a kernel thread to execute the linuxrc file on the initrd image。
内核将压缩的initrd映像从物理内存里解压缩,并且将这个文件的内容全部拷贝进一个ramdisk的设备(/dev/ram)。在这个时候,我们在内核的ramdisk上就有了一个合适的文件系统。当文件系统被读进ramdisk之后,内核有效地将这个ramdisk挂载为它的根文件系统。最后,内核会执行一个内核线程来执行initrd映像里的linuxrc文件。
我就纳闷了,尤其是第二段话,明明这个时候还没有将ramdisk挂载为根的时候,这个/dev/ram究竟是个神马东东?从哪儿冒出来的?连根文件系统都还没有,还怎么挂载呢?
最后一段红字,明明是将/dev/ram挂载为根文件系统之后,再去执行的linuxrc(也就是加载各种驱动)。实际上,加载驱动本身也是在用户空间才能进行的,没有根文件系统的话,也没法执行insmod吧。
建议去了解一下linux 的启动步骤
系统启动后首先加载bootloader
接着会载入kernel 当kernel加载完成后 文件系统中 /dev /proc /sys就已经存在了
此时如果有initrd 程序会根据bootloader设置 跳到initrd的init继续初始化系统
而/dev/ram应该是kernel初始化后的内存设备 kernel启动后将flash中的initrd的image解压(拷贝)到ram当中这里就是/dev/ram
不知道这样说有没有表达清楚
本帖最后由 ChiyuT 于 2011-05-31 15:01 编辑
谢谢指点。
我想我有点儿明白了。我把根文件系统和“/”似乎理解成了同一个东东。我以为没有根文件系统就没有"/"。
您的意思是说,当内核加载完成之后,已经有了 /dev/ram /dev/sys /dev/proc 这类文件系统。
我觉得很困惑的是,那么这个由内核生成的"/" 究竟是个什么东东?
真正的根文件系统替换了内核生成的 "/",又是个什么概念。。。替换过程中,/dev/ram /dev/sys /dev/proc 是否受影响?
还是自己水平不够啊。。。
我觉得这里的copy有两种概念,第一个是dd,第二个是cp,不知理解正确否,楼主这几年有什么心的理解
我也看到这个地方,有一样的困惑。。。