initrd,挂载到/dev/ram0,究竟是怎么一回事?还有关于busybox

发布于 2022-10-15 05:51:38 字数 409 浏览 29 评论 0

本帖最后由 ChiyuT 于 2011-05-28 21:25 编辑

今天为这个问题百思不得其解,请大家多多指教。

内核会将initrd映像从ram拷贝到内核内部的一段空间,也就是/dev/ram0这个设备,并且挂载成一个虚拟根文件系统。

我纳闷的是,根据这个说法,在挂载之前,就没有所谓的根文件系统了,那么这个/dev/ram0究竟是个什么东东?是怎么生成的,什么时候生成的?类似的还有/dev/console。

请大家多指教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

只为一人 2022-10-22 05:51:38

本帖最后由 ChiyuT 于 2011-05-27 23:49 编辑

另外,关于busybox。

我发觉一直没有把文件系统和根文件系统这两个概念弄清楚。

busybox做成的jffs2是一个根文件系统吧?它是不是就没有经过initrd这么一个步骤。。。?那么它究竟又是如何被内核挂载成为一个根文件系统的呢?

另外,jffs2在启动的时候,是不是会将nand flash先扫描一遍,将信息全部储存在ram中?如果对某一个文件进行擦写,跟真正的文件,是否同步?

谢谢!

囚你心 2022-10-22 05:51:38

原文有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吧。

萌无敌 2022-10-22 05:51:38

建议去了解一下linux 的启动步骤
系统启动后首先加载bootloader
接着会载入kernel 当kernel加载完成后 文件系统中 /dev /proc /sys就已经存在了
此时如果有initrd 程序会根据bootloader设置 跳到initrd的init继续初始化系统

而/dev/ram应该是kernel初始化后的内存设备 kernel启动后将flash中的initrd的image解压(拷贝)到ram当中这里就是/dev/ram

不知道这样说有没有表达清楚

御弟哥哥 2022-10-22 05:51:38

本帖最后由 ChiyuT 于 2011-05-31 15:01 编辑

建议去了解一下linux 的启动步骤
系统启动后首先加载bootloader
接着会载入kernel 当kernel加载完成后 文 ...
la.lune 发表于 2011-05-29 17:14

谢谢指点。

我想我有点儿明白了。我把根文件系统和“/”似乎理解成了同一个东东。我以为没有根文件系统就没有"/"。

您的意思是说,当内核加载完成之后,已经有了 /dev/ram /dev/sys /dev/proc  这类文件系统。

我觉得很困惑的是,那么这个由内核生成的"/" 究竟是个什么东东?

真正的根文件系统替换了内核生成的 "/",又是个什么概念。。。替换过程中,/dev/ram /dev/sys /dev/proc  是否受影响?

还是自己水平不够啊。。。

玉环 2022-10-22 05:51:38

我觉得这里的copy有两种概念,第一个是dd,第二个是cp,不知理解正确否,楼主这几年有什么心的理解

挽手叙旧 2022-10-22 05:51:38

我也看到这个地方,有一样的困惑。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文