自制裝機啓動盤boot.iso

轉自http://blog.csdn.net/liujixin8/article/details/4029887

任何一個操作系統在任何一個硬件平臺上的運行都需要一個引導的過程,即,初始化軟件環境、把內核從存儲介質放到內存當中去,並開始運行。當然對於某些簡單軟硬件系統,這個過程可能及其簡單,而對於 PC 就要略微複雜一些了。

      PC 的引導程序上承 BIOS,下接內核的初始化代碼,雖然開一次機只運行一次後就不留痕跡了,不過還是相當重要的。所有的引導程序都在做類似的事情:

駐留在存貯介質的特殊位置可以被 BIOS 啓動,或是自己是某一系統的可執行文件,可以被用戶顯式或隱式在該系統(宿主系統)內啓動;

瞭解要被啓動的必要啓動文件的位置,包括系統內核、ramdisk 等,並把它們讀取出來、裝載到內存之中;

構造環境、運行操作系統的內核,自己則就此退出歷史舞臺。

歷史上,用於 Linux 的最著名的引導程序莫過於 LILO 和 Grub 了,作爲通用的引導程序,二者用途廣泛,但對於一些特殊的場合,譬如引導程序可利用的空間比較有限的可移動存儲介質 (通俗地說,包括光盤、軟盤、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中的配置項有很多,用戶可以根據自己的需求來選擇性的加入跟自己相關的配置項即可。但是下面的這些配置項是必須要有的:

        default linux指定 label 是 linux 的啓動選項爲缺省,當然也可以是別的。

label linux

  kernel vmlinuz

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

        這就是一個啓動描述項,前面的 label 是指Linux系統啓動時的引導選項。相當於grub中的title。kernel制定了啓動時的內核。initrd= 指定 initrd 的文件和 ramdisk_size= 指定 initrd 的尺寸上限。其餘的內核參數還可能有很多。其實Linux內核中啓動的所有參數,在這裏都是可以加入的。

        prompt=1這是說,向用戶提示輸入選擇,直接回車就是缺省選項了。當然,如果使其等於0則,不向用戶提示輸入選擇。

timeout=0沒有時間限制,當然也可以指定一定時間之後自動進入缺省選項。這個時間是秒數的10倍。例如,如果要等待30秒進入,則應該在這裏輸入timeout=300。

         這些是系統引導時的必有選項,當然,有些選項是可以沒有的。下面的這些選項可以沒有。

display xxx.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目錄下的內容了。

        我在這裏主要介紹一下,幾種啓動界面的製作:

  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碼繪製出來的。其優點是佔用內存小,啓動快。缺點是界面單調。


       2. 使用vesamenu製作啓動界面


      使用vesamenu啓動的方法與使用menu的使用方法基本是一致的。所不同的是default的引導項不一樣,此種模式下,default的啓動項要設置成vesamenu。

       另外,vesamenu的默認背景色是灰色,如果想更換背景圖片,可以加入MENU BACKGROUND os102.png來更換背景圖片。但是值得注意的是背景圖片不能夠製作的過於絢麗,因爲該圖片如果比較絢麗,則無法被正常加載。

        這種方法的有點在於啓動快,而且可以製作一個圖形啓動界面。缺點是無法制作一個比較絢麗的啓動界面。


       3. 使用bootlogo文件製作啓動界面

       使用bootlogo製作啓動界面的方法是,先製作一個比較絢麗的bootlogo文件。這個文件是一個加入圖片的二進制文件,具體如何製作,還需要高手能夠幫忙指點一下,小弟還不是很清楚。另外,只需要在isolinux.cfg文件中加入gfxboot bootlogo選項即可。

  • 製作ISO鏡像文件

        配置文件寫完了,現在進入實質階段。

        在準備製作ISO的目錄裏添加一個子目錄,比如boot/isolinux/,然後放入 isolinux.cfg和一個對所有光盤都一樣的isolinux提供的引導介質 isolinux.bin,當然還要放入相應的kernel,initrd等我們需要在引導時調用到的文件,然後製作iso的時候要使用-b參數,來指明要使用isolinux.bin文件啓動:

mkisofs -r -J -T -V boot/ -o output.iso -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .

      最後的參數就是指定的光盤的目錄了,-c參數的那個文件是自動生成的,不用太擔心,其餘參數都是固定的。事實上,也常常有人用isolinux/而不是 boot/isolinux/,這都是約定俗成的,你完全可以用自己的。這裏的路徑都是相對於光盤的根的,而和製作光盤時的工作目錄沒有關係。

        至此,整個系統的啓動和製作過程就已經完成了。可以說有了這些知識,就可以設計一個簡單的啓動光盤,至於光盤的功能,需要用戶根據自己的需求來修改和調整!

發佈了18 篇原創文章 · 獲贊 22 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章