製作自己的Linux系統與啓動光盤

1、step1 準備 isolinux.bin 和工作目錄

在準備製作 ISO 的目錄裏添加一個子目錄,比如 isolinux/ ,然後放入 isolinux.cfg 和一個對所有光盤都一樣的 isolinux 提供的引導介質 isolinux.bin。isolinux.bin 可以這樣得到,訪問syslinux 的官方網站(如下),下載它所提供的syslinux-4.04.tar.bz2 文件,目前最新版爲4.04。

http://www.syslinux.org/wiki/index.php/ISOLINUX#What_is_ISOLINUX.3F

當然還要放入相應的 kernel, initrd 等等,目錄結構如下:

清單 1. CD_root 目錄結構


|---isolinux

 | |---isolinux.bin

 | |---isolinux.cfg

 |---kernel (OS 內核)

 |---initrd (文件系統)

     |---readme


Kernel爲需要引導的操作系統內核,此處選擇Linux內核,內核的獲取可以通過編譯適當的Linux內核版本得到,本文采用的是3.10.61版。內核可以根據自己的需要進行適當的裁剪,在此不累述。記住,在編譯的時候一定要選擇x86_64的體系結構,因爲本文是基於x86_64體系結構鏡像講解的,如果您不知道怎麼選擇CPU體系結構,可以參考下面的寫法:

# make ARCH=x86_64 menuconfig  //啓動menuconfig配置菜單時,需提前安裝ncurses

# make

 編譯完成後在arch/x86/boot中會生成內核鏡像bzImage。將其拷貝到CD_root(製作iso的根目錄)中,當然您也可以專門建立相關的文件夾來存放內核和文件系統,區別只是在配置isolinux.cfg時的路徑問題(可參考下一小節)。

除了內核鏡像外,還需要文件系統。本節採用busybox製作文件系統,並生成ramdisk鏡像文件ramdisk.img。關於ramdisk文件的製作方法見章節:文件系統,其中有一小節專門講解了如何製作根文件系統。

 

2.2 step2 配置 isolinux.cfg


prompt 1

 timeout 100

 default myBIOSiso

 label myBIOSiso

 kernel /bzImage

      append initrd=/ramdisk.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=60000 rw root=/dev/ram  

   【 別外  append initrd=/ramdisk.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64       ###(CentOS\x207\x20x86_64爲鏡像的id,其中\x20代表空格。其定義在mkisofs命令加上-V “CentOS 7 x86_64”)】

配置 isolinux.cfg

這裏只做了簡單的配置。注意,這裏的文件系統是ramdisk.img,經過筆者試驗,發現使用壓縮鏡像ramdisk.img.gz時,會出現找不到該文件的錯誤,當筆者將壓縮文件重命名爲ramdisk.gz後,問題得以解決。所以,此處筆者推薦使用append initrd=/ramdisk.gz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=60000 rw root=/dev/ram。這樣做出來的引導盤會很小。筆者本次製作出來的iso鏡像大小爲5M,當然,如果需要,您還可以做得更小。

除此之外,利用isolinux還可以添加諸如菜單等內容。更多使用方法可以參考syslinux中的說明文檔,同時筆者將在下一小節泛講菜單的相關內容。

2.3 step3 製作 BIOS 平臺可啓動光盤

 

#mkisofs -o output.iso -b isolinux/isolinux.bin -c \

 isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-tableCD_root  


製作 BIOS 平臺可啓動光盤的命令

製作 iso 的時候要使用 -b 參數,用來指定 isolinux.bin 所在的路徑,-c 參數的那個文件(boot.cat)是自動生成的,不用關心,其餘參數都是固定的。這裏的路徑都是相對於光盤的根目錄而言,和製作光盤時的工作目錄沒有關係。

完成後,會在當前目錄(也可以指定)生成iso鏡像光盤文件,文件名爲output.iso。

接下來可以在虛擬機中驗證生成的iso文件是否可以啓動linux。首先安裝VMware6.0,然後新建一個虛擬機,內存和硬盤都不必選得很大,要知道我們的內核是非常小的,選擇256M的內存,硬盤1G(可以更小,因爲這樣的操作不需要硬盤,只要內存足夠就可以了),完成後,將生成的iso加載到虛擬機的光驅中,啓動虛擬機,成功會出現如下圖的相似信息。


 

值得注意的是,我們的根文件系統存在於內存之中,所以您會看到在加載ramdisk1.img時需要一定的時間。在此,簡單梳理一下整個啓動過程。首先,BIOS完成第一階段的引導,虛擬機從光驅啓動,isolinux會加載內核鏡像到虛擬機內存中,然後加載文件系統(ramdisk)到內存中,將執行權限交給Linux內核,內核啓動然後加載文件系統。

至此,就可以利用虛擬機驗證自己修改的內核和根文件了。當然,這只是一個極爲簡略和粗糙的啓動光盤,用於學習Linux內核和文件系統是相當有益的,你不用擔心這會損害您的電腦的目前的狀態,因爲所有的東西都在內存之中。

在後面的章節中,筆者會介紹更加豐富的啓動功能,以及如何從硬盤啓動我們製作的Linux系統。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章