任何乙個作業系統在任何乙個硬體平台上的執行都需要乙個引導的過程,即,初始化軟體環境、把核心從儲存介質放到記憶體當中去,並開始執行。當然對於某些簡單軟硬體系統,這個過程可能及其簡單,而對於 pc 就要略微複雜一些了。
pc 的引導程式上承 bios,下接核心的初始化**,雖然開一次機只執行一次後就不留痕跡了,不過還是相當重要的。所有的引導程式都在做類似的事情:
駐留在存貯介質的特殊位置可以被 bios 啟動,或是自己是某一系統的可執行檔案,可以被使用者顯式或隱式在該系統(宿主系統)內啟動;
了解要被啟動的必要啟動檔案的位置,包括系統核心、ramdisk 等,並把它們讀取出來、裝載到記憶體之中;
構造環境、執行作業系統的核心,自己則就此退出歷史舞台。
歷史上,用於 linux 的最著名的引導程式莫過於 lilo 和 grub 了,作為通用的引導程式,二者用途廣泛,但對於一些特殊的場合,譬如引導程式可利用的空間比較有限的可移動儲存介質 (通俗地說,包括光碟、軟盤、u 盤等),它們有些過於厚重了,這就引出了我們今天的主角syslinux/isolinux。
syslinux/isolinux 是專門用來引導可移動介質的輕量級引導程式,因為這樣的介質通常不會固定只針對一種硬體。我們主要介紹以下isolinux 引導安裝程式。isolinux其實是乙個簡單的linux系統。其構造很簡單。主要包括以下幾個方面的內容:
這個檔案是isolinux的引導檔案。相當於linux系統中的grub程式一樣,在系統啟動時,先載入isolinux.bin來啟動系統,當isolinux.bin啟動以後,會根據下面的配置檔案isolinux.cfg來選擇不同的啟動選項來啟動系統。
這個檔案是乙個二進位制檔案,在編譯isolinux時可以得到,在這裡不做過多講述。
這個檔案是isolinux啟動的配置檔案,有了這個檔案,引導程式isolinux.bin在引導時才會根據該配置檔案的配置內容的不同,而選擇不同的引導項來啟動系統。
isolinux.cfg中的配置項有很多,使用者可以根據自己的需求來選擇性的加入跟自己相關的配置項即可。但是下面的這些配置項是必須要有的:
default linux指定 label 是 linux 的啟動選項為預設,當然也可以是別的。
label linux
kernel vmlinuz
這就是乙個啟動描述項,前面的 label 是指linux系統啟動時的引導選項。相當於grub中的title。kernel制定了啟動時的核心。initrd= 指定 initrd 的檔案和 ramdisk_size= 指定 initrd 的尺寸上限。其餘的核心引數還可能有很多。其實linux核心中啟動的所有引數,在這裡都是可以加入的。
prompt=1這是說,向使用者提示輸入選擇,直接回車就是預設選項了。當然,如果使其等於0則,不向使用者提示輸入選擇。
timeout=0沒有時間限制,當然也可以指定一定時間之後自動進入預設選項。這個時間是秒數的10倍。例如,如果要等待30秒進入,則應該在這裡輸入timeout=300。
這些是系統引導時的必有選項,當然,有些選項是可以沒有的。下面的這些選項可以沒有。
display ***.txt這指定了乙個檔名,會在啟動的時候顯示的內容,該檔案甚至可以包含乙個 rle 編碼的圖形檔案,也就是大家在安裝光碟啟動時看到的那個;不過這個欄位不甚重要,我們就略過了。
gfxboot bootlogo 這指定了啟動時的圖形介面。一般的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目錄下的內容了。
我在這裡主要介紹一下,幾種啟動介面的製作:
字元模式啟動介面
字元模式的啟動介面,使用的是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
label bad
menu label bad hardware install
kernel vmlinuz
可以看的出來,這裡的主要調整是,調整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碼繪製出來的。其優點是占用記憶體小,啟動快。缺點是介面單調。
2. 使用vesamenu製作啟動介面
使用vesamenu啟動的方法與使用menu的使用方法基本是一致的。所不同的是default的引導項不一樣,此種模式下,default的啟動項要設定成vesamenu。
另外,vesamenu的預設背景色是灰色,如果想更換背景,可以加入menu background os102.png來更換背景。但是值得注意的是背景不能夠製作的過於絢麗,因為該如果比較絢麗,則無法被正常載入。
這種方法的有點在於啟動快,而且可以製作乙個圖形啟動介面。缺點是無法製作乙個比較絢麗的啟動介面。
3. 使用bootlogo檔案製作啟動介面
使用bootlogo製作啟動介面的方法是,先製作乙個比較絢麗的bootlogo檔案。這個檔案是乙個加入的二進位制檔案,具體如何製作,還需要高手能夠幫忙指點一下,小弟還不是很清楚。另外,只需要在isolinux.cfg檔案中加入gfxboot bootlogo選項即可。
配置檔案寫完了,現在進入實質階段。
在準備製作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/,這都是約定俗成的,你完全可以用自己的。這裡的路徑都是相對於光碟的根的,而和製作光碟時的工作目錄沒有關係。
至此,整個系統的啟動和製作過程就已經完成了。可以說有了這些知識,就可以設計乙個簡單的啟動光碟,至於光碟的功能,需要使用者根據自己的需求來修改和調整!
使用isolinux製作liveUSB
在作業系統啟動之前,需要由引導程式將作業系統載入到記憶體,isolinux就是引導程式的一種,和他有相同作用的是lilo和grub。整個系統的載入和初始化過程,大致如下圖 syslinux isolinux 是專門用來引導可移動介質的輕量級引導程式,因為這樣的介質通常不會固定只針對一種硬體。我們主要...
使用ISOLinux製作Linux系統安裝盤
任何乙個作業系統在任何乙個硬體平台上的執行都需要乙個引導的過程,即,初始化軟體環境 把核心從儲存介質放到記憶體當中去,並開始執行。當然對於某些簡單軟硬體系統,這個過程可能及其簡單,而對於 pc 就要略微複雜一些了。pc 的引導程式上承 bios,下接核心的初始化 雖然開一次機只執行一次後就不留痕跡了...
使用isolinux製作Linux啟動光碟
以前我們很多啟動盤採用的是loadlin引導linux核心的模式進行的 比如早期的slackware 也就是採用win98的dos啟動,然後通過loadlin工具引導我們的自己的linux核心,解開我們的安裝檔案系統。但是,隨著我們接觸的硬體機型多樣化,目前部分新裝置不能採用dos 或win98 引...