摘要:在linux的啟動過程中,控制權需要從biso轉移到引導程序再轉移到系統內核。其中,引導程序有很多種,包括lilo,grub等,本文我們講解的是isolinux。通過學習isolinux的引導方式,我們將能學習到如何制作“從USB啟動的系統”。同時,如果你想定做自己的linux發行版,你應該如何做?這些,我們都能在學習isolinux的時候找到答案。最後,本文其他系列的文章還將教你如何定制自己的系統。
在操作系統啟動之前,需要由引導程序將操作系統加載到內存,isolinux就是引導程序的一種,和他有相同作用的是lilo和grub。整個系統的加載和初始化過程,大致如下圖:
SYSLINUX/ISOLINUX 是專門用來引導可移動介質的輕量級引導程序,因為這樣的介質通常不會固定只針對一種硬件。我們主要介紹以下ISOLINUX 引導安裝程序。ISOLINUX其實是一個簡單的Linux系統。
引導程序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系統啟動時,加載完成內核以後,就開始調用該腳本了,所以有什麼需要啟動的,都可以在該腳本中添加。甚至可以將該腳本作為一個自己安裝,修復等的基本腳本來做。
我們的目標是利用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
另外,注意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/
定制自己的發行版或者liveUSB,往往需要改動initrd,改動的方法如下:
在2.6以後的內核中,initrd的格式是gzip,此時,需要將它解壓縮為普通的文件系統鏡像。
gzip -d initrd.img.gz注意:gzip解壓縮需要識別文件後綴名為gz,所以我們先要給文件添加後綴名。
解壓縮以後,我們用file命令查看,可以發現initrd.img的文件格式發生了變化。
解壓縮以後,這是一個cpio格式的文件,需要將歸檔文件打開:
cpio -idv initrd.img < initrd.img啟動以後,執行init腳本,實際上,如果我們想定制自己的發行辦,只是需要制作這個initrd和相關的iso文件即可。制作過程和上述過程相反。