走进Linux 操作系统
| 这些工具。 在安装的过程中可以直接编译一个整体式的内核,但这并不能很好的解决问题:首先,所有的编译工具还 需要,其次,编译过程中出现差错导致无法完成任务的概率太大了。所以,我们仍然要使用模块机制:模块机制很可靠,出了错误也只不过不加载对应的模块而已,不会使整个任务失败。而载入模块,象前 面说的,也是在挂载root文件系统之前就要得到模块的。 基于以上理由,linux引入了initrd机制。initrd做什么 initrd允许系统在启动 的时候载入一个ram盘,这个ram盘可以被当作一个root文件系统,程序可以在其上运行。(有两重含义,第一,程序在上面;第二,程序的文件系统环境也在上 面。)在此之后,可以从别的设备上挂载一个新的root文件系统,先前的root文件系统(initrd)就会被移动到 一个目录上去,最终被卸载掉。 为什么要使用ram盘呢?首先,使用ram盘能方便的支持以后可能发生的变化;另外,也是为了保持 boot loader 工作尽可能的简 单。在系统引导时,除了内核镜像之外,boot loader把所有相关的信息作为一个文件读入内存,内核在启动中将该文件作为一段连续的内存块看待。也就是把 它当作ram盘来 使用了。正因为如此,这种机制被称作“初始 ram 盘 (initial ram disk)”,缩 写成 initrd。 initrd主要用来把系统 的启动划分为两个阶段:初始启动的内核只需保留最精简的驱动程序最小集,此后,在启动必须加载附加的模块时,从initrd中加载。 initrd进行的操作 使用initrd的时候,典型的 系统启动的流程变为:boot loader读入内核镜像以及initrd文件内核将initrd文件转成“普通”的ram盘,并且释放掉initrd文件占用的内 存。initrd被当作root文件系统,以可读可写(read-write)方式安装。/linuxrc被执行 (它可以是任何可执行文件,包括脚本在内;它以uid0身份执行,基本上能完成所有init程序可以做的工作)linuxrc安装“实际” 的root文件系 统linuxrc通过pivot_root系统调用将root文件系统放置在root目录下。常用的启动流 程(比如调用/sbin/init)开始执行。卸载initrd文件系统。 注意,这是一个典型流程。其实initrd机制可以通过两 种方式使用:要么就是作为一个普通的root文件系统使用,这样的话第5、第6两个步骤可以被略过,直接执行/sbin/init(我 们的试验系统就是利用这种方法);要么作为一个过渡环境使用,通过它内核可以继续装载“实际”的root文件系统。 |
<< Linux 串口截止阀的分类以及特点 >>
