亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號

創(chuàng)建小于16M XFree86迷你Linux系統(tǒng)
2007-02-01   中國IT實驗室

迷你型的 Linux 系統(tǒng)。它占用的硬盤空間遠小于 16M 字節(jié),但是卻包括了 XFree86 的 X Window 窗口系統(tǒng)。
  
  本文將帶領(lǐng)大家構(gòu)建一個迷你型的 Linux 系統(tǒng)。它占用的硬盤空間遠小于 16M 字節(jié),但是卻包括了 XFree86 的 X Window 窗口系統(tǒng)。
  
  目標
  
  本文要構(gòu)建的這個迷你型的 Linux 系統(tǒng)只能在一臺特定的單機上運行,如果讀者朋友們有興趣的話,在這個系統(tǒng)的基礎(chǔ)上加以改進,是可以構(gòu)建出通用的、可以在大多數(shù)常規(guī) PC 機上即插即用的系統(tǒng)來的。但是這已經(jīng)不在本文的話題之內(nèi)了,讀者朋友們?nèi)绻信d趣,可以通過我的電子郵件和我討論其中的細節(jié)問題。
  
  我們的目標 Linux 系統(tǒng)運行在一臺普通的 Intel 386 PC 機上,可以有硬盤,也可以不要硬盤,而用 Flash Disk 來代替。如果是用 Flash 盤的話,需要能夠支持從 Flash 盤啟動,而且 Flash 盤的大小要在 16M 字節(jié)或者以上。我們希望用戶一開機啟動,就直接進入 X Window 圖形界面,運行事先指定好的程序。不需要用戶輸入用戶名和密碼進行登錄。
  
  我們設(shè)定的這個目標有點像一個 X Terminal 終端工作站。稍加改進,還可以做成干脆無盤的形式,也就是說,連 16M 的 Flash 盤也不要了。不過,這也超出了本文的話題了。讀者朋友們?nèi)绻信d趣,可以來信和我進行討論。
  
  系統(tǒng)啟動
  
  因為我們要考慮從 Flash 盤進行啟動,所以我們選擇用 LILO 作為我們的 Boot Loader,而不選用 GRUB。這是考慮到 GRUB 有較強的對硬盤和文件系統(tǒng)的識別能力,而 Flash 盤到底不是標準的硬盤,并且我們選用的文件系統(tǒng) GRUB 又不一定認識,搞不好的話 GRUB 反會弄巧成拙。而 LILO 就簡單的多了,它在硬盤開始的 MBR 寫入一個小程序,這個小程序不經(jīng)過文件系統(tǒng),直接從硬盤扇區(qū)號,讀出 Kernel Image 裝入內(nèi)存。這樣,保險系數(shù)就大大增加。并且也給了我們自由選用文件系統(tǒng)的余地。那么,我們要如何安裝 LILO 呢?
  
  首先,我們要找一塊普通的 800M 左右的 IDE 硬盤,連在目標機器的 IDE 線上。這樣在我們的目標機器上,IDE1 上掛的是 Flash 盤,IDE2 上掛的是一塊工作硬盤。我們用標準的步驟在 IDE2 的標準硬盤上裝上一個 Debian GNU/Linux 系統(tǒng)。當然,如果讀者朋友們手頭沒有 Debian,也可以裝 Red Hat 系統(tǒng)。裝好工作系統(tǒng)之后,要首先做一些裁減工作,把不必要的 Service 和 X Window 等等東西都刪掉。這樣做的目的是增進系統(tǒng)啟動速度,因為我們在后面的工作中,肯定要不停的重新啟動機器,所以啟動速度對我們的工作效率是很關(guān)鍵的。
  
  裝好工作系統(tǒng)之后,在 Falsh 盤上做一個 Ext2 文件系統(tǒng),這個用 mke2fs 這個命令就可以完成。由于 Flash 盤是接在 IDE1 上的,所以在 Linux 里面,它的身份是 /dev/hda。本文作者在操作的時候,把整個 Flash 盤劃分了一個整個的分區(qū),所以,調(diào)用 mke2fs 的時候,處理的是 /dev/hda1。讀者朋友們應(yīng)該可以直接在 /dev/hda 上做一個 Ext2 文件系統(tǒng),而不用事先分區(qū)。
  
  在 Flash 盤上做好了文件系統(tǒng)之后,就可以把一個編譯好的內(nèi)核映像文件 vmlinuz 拷貝到 Flash 盤上了。注意,必須要先把這個 vmlinuz 映像文件拷貝到 Flash 盤上,然后才能在 Flash 盤上安裝 LILO。不然的話,LILO 到時候可是會 LILILILI 打結(jié)巴的,因為它會找不到 Kernel Image 在 Flash 盤上的位置的,那樣的話 Flash 盤也就啟動不起來了。還有,如果讀者朋友們在 Flash 盤上用的是一個壓縮的文件系統(tǒng)的話,到時候 LILO 也會出問題,它雖然能正確的找到 Kernel Image 在硬盤上的起始位置,但是它卻沒有辦法處理被文件系統(tǒng)重新壓縮過的這個 Kernel Image,不知道該如何把它展開到內(nèi)存中去。
  
  把 Kernel Image 拷貝過去以后,我們就可以動手編輯一份 lilo.conf 文件,這份文件可以就放在工作系統(tǒng)上就行了。但是注意在 lilo.conf 中索引的文件名的路徑可要寫對。這些路徑名都是在工作系統(tǒng)上看上去的路徑名。比如,如果 Flash 盤 Mount 在 /mnt 目錄下面,那么,在 lilo.conf 中,vmlinuz 的路徑名就是 /mnt/vmlinuz。注意這一點千萬不要搞錯。不然的話,如果一不小心把工作系統(tǒng)的 LILO 給破壞掉了,那就麻煩了。編輯好了 lilo.conf,然后再運行 lilo 命令,注意,要告訴它用這個新的 lilo.conf 文件,而不要用 /etc/lilo.conf。
  
  安裝好 LILO 之后,我們可以立即重新啟動,測試一下。首先在 BIOS 里面,設(shè)置成從 IDE1 開始啟動,如果我們看到 LILO 的提示符,按回車后還能看到 Kernel 輸出的消息,這就算是 LILO 的安裝成功了。記得這個操作的方法,以后每次我們更新 Flash 盤上的 Kernel Image,都記得要更新 LILO。也就是說,要重新運行一遍 lilo 命令。
  
  編譯內(nèi)核
  
  試驗成功 LILO 的安裝以后,我們開始考慮編譯一個新的內(nèi)核。當然,要編譯新的內(nèi)核,我們首先要進入我們的工作系統(tǒng)。這里有兩個辦法進入工作系統(tǒng),一是在 BIOS 里面設(shè)置從 IDE2 啟動,當然,這就要求當初安裝工作系統(tǒng)的時候,要把 LILO 安裝在 /dev/hdb 上;另一個辦法是還是從 IDE1 啟動,不改變 BIOS 的設(shè)置,但是在看到 LILO 的提示符的時候,要鍵入 linux root=/dev/hdb1,最前面的 linux 是在 lilo.conf 里面定義的一個 entry,我們只采用這個 entry 所指定的 Kernel Image,但是用 /dev/hdb1 作為 root 文件系統(tǒng)。兩個辦法可能有的時候一個比另一個好,更方便一些。這就要看具體的情況了。不過,它們的設(shè)置并不是互相沖突的。
  
  在編譯內(nèi)核的時候,由于我們的內(nèi)核是只有一臺機器使用的,所以我們應(yīng)該對它的情況了如指掌;另外一方面,為了減低不必要的復(fù)雜性,我們決定不用 kernel module 的支持,而把所有需要的東西直接編譯到內(nèi)核的里面。這樣編譯出來的內(nèi)核,在一臺普通的 586 主板上,把所有必要的功能都加進去,一般也不到 800K 字節(jié)。所以,這個辦法是可行的。而且減低了 init scripts 的復(fù)雜程度。從運行方面來考慮,由于需要的 kernel 代碼反正是要裝載到內(nèi)存中的,所以并不會引起內(nèi)存的浪費。
  
  在我們的目標平臺上,我們希望使用 USB 存儲設(shè)備。還有一點要注意的,就是對 Frame buffer 的支持。這主要是為了支持 XFree86。一般說來,如果我們的顯卡是 XFree86 直接支持的,那當然最好,也就不需要 frame buffer 的內(nèi)核支持。但是如果 XFree86 不支持我們的顯卡,我們可以考慮用 VESA 模式。但是 XFree86 的 VESA 卡支持運行起來不太漂亮,還有安全方面的問題,有時在啟動和退出 X Window 的時候會出現(xiàn)花屏。所以我們可以采用 kernel 的 vesa 模式的 frame buffer,然后用 xfree86 的 linux frame buffer 的驅(qū)動程序。這樣一般就看不到花屏的現(xiàn)象了,而且安全方面也沒有任何問題。
  
  devfs 也是我們感興趣的話題。如果 kernel 不使用 devfs,那么系統(tǒng)上的 root 文件系統(tǒng)就要有 /dev 目錄下面的所有內(nèi)容。這些內(nèi)容可以用 /dev/MAKEDEV 腳本來建立,也可以用 mknod 手工一個一個來建。這個方法有其自身的好處。但是它的缺點是麻煩,而且和 kernel 的狀態(tài)又并不一致。相反的,如果使用了 devfs,我們就再也不用擔心 /dev 目錄下面的任何事情了。/dev 目錄下面的項目會有 kernel 的代碼自己負責。實際使用起來的效果,對內(nèi)存的消耗并不明顯。所以我們選擇 devfs。
  
  busybox
  
  有了 LILO 和 kernel image 之后,接下來,我們要安排 root 文件系統(tǒng)。由于 flash 盤的空間只有 16M 字節(jié),可以說,這是對我們最大的挑戰(zhàn)。這里首先要向大家介紹小型嵌入式 Linux 系統(tǒng)安排 root 文件系統(tǒng)時的一個常用的利器:BusyBox。
  
  Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先開發(fā),使用在 Debian 的安裝程序中。后來又有許多 Debian developers 貢獻力量,這其中尤推 busybox 目前的維護者 Erik Andersen,他患有癌癥,可是卻是一名優(yōu)秀的自由軟件開發(fā)者。
  
  Busybox 編譯出一個單個的獨立執(zhí)行程序,就叫做 busybox。但是它可以根據(jù)配置,執(zhí)行 ash shell 的功能,以及幾十個各種小應(yīng)用程序的功能。這其中包括有一個迷你的 vi 編輯器,系統(tǒng)不可或缺的 /sbin/init 程序,以及其他諸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等這些都是一個正常的系統(tǒng)上必不可少的,但是如果我們把這些程序的原件拿過來的話,它們的體積加在一起,讓人吃不消。可是 busybox 有全部的這么多功能,大小也不過 100K 左右。而且,用戶還可以根據(jù)自己的需要,決定到底要在 busybox 中編譯進哪幾個應(yīng)用程序的功能。這樣的話,busybox 的體積就可以進一步縮小了。
  
  使用 busybox 也很簡單。只要建一個符號鏈接,比方 ln -s /bin/busybox /bin/ls,那么,執(zhí)行 /bin/ls 的時候,busybox 就會執(zhí)行 ls 的功能,也會按照 ls 的方式處理命令行參數(shù)。又比如 ln -s /bin/busybox /sbin/init,這樣我們就有了系統(tǒng)運行不可或缺的 /sbin/init 程序了。當然,這里的前提是,你在 busybox 中編譯進去了這兩個程序的功能。
  
  這里面要提出注意的一點是,busybox 的 init 程序所認識的 /etc/inittab 的格式非常簡單,而且和常規(guī)的 inittab 文件的格式不一樣。所以讀者朋友們在為這個 busybox 的 init 寫 inittab 的時候,要注意一下不同的語法。至于細節(jié),就不在我們這里多說了,請大家參考 Busybox 的用戶手冊。
  
  從啟動到進入 shell
  
  busybox 安裝好以后,我們就可以考慮重新啟動,一直到進入 shell 提示符了。這之前,我們要準備一下 /etc 目錄下的幾個重要的文件,而且要把 busybox 用到的 library 也拷貝過來。
  
  用 ldd 命令,后面跟要分析的二進制程序的路徑名,就可以知道一個二進制程序

熱詞搜索:

上一篇:開源虛擬技術(shù)Xen在LinuxWorld致意
下一篇:Windows操作系統(tǒng)中如何妙刪隱形硬件

分享到: 收藏