歡迎您光臨本站 登入註冊首頁

概述

   對於操作系統而言,Linux有著理想的特性:低成本、高可靠性、極好的網路和多任務支持,更重要的是他的開放源碼,讓使用者不僅能免費使用,更能夠根據自身需要量身定製.因……

    對於操作系統而言,Linux有著理想的特性:低成本、高可靠性、極好的網路和多任務支持,更重要的是他的開放源碼,讓使用者不僅能免費使用,更能夠根據自身需要量身定製.因此除了節省支出成本之外,能更自由、更有彈性地根據自己的需要來修改系統、開發產品.嵌入式系統市場是Linux最重要的應用領域之一,幾乎所有的嵌入式產品都可以利用Linux來完成.在製作Embedded Linux都會面臨到要如何利用最少的系統資源,來建構一個特定嵌入式環境的問題,本方式包含有把Linux Kernel依所要執行的目標環境量身打造,建構一個符合該硬體平台的Linux Kernel,避免不必要的核心功能與驅動程序,並且利用動態函數庫來減少儲存空間.PC104作為相當廣泛的嵌入式計算機平台,將量身定做的Linux操作系統移植於其上,無疑是一件很有意義的事情.

1 PC104主板上嵌入式Linux的實現
    要在一塊配置為集成有586CPU、64 Mb內存、網卡、VGA顯示卡、串口、並口、32MbCF卡、軟碟機介面、IDE介面、鍵盤介面、滑鼠介面、CRT介面的PC104主板上實現一個能從CF卡啟動並能運行Linux的shell的嵌入式Linux.這樣的工作需要完成內核和文件系統的裁減以及整個系統移植到CF卡上3個部分.
1.1 Linux的啟動過程
    系統加電自檢后,位於BIOS的ROM 中的引導裝入程序開始尋找引導扇區,引導裝入程序可以選擇lilo或者grub,這裡選擇grub.首先載入你所選擇的操作系統內核,接著內核載入並運行init程序.init程序讀取/etc/inittab文件,這個文件指定了系統默認的運行級別,然後根據文件內容先由bash運行系統初始化腳本/ete/rc.d/rc.sysinit,進行諸如文件系統檢查和載入、時鐘設置、主機名設置等初始化工作.然後根據默認的運行級別調用/etc/rc.d/rc腳本,來啟動一些服務程序,如http等服務.接著運行mingetty,它使得你能夠通過一個虛擬控制台進行登陸.當用戶輸入用戶名之後,login程序開始運行,它請求用戶輸入密碼並核對密碼,如果密碼準確為用戶調用默認的shell.至此,一個簡單的Linux啟動過程就結束了.
 
圖1 Linux的啟動過程
1.2 內核的交叉編譯
    為了構建目標系統(PC/104)的Linux運行環境,先要在主機系統上搭建一套完整的編譯開發環境.編譯開發環境可以使用商業發行版的Linux,如RedHat Linux,也可以使用Windows下的虛擬機軟體如VMware等.由於目標系統與主機系統的軟體和硬體配置不一樣,因此需要採用交叉編譯環境.所謂交叉編譯是指當主機系統和目標系統的體系結構與操作系統不兼容時,將在主機系統上的編譯的可執行程序應用到目標系統上運行的編譯方法.內核是操作系統中最重要的部分,其地位相當於人類的大腦.就Linux而言,是指/boot目錄下的vmlinuz文件.內核負責整個嵌入式系統的運行,包括硬體外圍、應用程序等.現在的Linux內核已經開發到2.6.X版本.這樣的內核幾乎已經包含了所有的常見硬體設備的驅動程序,以及最新的通訊協議等等,而且所支持的文件系統的類型也是非常之多,可謂功能非常強大.由於其內核是以源代碼的形式發布的,所以方便了裁減.裁減Linux內核主要就是根據目標板的硬體特點配置內核的編譯選項.因此清楚地知道自己的目標板的硬體配置是必須的,尤其是各種適配器、控制卡使用的IRQ、DMA以及I/0地址等.
    編譯內核的操作是圖形化配置的,基本上一目了然,具體操作命令及步驟如下.下載Linux內核源代碼,然後照如下命令操作:
#make mrproper
#make menueonfig
之後會出現圖形化配置界面,按提示和自己已知的硬體配置進行選擇就可以了.接著執行
#make dep
#make clean
#make bzImage
編譯過程結束后,在目錄../SRC/arch/i386/boot/下的文件bzImage即為滿足目標PC104計算機的Linux內核.

1.3 利用Busybox創建根文件系統
    Busyox被非常形象地稱為嵌入式Linux系統中的“瑞士軍刀”,因為它將許多常用的UNIX命令和工具結合到了一個單獨的可執行程序中.雖然與相應的GNU工具比較起來,busybox所提供的功能和參數略少,但在嵌入式系統中已經足夠了.
    busybox源程序可在網路上找到相應的軟體包.假設安裝后源碼目錄為/../sre/busybox,修改/../src/busybox/Config.h文件,在不用的功能前加//,修改/../src/busybox/Makefile文件,將DOSTATIC處改為TRUE.
    執行make(生成的名為busybox的文件大小應在650 K左右),然後在主機上用mkdir命令建立一個臨時文件目錄.具體操作是mkdir/tmp/filesystem .
make PREFIX=/tmp/filesystem install(此時在/tmp/filesystem 目錄下即有Linux啟動運行所必須的目錄和文件了).

1.4 嵌入式Linux操作系統到CF卡的移植
    目標硬體系統為PC104計算機,所用存儲設備為CF卡.所以做完內核編譯及文件系統的創建后,最後要做的就是實現將內核和文件系統移植到CF卡上,當然,這個過程不是簡單的複製就能實現的,因為如果需要PC104計算機能從CF卡上啟動Linux操作系統,必須有相應的引導程序,這裡採用GRUB軟體進行內核引導.具體步驟如下:取一張CF卡,用讀卡器連接到運行標準Linux操作系統的台式計算機上,首先用Fdisk命令格式化CF卡,fdisk/dev/sda;然後建立文件格式,mkfs.ext3/dev/sda,這裡採用ext3格式,sda代表是通過USB介面連接到計算機上的.接下來要將CF卡掛載到計算機上,以便將準備好的內核文件及根文件系統移植到CF卡上.用mount命令掛載CF卡后,在CF卡上用mkdir命令建立/mnt/cf/boot及/mnt/cf/boot/grub等目錄.
   下面開始將Grub引導程序安裝到CF卡上,這樣在PC104啟機的時候,就會由Grub將內核文件進行引導並執行.安裝的步驟如下:首先按照目標機修改下載的Grub安裝包中的grub.conf文件,執行Grub文件,進入Grub的命令模式,在grub>提示符下輸人root(hd1,0),由於現在的CF卡不是當前啟動硬碟,所以硬碟參數不是hd0而是hd1.下一步在grub>提示符下輸入setup(hd1),這樣grub在CF卡上的安裝就結束了.最後一步在grub>提示符下輸入quit,即可退出安裝模式.
   引導程序裝載成功后,最後工作是所有文件和文件系統的移植.將編譯成功生成的內核文件bzImage拷貝到CF卡的boot目錄下,將Grub目錄下的文件拷貝到CF卡的grub目錄下.文件系統移植具體操作如下:將/tmp/filesystem文件夾下的目錄拷貝到CF卡,可執行文件的拷貝方式為mknod命令,或者更為簡單的命令cp -dpR即可將主機上的文件移植到CF卡上,特別注意的是如果直接進行拷貝,文件將不能執行.

2 結束語
   本文開拓性地將嵌入式Linux操作系統完整地移植到CF卡上,將CF卡插入PC104計算機,便可將操作系統導入.在台式機上開發完成的應用程序,只需複製到CF卡上,便可以在PC104計算機上運行,實現了嵌入式系統開發的方便性.只要有一台運行Linux操作系統的台式機、一塊CF卡以及Usb讀卡器、一塊PC104計算機主板,整個開發過程就可以順利進行.


[admin via 研發互助社區 ] 嵌入式Linux在PC104平台上的構建與實現已經有2416次圍觀

http://cocdig.com/docs/show-post-42145.html