當前位置:才華齋>IT認證>嵌入式>

Linux作業系統成為嵌入式作業系統的因素

嵌入式 閱讀(1.05W)

嵌入式系統通常進行大量生產,所以單個的成本節約,能夠隨著產量進行成百上千的放大。下面是小編收集的Linux作業系統成為嵌入式作業系統的因素,希望大家認真閱讀!

Linux作業系統成為嵌入式作業系統的因素

在精簡核心在編譯核心之前,首先要明確需要那些驅動和模組,然後只選擇需要的驅動和模組,例如,如果系統不需要網路支援,則可以去掉網路模組 。核心一般是以壓縮方式存放的,在系統啟動時會自行解壓。核心都是常駐記憶體的,當需要呼叫應用程式時,再把需要的程式從磁碟調入記憶體執行。

  構建嵌入式Linux系統-構建核心常用的命令包括:

make config:核心配置,呼叫 ./scripts/Configure 按照 arch/i386/ 來進行配置。

make dep:尋找依賴關係。

make clean:清除以前構建核心所產生的所有目標檔案、模組檔案、以及一些臨時檔案等。

make rmproper:刪除所有因構建核心過程中產生的所有檔案,把核心恢復到最原始的狀態。

make:構核,通過各目錄的Makefile 檔案將會在各個目錄下產生許多目標檔案。如果核心沒有錯誤,將產生檔案vmlinux,這就是構建的核心。

make zImage:在make 的基礎上產生壓縮的核心映象檔案./arch/$(ARCH)/boot/zImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時檔案。

make bzImage:在make 的基礎上產生壓縮比例更大的核心映象檔案./arch/$(ARCH)/boot/bzImage 以及在 ./arch/$(ARCH)/boot/compresed/目錄下產生臨時檔案。

make modules:編譯模組檔案,在make config 時所配置的所有模組將在這時編譯,形成模組目標檔案,並把這些目標檔案存放在modules 目錄中。

make modules_install:把上面編譯好的模組目標檔案放置在目錄 ./lib/modules/$KERNEL_VERSION/ 中。上面的編譯核心是在沒有改變原始碼的情況下實現的,如果覺得原始碼提供的功能在某些方面不能滿足要求,就要修改原始碼了。原始碼中主要有以下幾個關鍵部分:有關程序管理的task_struct 結構,這個結構幾乎包括了與程序有關的所有檔案內容,還有任務佇列、時鐘管理和中斷管理,各種程序間的通訊機制,記憶體管理中各種記憶體分配函式的實現,虛擬檔案系統。

下面來論述了以Linux作為作業系統平臺的優勢,分析了以PC104卡和CompactFlash卡構造帶圖形使用者介面(GUI)的Linux系統的關鍵技術. (構建嵌入式Linux系統)

  1) 硬體及軟體環境

Linux系統的硬體環境以PC104卡為核心,卡上整合美國國家半導體公司(NS Geode)GX1 300MHz CPU,SVGA/LCD/LAN介面以及增強型IDE硬碟介面,支援CompactFlash卡。硬碟和光碟機接至PC104的IDE1口,設定跳線使硬碟為主裝置(master),光碟機為從裝置(slave),CompactFlash裝在IDE2口,設為主裝置,這樣Linux識別 CompactFlah卡為/dev/hdc,而硬碟和光碟機分別為/dev/had,/dev/hdb.我的Linux開發系統是Red Hat 7.2版,通過PC104上的光碟機安裝在硬碟上。

CompactFlash卡容量為32M,如果系統的BIOS支援自動檢測,應該可以直接探測到它。如果不行的話,需要自己輸入卡的各項引數。確保不要帶電插拔CompactFlash卡,因為這可能導致卡上資料的丟失。由於像Red Hat或Mandrake這樣的Linux分發版體積龐大(如果帶X-Windows基本都在1G以上),是不可能裝在容量只有32M的CompactFlash卡上的。目前有許多小型的嵌入式Linux版本,比較有名的有:

ETLinux — 設計用於在小型工業計算機,尤其是 PC/104 模組上執行的 Linux 的完全分發版。

LEM — 執行在 386 上的小型(<8 MB)多使用者、網路 Linux 版本。

LOAF — "Linux On A Floppy"分發版,執行在 386 上。

uClinux — 在沒有 MMU 的系統上執行的 Linux。目前支援 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微處理器。

出於深入瞭解Linux系統執行環境和機制的想法,建議自己構建Linux系統,這對於將來系統核心版本的升級和應用功能的拓展很有好處。選擇Red Hat 7.2的Linux版本。

  2) 系統分割槽和格式化

首先,需要在CompactFlash卡上建立分割槽和格式化,在Linux下用fdisk命令可以在CompactFlash卡上建立分割槽,命令格式為fdisk /dev/hdc,然後用mke2fs命令建立ext2檔案系統.

系統分割槽和格式化

  3)構建嵌入式Linux系統-編譯核心

接下來要做的事情是編譯一個自己的核心。核心負責管理系統的程序、記憶體、裝置驅動程式、檔案和網路系統,決定著系統的效能和穩定性。從技術上而言, Linux 是一個核心,而且只是一個核心。其餘我們通常稱之為 "Linux" (例如一個 shell 和編譯器)的部分實質上只是整個軟體包的一部分,它們從技術上而言是與 Linux (核心)分開的。選擇與開發系統一樣的核心版本2.4.7,在Linux核心版本釋出的官方的網站上可以找到核心原始碼。在編譯核心的時候,由於核心是在特定的.機器上使用的,所以應該對機器的情況瞭如指掌。

另一方面,為了降低過高的複雜性,可以不用kernel module支援,把所有需要的東西直接編譯到核心裡。IDE支援是必不可少的,因為Linux認CompactFlash卡為IDE硬碟,Frame buffer的支援也是必要的,這來源於GUI系統—MiniGUI的要求,網路支援可以不要,但是如果認為顯示屏將來有這方面的要求也可以把它加上。

  4) 構建嵌入式Linux系統-建立根檔案系統(Root Filesystem)

在編譯好核心後,需要在CompactFlash卡上建立根檔案系統。每臺機器都有根檔案系統(一般在本地盤中,當然也可以在RAM盤或網路盤中),它包含系統引導和使其他檔案系統得以mount所必要的檔案,根檔案系統應該有單使用者狀態所必須的足夠的內容。還應該包括修復損壞系統、恢復備份等的工具。

如果有一個任務比其它任務更能簡化從頭構建 Linux 根檔案系統過程的話,那就是構建和安裝 BusyBox 軟體包。BusyBox 是一個可執行檔案,它提供許多其它常用命令列工具的功能,所有這些功能都合為一體。BusyBox 的文件聲稱構建一個有效系統所需要的全部就是 BusyBox 和"/dev、/etc 以及核心"— 而且他們沒有開玩笑。

Busybox 編譯出一個單個的獨立執行程式,就叫做 busybox。但是它可以根據配置,執行 ash shell 的功能,以及幾十個各種小應用程式的功能。這其中包括有一個迷你的 vi 編輯器,系統不可或缺的 /sbin/init 程式,以及其他諸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等這些都是一個正常的系統上必不可少的。但是如果我們把這些程式的原件拿過來的話,它們的體積加在一起,讓人吃不消。可是 busybox 有全部的這麼多功能,大小也不過 100K 左右。而且,使用者還可以根據自己的需要,決定到底要在 busybox 中編譯進哪幾個應用程式的功能。這樣的話,busybox 的體積就可以進一步縮小了。Busybox的具體編譯和配置方法請參閱Busybox的官方文件,使用者可以在上找到.

系統啟動後核心呼叫的第一個程序是/sbin/init。init程序是系統所有程序的起點,核心在完成核內引導以後,即在本執行緒(程序)空間內載入 init程式,它的程序號是1。init程式需要讀取/etc/inittab檔案作為其行為指標,inittab是以行為單位的描述性(非執行性)文字,inittab檔案至少應該包含下面幾行:

::sysinit:/etc/init.d/rcS //執行系統公共指令碼

::respawn:/bin/sh //立即進入shell環境

::ctrlaltdel:/bin/umount -a //捕捉Ctrl+Alt+Del快捷鍵,退出系統

由於init程序第一個執行的指令碼檔案是/etc/init.d/rcS,編輯rcS檔案:

#! /bin/sh

mount -a

接著還需要編寫/etc/fstab檔案:

proc /proc proc defaults 0 0

none /var/shm shm defaults 0 0

  5) 安裝系統引導工具(boot loader)

現在CompactFlask卡上新的核心已經有了,檔案系統也已經建好了,接著要做的事情是安裝系統引導工具(boot loader)。目前可以選用的引導工具很多,象LILO或GRUB都是挺不錯的,使用者可以按自己的喜好來選擇。在這裡我們選用LILO,它在硬碟開始的 MBR寫入引導程式碼,這些程式碼不經過檔案系統,直接從硬碟扇區號讀核心映象(kernel image)裝入記憶體。那麼要如何安裝LILO呢?首先需要根據使用者系統的搭建情況編輯/etc/檔案,下面是我的 /etc/檔案,配有註釋,你可以根據自己的情況進行更改,具體你可以參考LILO mini-HOWTO:

boot=/dev/hdc #從CompactFlash卡啟動

disk=/dev/hdc

bios=0x80 #使BIOS認CompactFlash卡為啟動盤

delay=0 #可選,以秒為單位

vga=0x311 #可選,參照Frame buffer的配置

image=/boot/vmlinuz-2.4.7 #核心檔案位置