使用isolinux制作liveUSB

摘要:在linux的启动过程中,控制权需要从biso转移到引导程序再转移到系统内核。其中,引导程序有很多种,包括lilo,grub等,本文我们讲解的是isolinux。通过学习isolinux的引导方式,我们将能学习到如何制作“从USB启动的系统”。同时,如果你想定做自己的linux发行版,你应该如何做?这些,我们都能在学习isolinux的时候找到答案。最后,本文其他系列的文章还将教你如何定制自己的系统。

1.isolinux是什么

在操作系统启动之前,需要由引导程序将操作系统加载到内存,isolinux就是引导程序的一种,和他有相同作用的是lilo和grub。整个系统的加载和初始化过程,大致如下图:

使用isolinux制作liveUSB_第1张图片

SYSLINUX/ISOLINUX 是专门用来引导可移动介质的轻量级引导程序,因为这样的介质通常不会固定只针对一种硬件。我们主要介绍以下ISOLINUX 引导安装程序。ISOLINUX其实是一个简单的Linux系统。


2.isolinux的构造

引导程序isolinux.bin:它的作用是读取isolinux.cfg,根据配置选项,决定引导的内核文件。


配置文件isolinux.cfg:它的格式如下:

label linux
  kernel vmlinuz
  append initrd=initrd26.gz ramdisk_size=1000000 vga=791
关于cfg文件中相关配置选项的意义,大致如下:

必须选项:

 prompt=1这是说,向用户提示输入选择,直接回车就是缺省选项了。当然,如果使其等于0则,不向用户提示输入选择。

timeout=0没有时间限制,当然也可以指定一定时间之后自动进入缺省选项。这个时间是秒数的10倍。例如,如果要等待30秒进入,则应该在这里输入timeout=300。

可选选项:略


系统启动内核:initrd

严格说来,initrd并不是引导程序的一部分,而是内核程序的一部分。关于initrd的做作用和相关介绍可以参考这里:http://blog.csdn.net/trochiluses/article/details/17583991


initrd文件很好制作,可以将Linux系统启动时的initrd文件作为一个基本文件,在里面修改即可。如果有需要添加的内容,直接将linux系统中的相应文件拷贝进去就可以了。另外,initrd下面的启动脚本是init文件,建议根据自己的需求修改该文件,该文件是一个用shell写的脚本。在Linux系统启动时,加载完成内核以后,就开始调用该脚本了,所以有什么需要启动的,都可以在该脚本中添加。甚至可以将该脚本作为一个自己安装,修复等的基本脚本来做。


3.制作实例

我们的目标是利用isolinux来引导系统,所以,我们需要制作一个iso镜像文件,修改initrd中的相关配置,制作引导配置文件。


3.1)启动界面的制作

         字符模式启动界面

        字符模式的启动界面,使用的是menu.c32内核做为启动内核。menu.c32文件由ISOLINUX包提供。可以直接从ISOLINUX包中编译产生。

        有了该文件,我们只需要对isolinux.cfg文件进行修改一下即可。具体的修改可以参照下面的配置项

default menu.c32
prompt 0
menu title My Distro Installer
timeout 600
f1 help.txt
f2 version.txt
label bls
menu label Normal install
menu default
kernel vmlinuz
append initrd=cpio.gz rdinit=/init
label bad
menu label Bad hardware install
kernel vmlinuz
append initrd=cpio2.gz badhardware rdinit=/init

       可以看的出来,这里的主要调整是,调整default选项,修改其为menu.c32文件。因为如此是指定,默认使用menu.c32引导。接下来就是几个menu选项的加入。这几个选项的主要目的是设置启动的选择项。在命名时建议能够设置成容易识别的名称。

        另外,注意menu default选项是指定,默认从那项启动。

        当然,使用menu时,还可以加入下面的一些参数来设置选项窗口的宽高比:

MENU WIDTH 80	 /*设置宽度*/
MENU MARGIN 10
MENU ROWS 12	 /*设置行数*/
MENU TABMSGROW 18
MENU CMDLINEROW 12
MENU ENDROW 24
MENU TIMEOUTROW 20

        这几个选项可以添加,也可以不添加,可以均添加,也可以一个都不添加。设置很方便。

        此种启动,都是字符模式,而且是用ascii码绘制出来的。其优点是占用内存小,启动快。缺点是界面单调。

使用vesamenu制作启动界面

      使用vesamenu启动的方法与使用menu的使用方法基本是一致的。所不同的是default的引导项不一样,此种模式下,default的启动项要设置成vesamenu。

       另外,vesamenu的默认背景色是灰色,如果想更换背景图片,可以加入MENU BACKGROUND os102.png来更换背景图片。但是值得注意的是背景图片不能够制作的过于绚丽,因为该图片如果比较绚丽,则无法被正常加载。

        这种方法的有点在于启动快,而且可以制作一个图形启动界面。缺点是无法制作一个比较绚丽的启动界面。

使用bootlogo文件制作启动界面

       使用bootlogo制作启动界面的方法是,先制作一个比较绚丽的bootlogo文件。这个文件是一个加入图片的二进制文件,具体如何制作,还需要高手能够帮忙指点一下,小弟还不是很清楚。另外,只需要在isolinux.cfg文件中加入gfxboot bootlogo选项即可。


3.2)ISO文件的制作

在准备制作ISO的目录里添加一个子目录,比如boot/isolinux/,然后放入 isolinux.cfg和一个对所有光盘都一样的isolinux提供的引导介质 isolinux.bin,当然还要放入相应的kernel,initrd等我们需要在引导时调用到的文件,然后制作iso的时候要使用-b参数,来指明要使用isolinux.bin文件启动:

mkisofs -o output.iso /
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat /
-no-emul-boot -boot-load-size 4 -boot-info-table /
for-iso-dir/

最后的参数就是指定的光盘的目录了,-c参数的那个文件是自动生成的,不用太担心,其余参数都是固定的。事实上,也常常有人用isolinux/而不是 boot/isolinux/,这都是约定俗成的,你完全可以用自己的。这里的路径都是相对于光盘的根的,而和制作光盘时的工作目录没有关系。


4.总结

定制自己的发行版或者liveUSB,往往需要改动initrd,改动的方法如下:

在2.6以后的内核中,initrd的格式是gzip,此时,需要将它解压缩为普通的文件系统镜像。

gzip -d initrd.img.gz
注意:gzip解压缩需要识别文件后缀名为gz,所以我们先要给文件添加后缀名。

解压缩以后,我们用file命令查看,可以发现initrd.img的文件格式发生了变化。

解压缩以后,这是一个cpio格式的文件,需要将归档文件打开:

cpio -idv < initrd.img

启动以后,执行init脚本,实际上,如果我们想定制自己的发行办,只是需要制作这个initrd和相关的iso文件即可。制作过程和上述过程相反。

你可能感兴趣的:(liveusb,isolinux)