免费注册 查看新帖 |

Chinaunix

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

内核与ramdisk到底是什么关系? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-14 14:29 |只看该作者 |倒序浏览
系统在启动的过程中,内核与ramdisk分别扮演什么角色啊?
我对启动的过程一直不明白,懂的朋友帮我讲讲。
谢谢

论坛徽章:
0
2 [报告]
发表于 2009-09-14 23:49 |只看该作者
那你最好搜一下linux启动过程详解。
肯定对你有帮助

论坛徽章:
0
3 [报告]
发表于 2009-09-15 13:32 |只看该作者
启动过程我看过,没有涉及ramdisk

论坛徽章:
0
4 [报告]
发表于 2009-09-15 14:40 |只看该作者
ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。
一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核,那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的,然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了

评分

参与人数 1可用积分 +18 收起 理由
bitmilong + 18 我很赞同

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2009-09-15 14:46 |只看该作者
ramdisk还举出一个作用,现在的发行版在boot时一般都是图形界面的,那么,ramdisk就可以放framebuffer驱动和一些图片来做这种简单的动画。

论坛徽章:
0
6 [报告]
发表于 2010-02-15 13:17 |只看该作者
谢谢楼上的解答!学习了。

论坛徽章:
0
7 [报告]
发表于 2010-02-24 11:41 |只看该作者
本帖最后由 cu_liang 于 2010-02-24 11:43 编辑

前一段时间刚好也在研究ramdisk, 下面是我找到的关于ramdisk的资料,希望对楼主有用
在 Linux kernel 2.4 中,initrd 大致的處理流程如下:(方括號表示主要的執行單元)
[boot loader] Boot loader 依據預先設定的條件,將 kernel 與 initrd 這兩個 image 載入到 RAM
[boot loader -> kernel] 完成必要的動作後,準備將執行權交給 Linux kernel
[kernel] 進行一系列初始化動作,initrd 所在的記憶體被 kernel 對應為 /dev/initrd 裝置設備,
        透過 kernel 內部的 decompressor (gzip 解壓縮) 解開該內容並複製到 /dev/ram0 裝置設備上
[kernel] Linux 以 R/W (可讀寫) 模式將 /dev/ram0 掛載為暫時性的 rootfs
[kernel-space -> user-space] kernel 準備執行 /dev/ram0 上的 /linuxrc 程式,並切換執行流程
[user space] /linuxrc 與相關的程式處理特定的操作,比方說準備掛載 rootfs 等
[user-space -> kernel-space] /linuxrc 執行即將完畢,執行權轉交給 kernel
[kernel] Linux 掛載真正的 rootfs 並執行 /sbin/init 程式
[user space] 依據 Linux distribution 規範的流程,執行各式系統與應用程式


值得一提的是,以上「兩階段開機」是 initrd 提出的彈性開機流程,在真實的應用中,
也可能從未需要掛載真正的 rootfs,換言之,只是把系統當作都在 RAM disk 上運作,\r
或者永遠都在 initrd 所引導執行的 /linuxrc 程序中執行 (注意:kernel 永遠保留 PID=1 作為 init process 識別,
而 /linuxrc 執行的 PID 必非為 1),在許多裝置如智慧型手機,都是行之有年的,不過這不影響我們後續的探


里边所说的 initrd 大体上就是指 包含根文件系统的ramdisk。

评分

参与人数 1可用积分 +18 收起 理由
bitmilong + 18 感谢分享

查看全部评分

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP