转自:http://www.lupaworld.com/forum.php?mod=viewthread&tid=61425

ref:  http://smilejay.com/2013/06/extract-vmlinuz-and-initrd/


个人Notes:

      (1)有这个必要吗? --相当有!不然内核太大!不符“内核”原则。

      (2)作用:“既要内核小,又要内核不带草”,解决“先有鸡还是先有蛋的问题”。

      (3)解决该问题所依据的客观事实:ramdisk根文件系统也是由bootloader通过低级的读写命令加载到内存的,因此内核启动后可以轻松挂载内存中的ramdisk。

      (4)总结:出来“混”,总是要“还”的,只是迟早问题。


问题:内核与ramdisk到底是什么关系?系统在启动的过程中,内核与ramdisk分别扮演什么角色啊?

精彩回答:
1) ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。
一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核(注:即编一个通用的、万能的内核),那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的(注:这是因为ramdisk临时文件系统和内核一样,也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存,因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了

2) ramdisk还举出一个作用,现在的发行版在boot时一般都是图形界面的,那么,ramdisk就可以放framebuffer驱动和一些图片来做这种简单的动画。

3)前一段时间刚好也在研究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 上运作,或者永远都在 initrd 所引导执行的 /linuxrc 程序中执行 (注意:kernel 永远保留 PID=1 作为 init process 识别,而 /linuxrc 执行的 PID 必非为 1),在许多装置如智慧型手机,都是行之有年的,不过这不影响我们后续的探索。
里边所说的 initrd 大体上就是指 包含根文件系统的ramdisk。

4)  vmlinuz 是可引导的、压缩的内核。“vm”代表“Virtual Memory”。内核编译时通过命令 make bzImage 创建,然后通过如下命令产生。bzImage 是压缩的内核映像,需要注意,bzImage 不是用 bzip2 压缩的,bzImage 中的 bz 容易引起 误解,bz 表示“big zImage”。 bzImage 中的 b 是“big”意思。 zImage(vmlinuz) 和 bzImage(vmlinuz) 都是用 gzip 压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip 解压缩代码。所以你不能用 gunzip 或 gzip -dc 解包 vmlinuz。

老的 zImage 解压缩内核到低端内存(第一个640K),bzImage 解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用 zImage 或 bzImage 之一,两种方式引导的系统运行时是相同的。大的内核采用 bzImage,不能采用 zImage。 vmlinux 是未压缩的内核,vmlinuz 是 vmlinux 的压缩文件。

initrd 是“initial ramdisk”的简写。initrd 一般被用来临时的引导硬件到实际内核 vmlinuz 能够接管并继续引导的状态。一般 initrd 主要是用于加载 ext3 等文件系统及 SCSI 设备的驱动。initrd 映象文件是使用 mkinitrd 创建的。(比较新的initrd的名称一般为这样的:initramfs-3.10.0-rc1+.img,较老一点,命名形如:initramfs-2.6.32-358.el6.x86_64.img)。

转载于:https://www.cnblogs.com/pinganzi/p/6824606.html

内核与ramdisk到底是什么关系相关推荐

  1. 内核与ramdisk到底是什么关系?

    假如把所有驱动/模块都编译进内核(注:即编一个通用的.万能的内核),那自然没问题,但是这样就违背了"内核"的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/mo ...

  2. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  3. linux刷新磁盘_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  4. 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug

    0.11内核rd_load@ramdisk.c中memcpy函数好像有bug,如: #define memcpy(dst,src,n) \     __asm__("cld;rep;movs ...

  5. 噪声强度(噪声功率) 噪声方差到底有什么关系?

    噪声强度(噪声功率) 噪声方差到底有什么关系?_chenxingp123的专栏-CSDN博客_噪声功率

  6. 鸿蒙系统和汽车,华为鸿蒙系统和新日电动车,到底是什么关系?

    华为鸿蒙系统和新日电动车,到底是什么关系? 2021年05月31日 11:13作者:网络编辑:王动 分享 近日,华为鸿蒙系统即将正式上线的消息在全网刷屏,自Harmony OS发布以来,华为始终强调: ...

  7. 张一鸣:技术与人文、责任与价值观之间到底是什么关系?

    如果你印象中习惯了神采飞扬趾高气昂高瞻远瞩的霸道总裁,张一鸣恐怕会让你感到意外. 对于一家110亿美元公司的创始人而言,他显得太年轻和安静--甚至有些乖巧.他的同事们告诉<财经>,这位CE ...

  8. Scaled Agile Framework (SAFe) 和产品管理间到底有什么关系 ?

    SAFe 就是将 RUP (Rational Unfied Process), Lean, Scrum 给搅和在一起. SAFe 也许解决了大团队在制定版本计划与协作上的一些问题. 但我实在不明白,S ...

  9. 一文看懂“摩根系”,摩根士丹利、摩根大通、大摩、小摩到底有什么关系?

    作为一名投行人你不可能没被摩根大通,摩根士丹利,JP摩根,大摩,小摩,上投摩根,摩根士丹利华鑫,大摩华鑫绕晕过.这一串名字看起来有点相似,但是连在一起好像消不掉--他们到底有什么关系? "摩 ...

最新文章

  1. Win10环境Tensorflow-GPU13.1/JupyterNotebook的安装
  2. QTreeWidget
  3. 重拾Javascript (四) KnockoutJs使用
  4. zabbix监控linux网卡流量,zabbix实现linux流量变化率监控
  5. springmvc整合dubbo
  6. 如何检测元素外部的点击?
  7. git遇到的问题解决方案
  8. ik分词 java_Java实现使用IK Analyzer实现中文分词
  9. html range样式修改,自定义(滑动条)input[type=range]样式
  10. Multisim 14.0安装包+详细安装步骤
  11. Excel如何通过年份上的时间差操作求得员工工龄
  12. “老K,怎样副业搞钱?”
  13. SQL service基础(九)用户定义数据类型和用户定义函数的概念、创建及使用方法
  14. Unity TouchScript大屏
  15. Python项目--批量下载小姐姐壁纸
  16. 苏黎世联邦理工开发的多相机光学触觉传感器,可以实现基于视觉的机器人皮肤
  17. Linux is内存管理,【原创】(七)Linux内存管理
  18. z420开机无法进入BIOS,出现A9和光标
  19. NOIP2017普及组:棋盘
  20. OpenMLDB 社区月报 | 2022年11月

热门文章

  1. python图像识别代码_python图像识别--验证码
  2. 均值已知检验方差_方差分析
  3. leetcode刷题:121题stock
  4. 解封装(五):AVStream和AVCodecParameters分析
  5. oracle mseq,一次RMAN备份报错的诊断过程(一)
  6. 如何用c语言随机输出除法题,随机产生30道四则运算(C语言)
  7. echart单击后获取横坐标值_Excel综合应用(1): 批量打印格式化后的表格
  8. mysql 分组group
  9. flask request传参
  10. python 偏函数装饰器