新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Linux的嵌入式GUI研究與應用

基于Linux的嵌入式GUI研究與應用

作者: 時間:2012-03-24 來源:網(wǎng)絡 收藏

1.引言

指在嵌入式系統(tǒng)中為特定的硬件設備或者環(huán)境而設計的圖形用戶界面系統(tǒng)。它極大地方便了非專業(yè)用戶的使用,人們不再需要死記硬背大量的命令,而可以通過窗口、菜單方便地操作。在實際應用中,應滿足輕型、占用資源少、高性能、高可靠性、可配置等基本要求。

作為一種可裁減的操作系統(tǒng),兼容多種主流CPU且支持所有的文件系統(tǒng)和網(wǎng)絡服務,并具備源代碼公開、易于定制、穩(wěn)定、功能強大和易開發(fā)等優(yōu)點,是發(fā)展未來嵌入式設備的絕佳資源。

2.在嵌入式系統(tǒng)上的實現(xiàn)
2.1系統(tǒng)引導

系統(tǒng)上電或者復位后,將對系統(tǒng)硬件設備進行自檢,無錯誤則將硬盤0磁道的第一個扇區(qū),即MBR中的BootLoader調至內存0x07C00處,并將控制權交給BootLoader[1]。BootLoader通常是一段匯編代碼,存放在MBR中,作用是將系統(tǒng)啟動代碼讀到內存中。目前可選用的引導工具主要有GRUB和LILO,這里我們選用主流的GRUB,由于選用的存儲介質是CF卡,格式化CF卡后建立GRUB安裝目錄,按照提示安裝GRUB后,在 /etc目錄下新建grub.conf文件,內容如下:
default=0
timeout=5
title-2.4.34
root(hd0,0)
kernel/boot/vmlinuz-2.4.34roroot=/dev/hdc1
其中root(hd0,0)指定了/boot所在的分區(qū),kernel一行用來指定Linux的內核,及/所在的分區(qū)。

2.2內核配置、編譯及裁減

內核是Linux操作系統(tǒng)的核心,它負責管理系統(tǒng)進程和進程調度等大小事務,決定著系統(tǒng)的性能和穩(wěn)定性,其它應用程序都必須通過它才可以使用系統(tǒng)資源,獲取系統(tǒng)服務。由于嵌入式硬件資源的限制,我們需要對Linux內核進行定制,精簡出符合實際需要的最小內核文件。
首先在www.kernel.org上獲取相應的內核包,解壓后進行配置,然后根據(jù)目標板的硬件特點和實際需求配置內核的編譯選項。這里我們選用基于X86 架構的PC104主板,為了減低不必要的復雜性,內核中取消kernelmodule支持,將有關CPU類型、內存管理、doc驅動、ext2文件系統(tǒng)支持、串口支持等常用功能編譯進內核,SCSI、Floppy之類的外設在我們的嵌入式系統(tǒng)中沒有使用,編譯時可去掉。這樣實際編譯出的內核只有 747.6KB。基本步驟如下[2]:
#cd/usr/src/linux//內核包所在目錄,這里下載的內核包版本是2.4.34
#makemrproper//確保源代碼目錄下沒有不正確的.o文件以及文件的相互倚賴關系
#makemenuconfig//圖形界面下編譯選項配置

#makedep//確保關鍵文件在正確位置
#makeclean//確保所有有關文件都處于最新版本狀態(tài)
#makebzImage//編譯內核
#cp/usr/src/linux/arch/i386/bzImage/mnt/cf/boot//將內核文件拷貝至boot

2.3根文件系統(tǒng)實現(xiàn)

Linux 的根文件系統(tǒng)以樹的結構方式組織,主要由配置文件、設備文件、Linux基本命令、基本C語言庫組成。后兩者是主要的,也是占空間最大的,用 Busybox和uClibc的組合夠建這兩部分內容,可以大大節(jié)省空間。根據(jù)根文件系統(tǒng)的基本結構,我們建立各個對應的目錄:
#mkdirprocdevbinbootboot/grubetcsrclib//由于是單用戶系統(tǒng),刪除了root、home、sbin目錄
#cp–r/dev/null/dev/mem…/mnt/cf/dev//拷貝所需設備文件

最后需要在etc目錄下建立幾個配置文件,分別是/etc/inittab、/etc/init.d/rcS、/etc/fstab,限于篇幅,僅介紹inittab文件,內容如下[4]:
::sysinit:/etc/init.s/rcS//指定初始化文件
::askfirst:/bin/sh//啟動時執(zhí)行的shell
::respawn:/bin/getty38400ttyS0//打開一個串口,波特率為38400
::restart:/bin/init//重啟時執(zhí)行進程init
::ctrlaltdel:/bin/reboot//捕捉特定按鍵動作
::shutdown:/bin/umount–a–r//關機時動作,卸載所有文件系統(tǒng)

3.研究
3.1基于嵌入式Linux的GUI系統(tǒng)底層實現(xiàn)基礎

一個能夠兼容多硬件平臺的嵌入式GUI系統(tǒng),應至少抽象出兩類設備:基于圖形顯示設備(如VGA卡)的圖形抽象層 GAL(GraphicAbstractLayer)和基于輸入設備(如鍵盤,觸摸屏等)的輸入抽象層 IAL(InputAbstractLayer)[3]。抽象層的概念類似Linux內核虛擬文件系統(tǒng)的概念,它定義了一組不依賴于任何特殊硬件的抽象接口,所有頂層的圖形操作和輸入處理都建立在抽象接口上,而用于實現(xiàn)該抽象接口的底層代碼稱為“圖形引擎”或“”,類似操作系統(tǒng)中的驅動程序,這實際是一種面向對象的程序結構。利用該抽象接口,嵌入式GUI可以非常方便的移植到其他POSIX系統(tǒng)上,只需要根據(jù)抽象層接口實現(xiàn)新的引擎即可。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉