安装linux系统initrd,制作initrd(5):解剖Ubuntu安装盘

本文详细介绍了如何解剖Ubuntu安装盘的引导过程,从bootloader isolinux.bin开始,分析了配置文件、kernel、initrd.lz的加载和解压,以及如何通过init脚本挂载根文件系统。通过对initrd.lz的层层深入,揭示了Ubuntu livecd启动的内部机制。
摘要由CSDN通过智能技术生成

ubuntu定期更新他们的iso,iso引导系统后会有Try/Install Ubuntu两个选项。特别是选择了livecd,仅仅一张盘子就能运行一个图形化的linux,总觉得挺神奇的。在好奇心的推动下我打算拆开iso分析它是怎样引导到系统的。

按常识,完整引导linux系统需要bootloader/kernel/(initrd)/fs这4个组件紧密配合(要不就叫启动4要素吧),光盘引导linux也一定是遵循这个过程,因此下文也按这个顺序展开。第一步当然得挂载iso,很可惜iso是只读的,因此要做修改还得把内容拷出来并修改权限。(注意,后面的命令都是用root帐户运行的)

root@ubuntu:~# rsync /media/Ubuntu\ 14.10\ amd64/ -a ~/Desktop/iso/

root@ubuntu:~# chmod -R 744 ~/Desktop/iso/

嗯,这里安装盘已经被分尸了,后面就可以一块块拿出来看看改改。首先看下bootloader的入口点,网上查了一把安装盘以isolinux.bin作为bootloader,位于isolinux/isolinux.bin。一般bootloader会读取用户配置文件从中取出引导参数。isolinux读取的配置文件位于同层目录isolinux/isolinux.cfg:

path

include menu.cfg

default vesamenu.c32

prompt 0

timeout 50

ui gfxboot bootlogo

打开后并没有见到/proc/cmdline中常见的kernel=xxx initrd=xxx之类的内容,不过仔细一看居然有include menu.cfg语句(具体参考islinux语法),想想就知道肯定是去包含其他配置文件。经过对include语句层层跟进,最终在isolinux/txt.cfg这个文件中找到熟悉的kernel引导项:

default live

label live

menu label ^Try Ubuntu without installing

kernel /casper/vmlinuz

append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash --

label live-install

menu label ^Install Ubuntu

kernel /casper/vmlinuz

append file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splas

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值