免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11776 | 回复: 6
打印 上一主题 下一主题

[驱动] initrd,挂载到/dev/ram0,究竟是怎么一回事?还有关于busybox [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-27 23:36 |只看该作者 |倒序浏览
本帖最后由 ChiyuT 于 2011-05-28 21:25 编辑

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

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

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

请大家多指教。

论坛徽章:
0
2 [报告]
发表于 2011-05-27 23:41 |只看该作者
本帖最后由 ChiyuT 于 2011-05-27 23:49 编辑

另外,关于busybox。

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

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

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

谢谢!

论坛徽章:
0
3 [报告]
发表于 2011-05-28 21:26 |只看该作者
原文有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吧。

论坛徽章:
0
4 [报告]
发表于 2011-05-29 17:14 |只看该作者
建议去了解一下linux 的启动步骤
系统启动后首先加载bootloader
接着会载入kernel 当kernel加载完成后 文件系统中 /dev /proc /sys就已经存在了
此时如果有initrd 程序会根据bootloader设置 跳到initrd的init继续初始化系统


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

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

论坛徽章:
0
5 [报告]
发表于 2011-05-31 14:59 |只看该作者
本帖最后由 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  是否受影响?

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

论坛徽章:
1
天秤座
日期:2014-03-25 15:12:56
6 [报告]
发表于 2016-04-02 11:02 来自手机 |只看该作者
我觉得这里的copy有两种概念,第一个是dd,第二个是cp,不知理解正确否,楼主这几年有什么心的理解

论坛徽章:
0
7 [报告]
发表于 2016-04-15 20:44 |只看该作者
我也看到这个地方,有一样的困惑。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP