如何製作簡易Floppy Liunx 簡介 這篇文章的內容:要使讀者了解 Linux 開機的過程及如何製作簡易的 Floppy Linux 。對想要從事 embedded Linux 的人多多少少有點幫助。在還沒有談論如可製作簡易 Floppy Linux 之前,首先要瞭解整個開機的過程。當一部電腦一打開電源時 ... 開機過程簡述
在還沒有談論如可製作簡易 Floppy Linux
之前,首先要瞭解整個開機的過程。當一部電腦一打開電源時,電腦裡的
BIOS
就會找尋有無系統開機磁片,此時會有兩種狀況產生:第一種狀況就是找到系統開機磁片,此時就會從系統開機磁片中的第
0 磁區、第 0
磁柱載入可開機磁區;另一種狀況就是找不到系統開機磁片的話,
BIOS 就會找尋硬碟的 MBR ( Master Boot Record
),並且執行記錄在 MBR 上的開機載入程式( Boot Loader
)進行開機。 不管是從軟碟開機也好,還是從硬碟開機也罷,首先整個作業系統的
loader (就 Linux 來講就是 LILO 『 LInux LOader 』)會載入
Linux Kernel ,而 Kernel
一起動的第一件事就是進入保護模式( protected mode
),所有的硬體交由 Kernel 來控制,擺 脫 BIOS 的牽絆。
一旦 Kernel
載入完畢之後,開始初始化系統所有硬體設備。當所有的硬體初始化完成之後,接著系統將嘗試掛載(
mount ) root filesystem 。Root filesystem 就是被掛上當作” /
”目錄的 filesystem 。Kernel 必須知道從哪裡可以找到 root
filesystem ( PS :一般系統磁碟片的 root filesystem
會被製作成以 ramdisk 執行方式的影像檔【 image
】),否則系統就會停止運作( halt )。
當 root filesystem 成功 的載之後,就會去執行 init
這個程式,init 就會開始檢查 /etc/inittab
,找出該檔中標明 sysinit 這一行,並執行該行的 script
,在 redhat 上為 rc.sysinit ,而 rc.sysinit
會進行系統的初始化動作,在這裡我打算不介紹這支
script 有興趣可以參考 redhat 上的 rc.sysinit 。
當 rc.sysinit 執行完畢之後,控制權立即轉回到 init
的手中,接下來馬上進入預設 runlevel 。若內定的 runlevel
為 3 的話, init 就執行 /sbin/mingetty 啟動 virtual console
並且以 : ” login :”提示讓使用者登入,完成開機。登入後系統會提供一個
shell 給使用者,就可以使用 Linux 。若 runlevel 為 5
的話,則在開啟 virtual console 之後,init 會再執行 xdm
啟動 X window system ,讓使用者以 xdm 界面登入。
以上就是 Linux 開機的過程。
製作簡易 Floppy Linux
在這裡必須說明一下,所製作的簡易 Floppy Linux 是一個功
能非常精簡的 Linux ,其功
能簡述為:只支援軟碟、並不支援硬碟及光碟, 没
有網路功 能,可以執行簡單的 shell
程式及一些常用的工具程式。接下來,你應該準備一些發展
Floopy Linux 的 source package 及工具程式: kernel source 、
syslinux 、 BusyBox 。首先,你可以觀察出這個 Floppy Linux
的開機過程與上述開機過程稍有不同:將 LILO 更換成
syslinux ,開機完之後直接提供一個 shell 給使用者用。
Floppy Linux 完整開機如圖所示。 首先針對我們的 Floppy Linux 來量身製作它所屬 kernel (
PS :請把所需的 driver make
進核心中),聰明的你應該很快設定好簡易 kernel
所需的選項並 make 出 kernel 來。在這裡並不論討如何 make
kernel ,假如你對如何 make kernel
不懂的話,你應該多下一點功 夫在這上面或參考 HowTo
。以下為 make kernel 命令。
接下來,我們需要一些常用的工具程式, BusyBox
是一個蠻不錯的選擇。在這裡先對這個大名鼎鼎 BusyBox
簡單的介紹一下: BusyBox 它包含了七十多種 Linux
上標準的工具程式,它只需要的磁碟空間僅僅幾百 k
(視所選擇工具程式的數目來決定大小),在嵌入式系統上常用到它(例如
Linux Router Project 和 Debian boot floppies
就使用到它)。你可以在網址 http://busybox.lineo.com
找到一些參考資料及下載它,它是 Open Source tool 由
lineo,Inc
這家嵌入廠商所贊助。好了趕緊建立出一個靜態連結的
BusyBox ( Floppy Linux 這一個例子用到了 init 、 ls 、 cp 、
cat 、 mount 、 umount 、 more 、 ps 、 sh ),將 BusyBox
編譯成靜態連結的原因就是不希望 Floppy Linux 使用到 glibc
而增加磁碟的使用空間。以下為建立 BusyBox 的步驟:
接下來的步驟就是為 root filesystem
建立一些標準的目錄:
進入 /dev 目錄下建立一般終端機設備:
接著建立 VGA Display 虛擬終端機設備:
再建立 RAM disk 設備:
再建立 floppy 設備:
最後在建立 null 設備:
若你覺得以 mknod
的方式建造這些檔案不方便的話,另一個方法就是以 tar
的方式來建立。現在開始編輯有關的 shell srcipt
,先來編輯 /etc/inittab 這一支 script ,因為我們用的是
BusyBox 上的 init ,它與一般所使用的 init
有點不太一樣,它會先執行 /etc/init.d/rcS 而不是 /etc/rc.d/rc.sysinit
,為了做出來的 Floppy Linux 架構與 redhat
的架構一樣,所以修改了 BusyBox 中的 init.c
。底下是修到的部分內容:
請進入到 /floppy-linux/etc/rc.d 這個目錄下編輯 inittab
,內容如下:
修改 inittab 的權限:
編輯好 rc.sysinit 之後,緊接著就是編輯 /floppy-linux/etc/rc.d
底下的 rc.sysinit ,其內容如下:
變更其權限:
再來在編輯 /floppy-linux/etc/ 底下的 fstab , fstab
內容如下:
修改 fstab 權限:
完成上述編輯之後,就要把靜態連結版的 BusyBox 搬到
/floppy-linux/bin
下,並做出所需要的工具程式的連結符號,其步驟為下:
到這裡為止,可以說 floppy-linux 的 root filesystem
已經製作好了,但我們的 floppy-linux 的 root filesystem 要以
ram disk 的方式來實現。所現在我們就來製作 ram disk
,其方法如下:
此時你就可以在 /tmp 底下發現 Image.gz
這個檔案,這就是我們的 ram disk
影像檔,假如你經常修改 root filesystem
的內容,建議你可以將上述步驟寫成一支 shell srcipt
,你就可以省下蠻多的時間。到目前為止我們已經完成製
floppy-linux 的準備,接下來就將我們努力的成果擺
入磁碟片。我們的 floppy-linux 的 loader 為 syslinux
,所以先要準備好 syslinux
。首先,將空白的磁片格式化,然後載入 sysliunux
,步驟如下:
完成上述步驟之後,請編輯 syslinux 的組態檔 syslinux.cfg
,其 syslinux.cfg 內容如下:
然後將 syslinux.cfg 、 kernel 、 Image.gz 拷貝到磁片中:
現在可以說 Floppy Linux
正式完成,此時你會發現到我們的 Floppy Linux
的大小竟然只有幾百 k 。你現在可以測試你的 Floopy Linux
啦。 * Copyright (C) 版權屬原作者所有 *
|