制作自己的Linux系统与启动光盘

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系统。


本文出自 “瞬间而过” 博客,请务必保留此出处http://misliang.blog.51cto.com/6973084/1610670

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。