熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

制作基於軟盤的Linux系統

2013-11-13 22:11:03  來源: Oracle 

  作者張宏偉歐陽平平
  嵌入式Linux由一個幾百KB的kernel(內核)和一些根據需要進行定制的系統模塊組 成由於Linux是開放源代碼的操作系統因此其在嵌入式領域有其不可替代的成 本和高度靈活性等優勢
  
  
  將Linux系統裁減到就像DOS一樣只要一張軟盤就能啟動是制作嵌入式Linux的基 礎網絡上有許多實現方法的介紹但是在實踐過程中都或多或少存在著一些問題 或不方便之處我們結合自己在這方面的實踐經驗詳細介紹基於軟盤的Linux系統 制作過程
  
  三個基本元素一個嵌入式Linux系統只需要下面三個基本元素引導程序Linux微 內核(由內存管理進程管理和事務處理構成)和初始化進程如果要讓它有更多 的功能且保持小型化還可以加上文件系統TCP/IP網絡支持GUI(圖形用戶界面) 和設計精簡的應用程序並將其放在ROMRAMFLASH或Disk On Chip中啟動由於 嵌入式Linux操作系統的高度靈活性開發者可以很容易地對它進行定制或作適當開 發來滿足實際應用需要
  
  將Linux 的系統裁減到只要一張軟盤就能啟動不但是制作嵌入式Linux的基礎而 且自己也有廣泛的應用前景這些應用包括簡單路由器管理三層交換機管 理floppyboot防火牆管理等國外有專門的組織致力於這方面的工作如 LOAF(Linux on a floopy)等組織
  
  選擇內核創建一個啟動盤首先必須創建系統內核由於軟盤容量有限因此常采用 對內核進行手工配置去掉不必要的模塊的方法來裁減內核
  
  要想裁減內核體積創建它時就得把不必要的功能去掉如去掉對網絡的支持和對 不必要設備的支持但是一定要記住保留內核對RAMDISK和ext的支持否則啟動盤 將不能工作其過程如下
  
  )以root超級用戶登錄進入目錄/usr/src/linux
  
  )執行#make menuconfig來對內核模塊進行配置(也可以在X Window中運行make xconfig)
  
  )依次執行#make dep 和#make bzImage (如果內核不大則執行#make zImage)執 行該命令後將在/usr/src/linux/arch/i/boot目錄下生成內核文件bzImage(或 zImage)若配置中加入了模塊的支持(選項為M)還需要執行#make modules和 #make modules_install
  
  )用命令#cp usr/src/linux/arch/i/ boot/bzImage /boot拷貝新內核到/boot 目錄修改文件/etc/nf加入
  
  image = /boot/bzImagelabel = newroot =/dev/hdxx(你自己的啟動硬盤分 區)readonly執行命令#lilo載入新內核#reboot重啟系統在出現lilo:時鍵 入new若系統正常引導則執行下一步若不行則用老內核引導後到步驟)重 新配置編譯內核
  
  )插入軟盤執行
  
  #dd bs=k if=/usr/src/linux/arch/i/ boot/bzImage of=/dev/fd這樣將內核 拷貝到軟盤上
  
  )用命令#ls s 將在/usr/src/linux/ arch/i/boot/bzImage 得到內核的大小 (假定為將這個大小記錄下來以備後用
  
  這樣就制作了包含裁減內核的可供啟動的Linux啟動軟盤但是由於沒有root文件系 統使用這張軟盤啟動系統後系統會顯示VFS: cannot open root device x:xkernel panic: VFS: unalbe to boot root fs on x:x的錯誤
  
  root文件系統一個root文件系統必須包括支持完整Linux系統的全部東西因此它 至少應包括基本文件系統結構至少含有目錄/dev/proc/bin/etc/ lib/usr/tmp 最基本的應用程序如shlscpmv等最低限度的配置文 件如rcinittabfstab等設備/dev/hd*/dev/ tty*/dev/fd基本程 序運行所需的函數庫
  
  由於以上所需文件遠超過M因此我們通常的做法是在准備好內容後將其壓縮到 軟盤中當用軟盤啟動時再把文件解壓到內存中形成一個虛擬盤(RAMDISK) 通過RAMDISK控制系統啟動如果你使用LILO控制啟動先檢查一下LILO的配置文件 /etc/nf中定義的RAMDISK的大小
  
  RAMDISK_SIZE = nnn創建root文件系統回到根目錄或用戶的缺省目錄用#mkdir flop建立工作目錄flop在這個目錄下用mkdir建立以下一些目錄/dev設備/ proc proc文件系統所需目錄/etc系統配置文件/sbin重要的系統程 序/bin基本應用程序/lib共享函數庫/mnt裝載其他磁盤節點/usr 附加應用程序
  
  其中/proc/mnt和/usr在此情況下都是空的只需要用mkdir創建它們即可其余 的目錄應根據需要分別創建下面對它們一個一個地詳細敘述
  
  /dev這個目錄中含有系統不可缺少的設備文件你可以把現有系統中/dev的文件 拷貝過來然後刪除不必要的文件不過一定要保留 consolekmemmemnullramtty*等文件其余的都可以根據需要刪除/ etc這個目錄中含有一些必不可少的系統配置文件一般可以包含rcd/* (系統啟 動腳本)fstab(列出要登錄的文件系統)inittab(包含啟動過程參數)passwd (用戶名和目錄)group(用戶組)shadow(用戶加密密碼)如果不使用init作為登 錄進程而將init鏈接到/bin/bash則/etc目錄下可以不含有任何文件/bin和/ sbin該目錄中包含有必不可少的應用程序如 lsmvcatcpgetty(mingettty)也可以根據自己的需要選擇不過一定要記 住包括以下程序initgettyloginmountbash/lib: 該目錄中包含有你的 啟動盤啟動過程中所需要的共享函數庫在/lib目錄下還必須有函數庫裝載器這 個裝載器或是ldso (對 aout 庫) 或是 ldlinuxso (對 ELF 庫)模塊如果有 一個模塊化的內核你還得必須考慮需要加載的模塊它們都位於/lib/modules 你可以把不是很重要的模塊放到別的盤上當系統啟動後再加載這樣會節省啟動 盤的空間
  
  打包)建立loop設備的臨時掛接點和一個大小為兆(大小可以調節)的臨時文 件並將其清零
  
  #mkdir /mnt/loop >/dev/null#dd if=/dev/zero of=/tmp/loop_tmp bs=k count= >/dev/null)將loop設備與臨時文件聯系起來
  
  #losetup /dev/loop /tmp/loop_tmp)Linux內核識別兩種可以直接拷貝到 RAMDISK的文件系統它們是minix 和extext性能更好
  
  #mkefs m /dev/loop >/dev/null#mkefs將會自動判斷設備容量的大小並相 應地配置自身m 參數防止它給root保留空間這樣會騰出更多的有用空間
  
  )接著把虛擬盤掛在節點/mnt上
  
  #mount /dev/loop /mnt/loop t ext)將制作好的root文件系統拷貝到所掛的 節點上卸下掛接點刪除建立的掛接點再取消loop設備與臨時掛接點的聯系
  
  #cp a /tree/* /mnt/loop#umount /mnt/loop#rmdir /mnt/loop >/dev/ null#losetup d /dev/loop)壓縮文件系統後就擁有了一個壓縮的root文件系 統刪除建立的臨時文件
  
  #dd if=/tmp/loop_tmp | gzip > rootfsgz#rm f /tmp/loop_tmp)檢查壓縮 後的root文件系統的大小如果大了還得去掉一些東西
  
  #ls s /zImage|cut f d整合有了root文件系統和內核之後最後的工作就是 把它們整合在一起
  
  先檢查總文件的大小包括已經制作的內核和打包的root文件系統如果超出 M就得考慮重新創建root文件系統所需的所有文件都准備就緒你就可以運 行它了運行結果應該沒有錯誤否則就應該仔細檢查一下
  
  真正的嵌入式Linux系統到這裡基於軟盤的Linux盤已經做好了剩下的工作就是測 試這張盤的正確性如果有問題還得從頭再來現在許多Linux的發行套件中都有廠 家做好的啟動盤它們的制做原理和以上介紹的大同小異但是它們常常使用許多 不同的技巧因為它們要面對更多的硬件和各種可能發生的情況
  
  真正的基於IA應用的嵌入式Linux還必須加入GUI(圖形用戶界面)和設計精簡的應用 程序如網絡浏覽器等GUI方面開放源代碼的國外有Microwindows(可訪問 )國內有miniGUI(可訪問)它們的源代碼 都可以在網上找到浏覽器方面用得較廣的是ViewML()它也是開 放源代碼的結合以上一些工具再加上對硬件驅動程序的開發就可以形成一套 嵌入式的Linux操作系統
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/18410.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.