製作基於軟盤的Linux系統

2021-03-31 13:40:35 字數 4669 閱讀 1579

嵌入式linux由乙個幾百kb的kernel(核心)和一些根據需要進行定製的系統模組組成。由於linux是開放源**的作業系統,因此,其在嵌入式領域有其不可替代的成本和高度靈活性等優勢。

將linux系統裁減到就像dos一樣只要一張軟盤就能啟動,是製作嵌入式linux的基礎。網路上有許多實現方法的介紹,但是在實踐過程中都或多或少存在著一些問題或不方便之處。我們結合自己在這方面的實踐經驗,詳細介紹基於軟盤的linux系統製作過程。

三個基本元素

乙個嵌入式linux系統只需要下面三個基本元素:引導程式、linux微核心(由記憶體管理、程序管理和事務處理構成)和初始化程序。如果要讓它有更多的功能且保持小型化,還可以加上檔案系統、tcp/ip網路支援、gui(圖形使用者介面)和設計精簡的應用程式,並將其放在rom、ram、flash或 disk on chip中啟動。由於嵌入式linux作業系統的高度靈活性,開發者可以很容易地對它進行定製或作適當開發,來滿足實際應用需要。

將linux 的系統裁減到只要一張軟盤就能啟動,不但是製作嵌入式linux的基礎,而且自己也有廣泛的應用前景。這些應用包括簡單路由器管理、三層交換機管理、floppy-boot防火牆管理等。國外有專門的組織致力於這方面的工作,如loaf(linux on a floopy)等組織。

選擇核心

建立乙個啟動盤首先必須建立系統核心。由於軟盤容量有限,因此常採用對核心進行手工配置,去掉不必要的模組的方法來裁減核心。

要想裁減核心體積,建立它時就得把不必要的功能去掉,如去掉對網路的支援和對不必要裝置的支援。但是一定要記住保留核心對ramdisk和ext2的支援,否則啟動盤將不能工作。其過程如下:

1)以root超級使用者登入,進入目錄/usr/src/linux。

2)執行#make menuconfig來對核心模組進行配置(也可以在x window中執行make xconfig)。

3)依次執行#make dep 和#make bzimage (如果核心不大則執行#make zimage),執行該命令後,將在/usr/src/linux/arch/i386/boot目錄下生成核心檔案bzimage(或zimage)。若配置中加入了模組的支援(選項為m),還需要執行#make modules和#make modules_install。

4)用命令#cp usr/src/linux/arch/i386/ boot/bzimage /boot拷貝新核心到/boot目錄,修改檔案/etc/lilo.conf,加入:

image = /boot/bzimage

label = new

root =/dev/hdxx(你自己的啟動硬碟分割槽)

read-only

執行命令#lilo載入新核心,#reboot重啟系統,在出現「lilo:」時鍵入new。若系統正常引導,則執行下一步,若不行則用老核心引導後,到步驟1)重新配置編譯核心。

5)插入軟盤執行

#dd bs=1k if=/usr/src/linux/arch/i386/ boot/bzimage of=/dev/fd0

這樣將核心拷貝到軟盤上。

6)用命令#ls -s 將在/usr/src/linux/ arch/i386/boot/bzimage 得到核心的大小(假定為476),將這個大小記錄下來以備後用。

這樣就製作了包含裁減核心的可供啟動的linux啟動軟盤。但是由於沒有root檔案系統,使用這張軟盤啟動系統後,系統會顯示 「vfs: cannot open root device x:x」和「kernel panic: vfs: unalbe to boot root fs on x:x」的錯誤。

root檔案系統

乙個root檔案系統必須包括支援完整linux系統的全部東西,因此,它至少應包括:基本檔案系統結構;至少含有目錄/dev、/proc、 /bin、/etc、/lib、/usr、/tmp ;最基本的應用程式,如sh、ls、cp、mv等;最低限度的配置檔案,如rc、inittab、fstab等;裝置:/dev/hd*、/dev/ tty*、/dev/fd0;基本程式執行所需的函式庫。

由於以上所需檔案遠超過1.44m,因此我們通常的做法是在準備好內容後將其壓縮到軟盤中。當用軟盤啟動時,再把檔案解壓到記憶體中,形成乙個虛擬盤(ramdisk),通過ramdisk控制系統啟動。如果你使用lilo控制啟動,先檢查一下lilo的配置檔案 /etc/lilo.conf中定義的ramdisk的大小:

ramdisk_size = nnn

建立root檔案系統

回到根目錄或使用者的預設目錄,用#mkdir flop建立工作目錄flop。在這個目錄下用mkdir建立以下一些目錄:/dev,裝置;/proc - proc,檔案系統所需目錄;/etc,系統配置檔案;/sbin,重要的系統程式;/bin,基本應用程式;/lib,共享函式庫;/mnt,裝載其他磁碟節點;/usr,附加應用程式。

其中/proc、/mnt和/usr在此情況下都是空的,只需要用mkdir建立它們即可。其餘的目錄應根據需要分別建立。下面對它們乙個乙個地詳細敘述。

/dev:這個目錄中含有系統不可缺少的裝置檔案。你可以把現有系統中/dev的檔案拷貝過來,然後刪除不必要的檔案。不過一定要保留console、kmem、mem、null、ram、tty*等檔案。其餘的都可以根據需要刪除。

/etc:這個目錄中含有一些必不可少的系統配置檔案。一般可以包含rc.d/* (系統啟動指令碼)、fstab(列出要登入的檔案系統)、inittab(包含啟動過程引數)、passwd (使用者名稱和目錄)、group(使用者組)、shadow(使用者加密密碼)。如果不使用init作為登入程序,而將init鏈結到/bin/bash,則 /etc目錄下可以不含有任何檔案。

/bin和/sbin:該目錄中包含有必不可少的應用程式,如ls、mv、cat、cp、getty(mingettty)。也可以根據自己的需要選擇,不過一定要記住包括以下程式:init、getty、login、mount、bash。

/lib: 該目錄中包含有你的啟動盤啟動過程中所需要的共享函式庫。在/lib目錄下還必須有函式庫裝載器,這個裝載器或是ld.so (對 a.out 庫) 或是 ld-linux.so (對 elf 庫)。

模組

如果有乙個模組化的核心,你還得必須考慮需要載入的模組。它們都位於/lib/modules。你可以把不是很重要的模組放到別的盤上,當系統啟動後再載入,這樣會節省啟動盤的空間。

打包

1)建立loop裝置的臨時掛接點和乙個大小為4.6兆(大小可以調節)的臨時檔案,並將其清零:

#mkdir /mnt/loop 2>/dev/null

#dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=4600 >/dev/null

2)將loop裝置與臨時檔案聯絡起來

#losetup /dev/loop0 /tmp/loop_tmp

3)linux核心識別兩種可以直接拷貝到ramdisk的檔案系統,它們是minix 和ext2,ext2效能更好:

#mke2fs -m 0 /dev/loop0 2>/dev/null

#mke2fs將會自動判斷裝置容量的大小並相應地配置自身,-m 0引數防止它給root保留空間,這樣會騰出更多的有用空間。

4)接著把虛擬盤掛在節點/mnt上:

#mount /dev/loop0 /mnt/loop -t ext2

5)將製作好的root檔案系統拷貝到所掛的節點上,卸下掛接點,刪除建立的掛接點,再取消loop裝置與臨時掛接點的聯絡。

#cp -a ./tree/* /mnt/loop

#umount /mnt/loop

#rmdir /mnt/loop 2>/dev/null

#losetup -d /dev/loop0

6)壓縮檔案系統後,就擁有了乙個壓縮的root檔案系統,刪除建立的臨時檔案。

#dd if=/tmp/loop_tmp | gzip -9 > rootfs.gz

#rm -f /tmp/loop_tmp

7)檢查壓縮後的root檔案系統的大小,如果大了,還得去掉一些東西。

#ls -s ./zimage|cut -f2 -d

整合

有了root檔案系統和核心之後,最後的工作就是把它們整合在一起。

先檢查總檔案的大小,包括已經製作的核心和打包的root檔案系統。如果超出1.44m,就得考慮重新建立。root檔案系統所需的所有檔案都準備就緒,你就可以執行它了,執行結果應該沒有錯誤,否則就應該仔細檢查一下。

真正的嵌入式linux系統

到這裡基於軟盤的linux盤已經做好了,剩下的工作就是測試這張盤的正確性,如果有問題還得從頭再來。現在許多linux的發行套件中都有廠家做好的啟動盤,它們的製做原理和以上介紹的大同小異,但是它們常常使用許多不同的技巧,因為它們要面對更多的硬體和各種可能發生的情況。

真正的基於ia應用的嵌入式linux還必須加入gui(圖形使用者介面)和設計精簡的應用程式,如網路瀏覽器等。gui方面開放源**的,國外有microwindows(可訪問.microwindows.),國內有minigui(可訪問 .minigui.)。它們的源**都可以在網上找到。瀏覽器方面用得較廣的是viewml(.viewml.),它也是開放源**的。結合以上一些工具,再加上對硬體驅動程式的開發,就可以形成一套嵌入式的linux作業系統。

製作基於軟盤的Linux系統

製作基於軟盤的linux系統 將linux系統裁減到就像dos一樣只要一張軟盤就能啟動,是製作嵌入式linux的基礎。網路上有許多實現方法的介紹,但是在實踐過程中都或多或少存在著一些問題或不方便之處。我們結合自己在這方面的實踐經驗,詳細介紹基於軟盤的linux系統製作過程。三個基本元素 乙個嵌入式l...

Linux製作軟盤映象

1 空白軟盤映象 dd if dev zero of floppy.img bs 512 count 2880 每個塊512b,共2880塊,即是1.4m左右 2 losetup將floppy.img作為迴圈裝置loop device使用 losetup dev loop0 floppy.img 3...

linux 下製作使用軟盤啟動映象

首先,生成空白軟盤映象 dd if dev zero of data.img bs 512 count 2880 當然也可以用bochs 自帶的工具bximge,先fd,點enter。使用 losetup 命令,將 data.img 作為 loop device 使用 sudo losetup de...