• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 制作基于軟盤的Linux系統

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    嵌入式 Linux由一個幾百KB的kernel(內核)和一些根據需要進行定制的系統模塊組成。由于Linux是開放源代碼的操作系統,因此,其在嵌入式領域有其不可替代的成本和高度靈活性等優勢。 將 Linux系統 裁減到就像DOS一樣只要一張軟盤就能啟動,是制作嵌入式Linux

    嵌入式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盤已經做好了,剩下的工作就是測試這張盤的正確性,如果有問題還得從頭再來?,F在許多Linux的發行套件中都有廠家做好的啟動盤,它們的制做原理和以上介紹的大同小異,但是它們常常使用許多不同的技巧,因為它們要面對更多的硬件和各種可能發生的情況。

     

    真正的基于IA應用的嵌入式Linux還必須加入GUI(圖形用戶界面)和設計精簡的應用程序,如網絡瀏覽器等。GUI方面開放源代碼的,國外有Microwindows(可訪問www.microwindows.org),國內有miniGUI(可訪問www.minigui.org)。它們的源代碼都可以在網上找到。瀏覽器方面用得較廣的是ViewML(www.viewml.org),它也是開放源代碼的。結合以上一些工具,再加上對硬件驅動程序的開發,就可以形成一套嵌入式的Linux操作系統。 

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>