任何一个操作系统在任何一个硬件平台上的运行都须要一个引导的过程,即,初始化软件环境、把内核从储存介质放在显存当中去,并开始运行。其实对于个别简单软硬件系统,这个过程可能及其简单,而对于PC就要略微复杂一些了。
PC的引导程序上承BIOS,下接内核的初始化代码,尽管开一次机只运行一次后就不留痕迹了,不过还是相当重要的。所有的引导程序都在做类似的事情:
留驻在存储介质的特殊位置可以被BIOS启动,或是自己是某一系统的可执行文件,可以被用户显式或隐式在该系统(寄主系统)内启动;
了解要被启动的必要启动文件的位置,包括系统内核、ramdisk等linux系统官网,并把它们读取下来、装载到显存之中;
构造环境、运行操作系统的内核,自己则就此退出历史舞台。
历史上,用于Linux的最知名的引导程序莫过分LILO和Grub了,作为通用的引导程序,两者用途广泛红旗linux系统,但对于一些特殊的场合,例如引导程序可借助的空间比较有限的可联通储存介质(浅显地说,包括光碟、软盘、u盘等),它们有些过分厚实了,这就引出了我们明天的主角SYSLINUX/ISOLINUX。
SYSLINUX/ISOLINUX是专门拿来引导可联通介质的轻量级引导程序,由于这样的介质一般不会固定只针对一种硬件。我们主要介绍以下ISOLINUX引导安装程序。ISOLINUX似乎是一个简单的Linux系统。其构造很简单。主要包括以下几个方面的内容:
•引导程序isolinux.bin
这个文件是ISOLINUX的引导文件。相当于Linux系统中的grub程序一样,在系统启动时,先加载isolinux.bin来启动系统,当isolinux.bin启动之后,会依照下边的配置文件isolinux.cfg来选择不同的启动选项来启动系统。
这个文件是一个二补码文件,在编译isolinux时可以得到,在这儿不做过多述说。
•配置引导项文件isolinux.cfg
这个文件是ISOLINUX启动的配置文件,有了这个文件,引导程序isolinux.bin在引导时就会按照该配置文件的配置内容的不同,而选择不同的引导项来启动系统。
isolinux.cfg中的配置项有好多,用户可以依照自己的需求来选择性的加入跟自己相关的配置项即可。并且下边的这种配置项是必需要有的:
defaultlinux指定label是linux的启动选项为缺省,其实也可以是别的。
labellinux
kernelvmlinuz
appendinitrd=initrd26.gzramdisk_size=1000000vga=791
这就是一个启动描述项,上面的label是指Linux系统启动时的引导选项。相当于grub中的title。kernel制订了启动时的内核。initrd=指定initrd的文件和ramdisk_size=指定initrd的规格上限。其余的内核参数还可能有好多。虽然Linux内核中启动的所有参数,在这儿都是可以加入的。
prompt=1这是说,向用户提示输入选择,直接回车就是缺省选项了。其实,假若使其等于0则,不向用户提示输入选择。
timeout=0没有时间限制,其实也可以指定一定时间过后手动步入缺省选项。这个时间是秒数的10倍。诸如,假如要等待30秒步入,则应当在这儿输入timeout=300。
这种是系统引导时的必有选项,其实,有些选项是可以没有的。下边的那些选项可以没有。
displayxxx.txt这指定了一个文件名,会在启动的时侯显示的内容,该文件甚至可以包含一个RLE编码的图形文件,也就是你们在安装光碟启动时见到的那种;不过这个数组不甚重要,我们就略过了。
gfxbootbootlogo这指定了启动时的图形界面。通常的Linux系统安装盘中还会加入此项,并且在一些特殊需求下,是不须要用图形界面的,而须要字符模式。具体怎么制画图形启动模式,怎么制做字符启动模式,须要依照选择的内核选项以及设置选项有关系。这将在下边进行详尽介绍。
include×××这是引入一个早已写好的配置选项文件到配置文件中。这在执行时,会将引入的文件中的全部内容给添加到此文件中,产生一个零时的配置文件来启动系统。
基本的配置项就如此多,其实还有好多的配置项,还是须要用户去参考相关的权威指南来一一了解。
•系统启动内核程序
ISOLINUX系统在使用isolinux.bin文件引导完成之后,才会调用一个启动内核来启动一个简单的Linux系统。实际上无论是安装,还是修复Linux系统都须要一个简单的Linux系统来调用相应的程序来完成。在启动盘中使用的Linux内核程序跟普通的Linux系统内核是完全一致的,这儿比较特殊的是其initrd镜像文件。该文件实际就是一个最小化的Linux系统。上面包含了shell,mount,fdisk之外,主要要包含Linux系统下各类常用的基本驱动。尤其是硬碟驱动,鼠标键盘驱动。若果没有这种驱动,这么系统将难以找到硬碟,造成系统未能正常启动。
initrd文件特殊,就特殊在该文件中除了要包含上述的那些文件,还须要包含一些跟该光碟功能相关的文件。诸如,假如要进行安装,这么简单的低格命令也必需要有的。不仅这种,为了让制做的iso文件被大部份PC所使用,所以必需要包含各类驱动在上面。
initrd文件挺好制做,可以将Linux系统启动时的initrd文件作为一个基本文件,在上面更改即可。假如有须要添加的内容,直接将linux系统中的相应文件拷贝进去就可以了。另外,initrd下边的启动脚本是init文件,建议按照自己的需求更改该文件,该文件是一个用shell写的脚本。在Linux系统启动时,加载完成内核之后,就开始调用该脚本了,所以有哪些须要启动的,都可以在该脚本中添加。甚至可以将该脚本作为一个自己安装,修补等的基本脚本来做。并且建议不要这么,由于这样做会不易调试。建议将系统启动相关的内容放置在这儿执行,而将自己的脚本放置在可执行目录下[bin/sbin等],在init脚本中调用该脚本再执行。
•举例说明
有了前面的这几步,基本上就对ISOLinux了解了。接出来的工作就是要靠自己的能耐和自己的需求来调整initrd,以及iso目录下的内容了。
我在这儿主要介绍一下,几种启动界面的制做:
1.字符模式启动界面
字符模式的启动界面,使用的是menu.c32内核做为启动内核。menu.c32文件由ISOLINUX包提供。可以直接从ISOLINUX包中编译形成。
有了该文件,我们只须要对isolinux.cfg文件进行更改一下即可。具体的更改可以参照下边的配置项
defaultmenu.c32
prompt0
menutitleMyDistroInstaller
timeout600
f1help.txt
f2version.txt
labelbls
menulabelNormalinstall
menudefault
kernelvmlinuz
appendinitrd=cpio.gzrdinit=/init
labelbad
menulabelBadhardwareinstall
kernelvmlinuz
appendinitrd=cpio2.gzbadhardwarerdinit=/init
可以看的下来,这儿的主要调整是光盘安装linux系统步骤,调整default选项,更改其为menu.c32文件。由于这么是指定,默认使用menu.c32引导。接出来就是几个menu选项的加入。这几个选项的主要目的是设置启动的选择项。在命名时建议才能设置成容易辨识的名称。
另外,注意menudefault选项是指定,默认从那项启动。
其实,使用menu时,还可以加入下边的一些参数来设置选项窗口的宽高比:
MENUWIDTH80/*设置长度*/
MENUMARGIN10
MENUROWS12/*设置行数*/
MENUTABMSGROW18
MENUCMDLINEROW12
MENUENDROW24
MENUTIMEOUTROW20
这几个选项可以添加,也可以不添加,可以均添加,也可以一个都不添加。设置很便捷。
此种启动,都是字符模式,并且是用ascii码勾画下来的。其优点是占用显存小,启动快。缺点是界面单调。
2.使用vesamenu制做启动界面
使用vesamenu启动的方式与使用menu的使用方式基本是一致的。所不同的是default的引导项不一样,此种模式下,default的启动项要设置成vesamenu。
另外,vesamenu的默认背景色是蓝色,假如想更换背景图片,可以加入MENUBACKGROUNDos102.png来更换背景图片。而且值得注意的是背景图片不能否制做的过分艳丽,由于该图片若果比较艳丽,则未能被正常加载。
这些方式的有点在于启动快,并且可以制做一个图形启动界面。缺点是难以制做一个比较艳丽的启动界面。
3.使用bootlogo文件制做启动界面
使用bootlogo制做启动界面的方式是,先制做一个比较艳丽的bootlogo文件。这个文件是一个加入图片的二补码文件,具体怎么制做,还须要大神才能帮忙赐教一下,鄙人还不是很清楚。另外,只须要在isolinux.cfg文件中加入gfxbootbootlogo选项即可。
•制做ISO镜像文件
配置文件写完了,如今步入实质阶段。
在打算制做ISO的目录里添加一个子目录,例如boot/isolinux/,之后倒入isolinux.cfg和一个对所有光碟都一样的isolinux提供的引导介质isolinux.bin,其实还要装入相应的kernel,initrd等我们须要在引导时调用到的文件光盘安装linux系统步骤,之后制做iso的时侯要使用-b参数,来指明要使用isolinux.bin文件启动:
mkisofs-ooutput.iso
-bboot/isolinux/isolinux.bin-cboot/isolinux/boot.cat
-no-emul-boot-boot-load-size4-boot-info-table
for-iso-dir/
最后的参数就是指定的光碟的目录了,-c参数的那种文件是手动生成的,不用太害怕,其余参数都是固定的。事实上,也经常有人用isolinux/而不是boot/isolinux/,这都是约定俗成的,你完全可以用自己的。这儿的路径都是相对于光碟的根的,而和制做光碟时的工作目录没有关系。
至此,整个系统的启动和制做过程就早已完成了。可以说有了这种知识,就可以设计一个简单的启动光碟,至于光碟的功能,须要用户按照自己的需求来更改和调整!