歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 制作自己的Linux系統與啟動光盤

制作自己的Linux系統與啟動光盤

日期:2017/2/28 15:44:10   编辑:Linux教程

在剛接觸Linux的時候,就想把自己編譯好的linux內核放在虛擬機中啟動,剛開始時一籌莫展,後來在IBM的linux文檔庫中發現了一種制作linux iso的方法(《BIOS和 EFI 介紹及其啟動光盤制作》),它主要是通過ISOLINUX制作BIOS 的啟動程序,詳情可以參考以下文章。

http://www.linuxidc.com/Linux/2012-07/66939.htm

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

言歸正傳,下面將介紹如何生成一個可被Legacy BIOS引導的Linux最小系統的iso鏡像文件。

一、Legacy BIOS boot 介紹

首先了解一下 Legacy BIOS 如何啟動或引導。當系統首次引導時,或系統被重置時,處理器會執行一個位於已知位置處的代碼。這個位置在基本輸入 / 輸出系統(BIOS) 中,它保存在主板上的閃存中。CPU 會調用這個重置向量來啟動一個位於閃存 /ROM 中的已知地址處的程序。通常,它執行一個啟動自測(POST)來檢查機器。最後,它從引導驅動器上的主引導記錄(MBR)加載第一個扇區。

這時第一階段的引導加載程序開始了。引導程序 boot loader 就位於 MBR 第一個扇區裡面。此時 boot loader 就被裝入 RAM 並執行。這個引導加載程序在大小上小於 512 字節(一個扇區),其作用是加載第二階段的引導加載程序。

當第二階段的引導加載程序被裝入 RAM 並執行時,通常會顯示一個動畫屏幕,並將 Linux 和一個可選的初始 RAM 磁盤(臨時根文件系統)加載到內存中。在加載映像時,第二階段的引導加載程序就會將控制權交給內核映像,然後內核就可以進行解壓和初始化了。在這個階段中,第二階段的引導加載程序會檢測系統硬件、枚舉系統鏈接的硬件設備、掛載根設備,然後加載必要的內核模塊。完成這些操作之後啟動第一個用戶空間程序(init),並執行高級系統初始化工作。

此處,簡單介紹用戶空間程序init,它位於/sbin下,是初始化的簡稱。init程序的工作是讀取/etc/inittab文件中描述的指令,對系統的各種軟硬件環境做最初化設定.最後運行mingetty等待用戶輸入用戶名登錄系統.所有的工作就這麼簡單,雖然linux啟動的時候有很多內容,看上去十分高深,但是都不過是對這個過程的擴充.明白了這個道理,你可以寫一些腳本程序讓他在系統啟動的特定時間運行完成任務.事實上系統內核並不關心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可執行程序他都可以執行.可以做以下實驗:

編寫一個非常簡單的C程序:

main()

{

printf(“hello,world!\n”);

}

保存後以init.c保存他,並用gcc編譯.

#gcc –-static -o init init.c

這裡的--static 參數告訴gcc把這個程序靜態聯接,這樣這個程序不倚賴任何庫就能運行.把編譯好的init程序拷貝到/sbin下,備份好原來的那個.重新啟動系統最後系統的輸出結果是: hello,world!

然後停在那裡。【Linux公社 http://www.linuxidc.com 】 做這個實驗以前先確定你知道如何把系統恢復到原來的狀態,有一個簡單的方法,在內核啟動前給他加上init=參數,比如你原先的init被你改成了init.bak 只要在啟動的時候給內核加上init=/sbin/init.bak就可以用原來的init程序啟動系統。

圖 1. 開機過程示意圖

Copyright © Linux教程網 All Rights Reserved