内核,initrd,ramdisk,关系,用途

2024-04-07 11:48
文章标签 关系 内核 initrd ramdisk

本文主要是介绍内核,initrd,ramdisk,关系,用途,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

原名:内核与ramdisk到底是什么关系?


个人Notes:

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

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

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

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


问题:

http://linux.chinaunix.net/bbs/archiver/tid-1135273.html

内核与ramdisk到底是什么关系?系统在启动的过程中,内核与ramdisk分别扮演什么角色啊?
我对启动的过程一直不明白,懂的朋友帮我讲讲。
谢谢

精彩回答:
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当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了


ramdisk还举出一个作用,现在的发行版在boot时一般都是图形界面的,那么,ramdisk就可以放framebuffer驱动和一些图片来做这种简单的动画。
前一段时间刚好也在研究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),在许多装置如智慧型手机,都是行之有年的,不过这不影响我们后续的探[/quote]
里边所说的 initrd 大体上就是指 包含根文件系统的ramdisk


另附IBM专家之--Linux2.6 内核的 Initrd 机制解析

 

http://www.ibm.com/developerworks/cn/linux/l-k26initrd/

这篇关于内核,initrd,ramdisk,关系,用途的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882523

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

Ubuntu22.04回退系统内核

文章目录 起因回退操作卸载内核禁止内核升级 起因 最近因为系统内核自动升级,导致显卡驱动检测不到,炼丹环境被破坏。无奈只能重装驱动,于是跟着手册操作发现驱动要求的是内核版本是5.15.0-25-generic,而我通过uname -r发现这时候的内核版本是6.8.0-40-generic,看来只能回退了。 我搜索了网上很多的文章,没有一篇文章能够完全解决这个问题,所以在我多次尝

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统