必威电竞|足球世界杯竞猜平台

isolinux
來(lái)源:互聯(lián)網(wǎng)

syslinux或ISOLINUX制作啟動(dòng)U盤或光盤 SYSLINUX/ISOLINUX 是專門用來(lái)引導(dǎo)可移動(dòng)介質(zhì)的輕量級(jí)引導(dǎo)程序,因?yàn)檫@樣的介質(zhì)通常不會(huì)固定只針對(duì)一種硬件。我們主要介紹以下ISOLINUX 引導(dǎo)安裝程序。ISOLINUX其實(shí)是一個(gè)簡(jiǎn)單的Linux

關(guān)于isolinux

以前我們很多啟動(dòng)盤采用的是loadlin引導(dǎo)linux內(nèi)核的模式進(jìn)行的(比如早期的slackware)。也就是采用Windows 98的dos啟動(dòng),然后通過(guò)loadlin工具引導(dǎo)我們的自己的linux內(nèi)核,解開(kāi)我們的安裝文件系統(tǒng)。

但是,隨著我們接觸的硬件機(jī)型多樣化,目前部分新設(shè)備不能采用dos(或win98)引導(dǎo)。

這個(gè)時(shí)候很多人會(huì)采用syslinux來(lái)制作啟動(dòng)盤,但是syslinux一般都需要能夠?qū)?nèi)核和文件系統(tǒng)放到一張軟盤上的,如果我們的文件系統(tǒng)很大,又不能裁減,那可就慘了。或者說(shuō)想在光盤啟動(dòng)的時(shí)候選擇多個(gè)內(nèi)核/文件系統(tǒng),syslinux就比較麻煩了。

引導(dǎo)程序

概述

任何一個(gè)操作系統(tǒng)在任何一個(gè)硬件平臺(tái)上的運(yùn)行都需要一個(gè)引導(dǎo)的過(guò)程,即,初始化軟件環(huán)境、把內(nèi)核從存儲(chǔ)介質(zhì)放到內(nèi)存當(dāng)中去,并開(kāi)始運(yùn)行。當(dāng)然對(duì)于某些簡(jiǎn)單軟硬件系統(tǒng),這個(gè)過(guò)程可能及其簡(jiǎn)單,而對(duì)于 PC 就要略微復(fù)雜一些了。

PC 的引導(dǎo)程序上承 BIOS,下接內(nèi)核的初始化代碼,雖然開(kāi)一次機(jī)只運(yùn)行一次后就不留痕跡了,不過(guò)還是相當(dāng)重要的。所有的引導(dǎo)程序都在做類似的事情:

駐留在存貯介質(zhì)的特殊位置可以被 BIOS 啟動(dòng),或是自己是某一系統(tǒng)的可執(zhí)行文件,可以被用戶顯式或隱式在該系統(tǒng)(宿主系統(tǒng))內(nèi)啟動(dòng);

了解要被啟動(dòng)的必要啟動(dòng)文件的位置,包括系統(tǒng)內(nèi)核、ramdisk 等,并把它們讀取出來(lái)、裝載到內(nèi)存之中;

構(gòu)造環(huán)境、運(yùn)行操作系統(tǒng)的內(nèi)核,自己則就此退出歷史舞臺(tái)。

歷史上,用于 Linux 的最著名的引導(dǎo)程序莫過(guò)于 LILOGRUB2 了,作為通用的引導(dǎo)程序,二者用途廣泛,但對(duì)于一些特殊的場(chǎng)合,譬如引導(dǎo)程序可利用的空間比較有限的可移動(dòng)存儲(chǔ)介質(zhì) (通俗地說(shuō),包括光盤、軟盤、u 盤等),它們有些過(guò)于厚重了,這就引出了我們今天的主角 --- SYSLINUX/ISOLINUX,現(xiàn)在,你只要知道他們是引導(dǎo)程序就足夠了,接下來(lái),我們還要插入一些廢話。

initrd

initrd = init ramdisk, 顧名思義,就是在啟動(dòng)時(shí)使用的一個(gè)內(nèi)存虛擬磁盤,它是系統(tǒng)廣泛的硬件支持性的必需品。

我們知道,Linux 的驅(qū)動(dòng)程序是內(nèi)核的一部分,它們提供了硬件向上層的抽象接口,Linux 內(nèi)核的核心子系統(tǒng) --- 虛擬文件系統(tǒng)部分的工作強(qiáng)烈依賴于底層硬件驅(qū)動(dòng)程序的支持,在啟動(dòng)過(guò)程當(dāng)中,當(dāng)某些必備的驅(qū)動(dòng)程序無(wú)法使用的時(shí)候,比如 EXT2 文件系統(tǒng)、IDE 硬盤適配器等無(wú)法工作的時(shí)候,系統(tǒng)啟動(dòng)將就此中止,發(fā)生所謂的``Kernel Panic'',這也是初學(xué)者編譯內(nèi)核最常遇到的困難。

然而,我們當(dāng)然不能將所有的驅(qū)動(dòng)都編譯到內(nèi)核當(dāng)中去,因?yàn)槲覀儾荒軣o(wú)限制地加大內(nèi)核的尺寸,這對(duì)于系統(tǒng)資源,尤其是引導(dǎo)過(guò)程中非常有限的可用存儲(chǔ)資源是難以承受的 .

具體設(shè)置

我們可以把很多驅(qū)動(dòng)程序編譯成模塊,隨用隨加載 極少數(shù)情況,某些模塊是相互沖突的,比如 2.4 內(nèi)核的某些版本之中,reiserfs 和 ext3 兩種驅(qū)動(dòng)不能同時(shí)被編譯到內(nèi)核當(dāng)中。所以,我們只能在內(nèi)核中放入必要的驅(qū)動(dòng)程序,其余的不那么需要的部分編譯成模塊放到 /lib/modules/`uname -r`/ 之中,在需要的時(shí)候會(huì)被加載。

但是,對(duì)于具有通用性的內(nèi)核,是很難論斷出哪幾種驅(qū)動(dòng)程序才是真正必須的,究竟是 英特爾 的 IDE 磁盤控制器還是 AMD/英偉達(dá) 的,抑或是 VIA 的,乃至光纖通道SCSI 磁盤……是阿,這真是個(gè)很困擾人的問(wèn)題,沒(méi)有一個(gè)驅(qū)動(dòng)可以在占用絕對(duì)少的空間的前提下應(yīng)付所有的設(shè)備,于是,我們退而求其次,尋求一個(gè)中間介質(zhì) --- ramdisk

在內(nèi)核啟動(dòng)前,引導(dǎo)程序首先在內(nèi)存之中構(gòu)建一個(gè) ramdisk,成為一個(gè)基本文件系統(tǒng),然后 Linux 內(nèi)核以此為自己的根文件系統(tǒng)啟動(dòng),這樣的好處是可以不必理會(huì)磁盤驅(qū)動(dòng)的問(wèn)題,只要能驅(qū)動(dòng) ramdisk 就可以了。

用 ramdisk 啟動(dòng)之后,在 ramdisk 的啟動(dòng)腳本 (一般叫 /linuxrc) 之中,針對(duì)硬件嘗試 ramdisk 里面的 /lib/modules/`uname -r`/,加載恰當(dāng)?shù)尿?qū)動(dòng),這時(shí)系統(tǒng)已經(jīng)具備了切換到硬盤或其他介質(zhì)上的文件系統(tǒng)的條件了。

機(jī)不可失,這時(shí),我們首先加載硬盤或光盤、u 盤等啟動(dòng)介質(zhì),然后設(shè)該介質(zhì)為根分區(qū),并運(yùn)行其 init 進(jìn)程為 1 進(jìn)程,之后,在 init 腳本中,釋放掉 initrd 的空間,這就是借助 initrd 的引導(dǎo)過(guò)程。在這個(gè)過(guò)程之中 引導(dǎo)程序幫我們多做了一件事 --- 構(gòu)建 ramdisk, 把 initrd 放入內(nèi)存。

用 SYSLINUX/ISOLINUX 引導(dǎo)軟盤和光盤

上文已經(jīng)說(shuō)過(guò)了,SYSLINUX/ISOLINUX 是專門用來(lái)引導(dǎo)可移動(dòng)介質(zhì)的輕量級(jí)引導(dǎo)程序,因?yàn)檫@樣的介質(zhì)通常不會(huì)固定只針對(duì)一種硬件,initrd 當(dāng)然是 SYSLINUX/ISOLINUX 必須支持的功能了。這兩種引導(dǎo)程序其實(shí)是一樣的,沒(méi)有多大區(qū)別,只是放在不同的設(shè)備的引導(dǎo)區(qū)罷了。

3.1 配置 SYSLINUX/ISOLINUX

對(duì)于這兩種引導(dǎo)程序,都會(huì)有一段引導(dǎo)代碼,寫入引導(dǎo)代碼的時(shí)候,還同時(shí)需要一個(gè)配置文件: syslinux.cfg/isolinux.cfg,同樣,這兩個(gè)文件也是一樣的,唯一的區(qū)別在于文件名,其各個(gè)字段的寫法如下:

DISPLAY xxx.txt

這指定了一個(gè)文件名,會(huì)在啟動(dòng)的時(shí)候顯示的內(nèi)容,該文件甚至可以包含一個(gè) RLE 編碼的圖形文件,也就是大家在安裝光盤啟動(dòng)時(shí)看到的那個(gè);不過(guò)這個(gè)字段不甚重要,我們就略過(guò)了。

DEFAULT linux

指定 label 是 Linux 的啟動(dòng)選項(xiàng)為缺省,當(dāng)然也可以是別的。

LABEL linux

kernel vmlinuz

append initrd=initrd26.gz ramdisk_size=1000000 vga=791

這就是一個(gè)啟動(dòng)描述,前面的 label 大家都認(rèn)識(shí)了,之后分別是指定 kernel 和內(nèi)核參數(shù),其中重要的參數(shù)就是 initrd= 指定 initrd 的文件和 ramdisk_size= 指定 initrd 的尺寸上限。其余的內(nèi)核參數(shù)還可能有很多,不過(guò)這里的參數(shù)我們一般都可以抄過(guò)來(lái)。這樣的啟動(dòng)選項(xiàng)描述是可以有若干個(gè)的。

PROMPT=1

這是說(shuō),向用戶提示輸入選擇,直接回車就是缺省選項(xiàng)了

TIMEOUT=0

沒(méi)有時(shí)間限制,當(dāng)然也可以指定一定時(shí)間之后自動(dòng)進(jìn)入缺省選項(xiàng)。

好了,就這么多,如果你會(huì)用 LILO 的話,用這個(gè)一定得心應(yīng)手,說(shuō)實(shí)話 GRUB2 也差不了太多。

3.2 安裝 syslinux/ISOLINUX

配置文件寫完了,現(xiàn)在進(jìn)入實(shí)質(zhì)階段,這里,兩種引導(dǎo)程序還是略有差別的,首先介紹SYSLINUX:

首先格式化引導(dǎo)介質(zhì)為 FAT16 格式 (軟盤似乎應(yīng)該是 FAT12),我們的例子里面是 U 盤,

mkdosfs -F16 -I /dev/sdX #原百科命令最后面的sda,你不怕硬盤沒(méi)法啟動(dòng)就用sda!

我們是操作整個(gè) U 盤,而不是里面的唯一分區(qū),這種情況不是很多見(jiàn),只是手上的 U 盤比較特殊,大部分情況下,我們也可以

mkdosfs -F16 /dev/sdX1

然后掛在該 U 盤,放入我們的 syslinux.cfg 以及 kernel 和 initrd.gz,還有其他啟動(dòng)所需要的東東,之后 umount 該 U 盤。

* 執(zhí)行下面操作之前,必須 umount U 盤!*

然后寫引導(dǎo)區(qū):

syslinux /dev/sdX (或 syslinux /dev/sdX1,如果是格式化的 /dev/sdX1 的話)

至此就完成了。

對(duì)于光盤,同樣不復(fù)雜,我們用 ISOLINUX:

在準(zhǔn)備制作 ISO 的目錄里添加一個(gè)子目錄,比如 boot/isolinux/ ,然后放入 isolinux.cfg 和一個(gè)對(duì)所有光盤都一樣的 isolinux 提供的引導(dǎo)介質(zhì) isolinux.bin,當(dāng)然還要放入相應(yīng)的 kernel, initrd 等等,然后,制作 iso 的時(shí)候要使用 -b 參數(shù):

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/

最后的參數(shù)就是指定的光盤的目錄了,-c 參數(shù)的那個(gè)文件是自動(dòng)生成的,不用太擔(dān)心,其余參數(shù)都是固定的。事實(shí)上,也常常有人用 isolinux/ 而不是 boot/isolinux/ ,這都是約定俗成的,你完全可以用自己的。這里的路徑都是相對(duì)于光盤的根的,而和制作光盤時(shí)的工作目錄沒(méi)有關(guān)系。

至此,你也會(huì)用 syslinux/ISOLINUX 了。 :)

實(shí)戰(zhàn)

-四、實(shí)戰(zhàn) -- damn small linux + debian installer, 2 in 1 usb disk

1 下載 di 的 hd-image 里的 kernel image 和 initrd,放入 U 盤,同時(shí)把 businesscard iso 也放進(jìn)去,從 iso 里找到 isolinux.cfg,記下里面的啟設(shè)置

2 下載 dsl,把 KNOPPIX 目錄搬到我們的 U 盤里,把 boot/isolinux/ 里面的 kernel image 和 initrd 也放入 U 盤的根目錄,這時(shí),U 盤根目錄里同時(shí)有二者的啟動(dòng)文件了,也記住 dsl 里面的 isolinux.cfg 的啟動(dòng)選項(xiàng)。

3 以其中一個(gè)的 isolinux.cfg 為基礎(chǔ),加入另一個(gè)的啟動(dòng)參數(shù),注意 label 命名不要沖突了就可以了。

4 umount U盤,然后對(duì) U 盤運(yùn)行 syslinux,寫引導(dǎo)區(qū),大功告成。

如前面帖子說(shuō)過(guò),dsl 的 initrd 之中,只搜索 /dev/sda[1-9] 而不搜索

/dev/sda,所以,如果如果像我們一樣被迫用 /dev/sda 的話,就不得不修改一下 dsl 的 initrd 里面的 linuxrc 了,除此之外,沒(méi)有什么其它值得大書特書的了。

Enjoy it!

參考資料 >

生活家百科家居網(wǎng)