linux系统启动流程
1.首先通过bios加载磁盘(包括U盘,硬盘),然后再去找EFI等文件系统分区,在分区中找到启动内核程序(一般为grub或者elilo等),在grub中配置启动vmlinuz内核文件。(vmlinuz见编译内核文章)。
2.如果是vmlinuz-generic的话,一般情况下,操作系统前期的一些开机动画,会在vmlinuz内核启动前进行,这时候就需要initrd小文件系统了,在它里面会有小部分linux命令等。plymouth开机动画也是在这里面安装调用,首先initrd的运行是基于initrd中的init脚本。这个可以自行解开initrd,去看看init脚本怎么写的。
3.如何解开 和 重新生成修改后的initrd
一般情况下,initrd都是以initrd.gz出现。
解开initrd
gzip -d initrd.gz
cpio -idmv < initrd
修改initd
在本机/boot/initrd-tree文件夹,这就是本机initrd.gz对应的解开之后的目录。如果直接想修改本机initrd,上面的步骤可以略过,直接在initrd-tree中修改即可
cd initrd-tree
find . | cpio -o -H newc | gzip -9c > ../initrd-splash.gz //加入自定义修改后,执行下面命令打出新initrd包
如果要使用新的initrd文件,要么再去grub配置中,修改调用initrd地方改为新名称,要么直接用新的覆盖旧文件放入/boot/下(不建议)。