Linux启动 grub 虚拟文件系统initrd详解(二)
2016-12-30 18:10
190 查看
上文我们分析了启动和grub的一些东西,这节让我们讨论一些linux内核加载启动和虚拟文件系统initrd的问题。
首先还是grub的menu.lst
其中关于default 和timeout的讲解网上都有说明
这里的root(hd0,0) 代表的以下的kernel和initrd文件系统所在的位置是第一块硬盘的第一个分区,这个可以根据自己内核存放位置设置,但是要注意grub的文件系统类型。
内核文件后面跟着的参数就是内核参数,他会在进入系统后保留在/proc/cmdline里面
grub读取到内核文件之后,接着内核会自解压到内存当中, 并利用内核功能去测试和驱动各硬件,重新检查一次硬件。
由于部分的驱动程序位于硬盘的根分区下,这样启动过程中就要挂载根分区,实现动态加载内核模块。
So 问题来了,内核怎样能认出你的硬盘并读取你的硬盘呢? 之前是、BIOS中断实现读取硬盘MBR,内核并不会,但是内核还要加载硬盘中部分的驱动程序如/lib/modules下面的模块。
这就是initrd这个虚拟文件系统的存在的目的。
来让我们看一下这个initrd文件到底是一个什么东东:
由上图可以看出这个initrd是一个cpio 格式文件并gzip压缩过,我们把它解压后可以看到其实就类似我们的根分区了,对,他就是一个仿真的根目录。我们进入lib里面看看:
目录里面有很多的模块及相关驱动程序。
那么这个文件系统是怎样执行的呢? initrd 被加载到内存,然后由内核解压 解压之后,会执行init脚本,看 它是一个可执行文件一个shell脚本。
关于它的分析详细请看http://blog.csdn.net/oldlinux/article/details/43243103
其实就是建立必要的挂载目录,加载必要的模块,试着去挂载真正的根分区,找到/sbin/init 从而开启第一个进程。
其实这里如果你想在系统挂载根分区之前对硬盘操作都可以放到init脚本里面操作,也可以在initrd里面加入自己的binary,所有的操作都是在内存中。
好的,接下来谈一下/sbin/init之后的一些系统初始化操作。
首先还是grub的menu.lst
其中关于default 和timeout的讲解网上都有说明
这里的root(hd0,0) 代表的以下的kernel和initrd文件系统所在的位置是第一块硬盘的第一个分区,这个可以根据自己内核存放位置设置,但是要注意grub的文件系统类型。
kernel /vmlinuz..... ro root=.......
内核文件后面跟着的参数就是内核参数,他会在进入系统后保留在/proc/cmdline里面
grub读取到内核文件之后,接着内核会自解压到内存当中, 并利用内核功能去测试和驱动各硬件,重新检查一次硬件。
由于部分的驱动程序位于硬盘的根分区下,这样启动过程中就要挂载根分区,实现动态加载内核模块。
So 问题来了,内核怎样能认出你的硬盘并读取你的硬盘呢? 之前是、BIOS中断实现读取硬盘MBR,内核并不会,但是内核还要加载硬盘中部分的驱动程序如/lib/modules下面的模块。
这就是initrd这个虚拟文件系统的存在的目的。
来让我们看一下这个initrd文件到底是一个什么东东:
由上图可以看出这个initrd是一个cpio 格式文件并gzip压缩过,我们把它解压后可以看到其实就类似我们的根分区了,对,他就是一个仿真的根目录。我们进入lib里面看看:
lib/modules/内核版本/kernel/
目录里面有很多的模块及相关驱动程序。
那么这个文件系统是怎样执行的呢? initrd 被加载到内存,然后由内核解压 解压之后,会执行init脚本,看 它是一个可执行文件一个shell脚本。
关于它的分析详细请看http://blog.csdn.net/oldlinux/article/details/43243103
其实就是建立必要的挂载目录,加载必要的模块,试着去挂载真正的根分区,找到/sbin/init 从而开启第一个进程。
其实这里如果你想在系统挂载根分区之前对硬盘操作都可以放到init脚本里面操作,也可以在initrd里面加入自己的binary,所有的操作都是在内存中。
好的,接下来谈一下/sbin/init之后的一些系统初始化操作。
相关文章推荐
- Linux启动 grub 虚拟文件系统initrd详解(一)
- Linux启动 grub 虚拟文件系统initrd详解(三)
- Linux启动配置文档(grub.conf)详解
- Linux系统启动流程详解(BIOS—MBR—GRUB--Kernel—init—run
- Linux的启动流程以及GRUB详解
- linux笔记 第13天 系统启动流程、Grub详解、case函数
- linux 系统启动详解 grub故障恢复
- Linux01-Linux启动流程及grub详解45
- Linux启动流程和grub详解
- grub启动过程详解
- SuSE Linux enterprise 修改grub的启动顺序
- 修改grub引导的Linux和Windows双系统的启动顺序和删除Linux系统的方法
- linux启动(grub)时背景图片制作
- Linux启动过程详解
- Linux 系统启动过程(initrd部分) --- Linux boot process (initrd part)
- linux如何制作grub启动光盘
- Linux系统启动过程详解
- linux启动过程详解
- 让GRUB默认启动Windows而不是Linux
- Linux操作系统下GRUB启动菜单的修复方法