1、step1 准备 isolinux.bin 和工作目录
在准备制作 ISO 的目录里添加一个子目录,比如 isolinux/ ,然后放入 isolinux.cfg 和一个对所有光盘都一样的 isolinux 提供的引导介质 isolinux.bin。isolinux.bin 可以这样得到,访问syslinux 的官方网站(如下),下载它所提供的syslinux-4.04.tar.bz2 文件,目前最新版为4.04。
http://www.syslinux.org/wiki/index.php/ISOLINUX#What_is_ISOLINUX.3F
当然还要放入相应的 kernel, initrd 等等,目录结构如下:
清单 1. CD_root 目录结构
|---isolinux | |---isolinux.bin | |---isolinux.cfg |---kernel (OS 内核) |---initrd (文件系统) |---readme |
Kernel为需要引导的操作系统内核,此处选择Linux内核,内核的获取可以通过编译适当的Linux内核版本得到,本文采用的是3.10.61版。内核可以根据自己的需要进行适当的裁剪,在此不累述。记住,在编译的时候一定要选择x86_64的体系结构,因为本文是基于x86_64体系结构镜像讲解的,如果您不知道怎么选择CPU体系结构,可以参考下面的写法:
# make ARCH=x86_64 menuconfig //启动menuconfig配置菜单时,需提前安装ncurses
# make
编译完成后在arch/x86/boot中会生成内核镜像bzImage。将其拷贝到CD_root(制作iso的根目录)中,当然您也可以专门建立相关的文件夹来存放内核和文件系统,区别只是在配置isolinux.cfg时的路径问题(可参考下一小节)。
除了内核镜像外,还需要文件系统。本节采用busybox制作文件系统,并生成ramdisk镜像文件ramdisk.img。关于ramdisk文件的制作方法见章节:文件系统,其中有一小节专门讲解了如何制作根文件系统。
2.2 step2 配置 isolinux.cfg
prompt 1 timeout 100 default myBIOSiso label myBIOSiso kernel /bzImage append initrd=/ramdisk.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=60000 rw root=/dev/ram |
【 别外 append initrd=/ramdisk.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 ###(CentOS\x207\x20x86_64为镜像的id,其中\x20代表空格。其定义在mkisofs命令加上-V “CentOS 7 x86_64”)】
配置 isolinux.cfg
这里只做了简单的配置。注意,这里的文件系统是ramdisk.img,经过笔者试验,发现使用压缩镜像ramdisk.img.gz时,会出现找不到该文件的错误,当笔者将压缩文件重命名为ramdisk.gz后,问题得以解决。所以,此处笔者推荐使用append initrd=/ramdisk.gz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=60000 rw root=/dev/ram。这样做出来的引导盘会很小。笔者本次制作出来的iso镜像大小为5M,当然,如果需要,您还可以做得更小。
除此之外,利用isolinux还可以添加诸如菜单等内容。更多使用方法可以参考syslinux中的说明文档,同时笔者将在下一小节泛讲菜单的相关内容。
2.3 step3 制作 BIOS 平台可启动光盘
#mkisofs -o output.iso -b isolinux/isolinux.bin -c \ isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-tableCD_root |
制作 BIOS 平台可启动光盘的命令
制作 iso 的时候要使用 -b 参数,用来指定 isolinux.bin 所在的路径,-c 参数的那个文件(boot.cat)是自动生成的,不用关心,其余参数都是固定的。这里的路径都是相对于光盘的根目录而言,和制作光盘时的工作目录没有关系。
完成后,会在当前目录(也可以指定)生成iso镜像光盘文件,文件名为output.iso。
接下来可以在虚拟机中验证生成的iso文件是否可以启动linux。首先安装VMware6.0,然后新建一个虚拟机,内存和硬盘都不必选得很大,要知道我们的内核是非常小的,选择256M的内存,硬盘1G(可以更小,因为这样的操作不需要硬盘,只要内存足够就可以了),完成后,将生成的iso加载到虚拟机的光驱中,启动虚拟机,成功会出现如下图的相似信息。
值得注意的是,我们的根文件系统存在于内存之中,所以您会看到在加载ramdisk1.img时需要一定的时间。在此,简单梳理一下整个启动过程。首先,BIOS完成第一阶段的引导,虚拟机从光驱启动,isolinux会加载内核镜像到虚拟机内存中,然后加载文件系统(ramdisk)到内存中,将执行权限交给Linux内核,内核启动然后加载文件系统。
至此,就可以利用虚拟机验证自己修改的内核和根文件了。当然,这只是一个极为简略和粗糙的启动光盘,用于学习Linux内核和文件系统是相当有益的,你不用担心这会损害您的电脑的目前的状态,因为所有的东西都在内存之中。
在后面的章节中,笔者会介绍更加丰富的启动功能,以及如何从硬盘启动我们制作的Linux系统。