當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]實現(xiàn)針對觸摸屏的輸入引擎移植解析方案

1.引言

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

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

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

2.1系統(tǒng)引導

系統(tǒng)上電或者復位后,將對系統(tǒng)硬件設(shè)備進行自檢,無錯誤則將硬盤0磁道的第一個扇區(qū),即MBR中的BootLoader調(diào)至內(nèi)存0x07C00處,并將控制權(quán)交給BootLoader[1]。BootLoader通常是一段匯編代碼,存放在MBR中,作用是將系統(tǒng)啟動代碼讀到內(nèi)存中。目前可選用的引導工具主要有GRUB和LILO,這里我們選用主流的GRUB,由于選用的存儲介質(zhì)是CF卡,格式化CF卡后建立GRUB安裝目錄,按照提示安裝GRUB后,在 /etc目錄下新建grub.conf文件,內(nèi)容如下:

default=0

timeout=5

title Linux-2.4.34

root (hd0,0)

kernel /boot/vmlinuz-2.4.34 ro root=/dev/hdc1

其中root (hd0,0)指定了/boot所在的分區(qū),kernel一行用來指定Linux的內(nèi)核,及/所在的分區(qū)。

2.2內(nèi)核配置、編譯及裁減

內(nèi)核是Linux操作系統(tǒng)的核心,它負責管理系統(tǒng)進程和進程調(diào)度等大小事務(wù),決定著系統(tǒng)的性能和穩(wěn)定性,其它應(yīng)用程序都必須通過它才可以使用系統(tǒng)資源,獲取系統(tǒng)服務(wù)。由于嵌入式硬件資源的限制,我們需要對Linux內(nèi)核進行定制,精簡出符合實際需要的最小內(nèi)核文件。

首先在www.kernel.org上獲取相應(yīng)的內(nèi)核包,解壓后進行配置,然后根據(jù)目標板的硬件特點和實際需求配置內(nèi)核的編譯選項。這里我們選用基于X86 架構(gòu)的PC104主板,為了減低不必要的復雜性,內(nèi)核中取消kernel module支持,將有關(guān)CPU類型、內(nèi)存管理、doc驅(qū)動、ext2文件系統(tǒng)支持、串口支持等常用功能編譯進內(nèi)核,SCSI、Floppy之類的外設(shè)在我們的嵌入式系統(tǒng)中沒有使用,編譯時可去掉。這樣實際編譯出的內(nèi)核只有 747.6KB?;静襟E如下[2]:

#cd /usr/src/linux //內(nèi)核包所在目錄,這里下載的內(nèi)核包版本是2.4.34

#make mrproper //確保源代碼目錄下沒有不正確的.o文件以及文件的相互倚賴關(guān)系

#make menuconfig //圖形界面下編譯選項配置

#make dep //確保關(guān)鍵文件在正確位置

#make clean //確保所有有關(guān)文件都處于最新版本狀態(tài)

#make bzImage //編譯內(nèi)核

#cp /usr/src/linux/arch/i386/bzImage /mnt/cf/boot //將內(nèi)核文件拷貝至boot

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

Linux 的根文件系統(tǒng)以樹的結(jié)構(gòu)方式組織,主要由配置文件、設(shè)備文件、Linux基本命令、基本C語言庫組成。后兩者是主要的,也是占空間最大的,用 Busybox和uClibc的組合夠建這兩部分內(nèi)容,可以大大節(jié)省空間。根據(jù)根文件系統(tǒng)的基本結(jié)構(gòu),我們建立各個對應(yīng)的目錄:

#mkdir proc dev bin boot boot/grub etc src lib //由于是單用戶系統(tǒng),刪除了root、home、sbin目錄

#cp –r /dev/null /dev/mem … /mnt/cf/dev //拷貝所需設(shè)備文件

最后需要在etc目錄下建立幾個配置文件,分別是/etc/inittab、/etc/init.d/rcS、/etc/fstab,限于篇幅,僅介紹inittab文件,內(nèi)容如下[4]:

:: sysinit: /etc/init.s/rcS //指定初始化文件

:: askfirst: /bin/sh //啟動時執(zhí)行的shell

:: respawn: /bin/getty 38400 ttyS0 //打開一個串口,波特率為38400

:: restart: /bin/init //重啟時執(zhí)行進程init

:: ctrlaltdel: /bin/reboot //捕捉特定按鍵動作

:: shutdown: /bin/umount –a –r //關(guān)機時動作,卸載所有文件系統(tǒng)

[!--empirenews.page--]

3.嵌入式GUI研究

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

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

3.2嵌入式GUI基本性能需求

嵌入式GUI應(yīng)在基于操作系統(tǒng)的基礎(chǔ)上,為用戶提供豐富的圖形編程接口,使其能夠方便快速的編制界面友好的應(yīng)用程序。

GUI模塊的性能指標為單位時間實例化個數(shù),如下所列:

基本圖形繪制速度,即點、線、框、塊、圓、弧、橢圓等圖形單元繪制速度。在顯示設(shè)備可見范圍內(nèi)任意位置產(chǎn)生隨機大小的基本圖形。量化指標為單位時間內(nèi)繪制的個數(shù),并以較長測試時間中取得的單位時間平均值為準。

窗口創(chuàng)建速度。在顯示設(shè)備可見范圍內(nèi)任意位置創(chuàng)建隨機大小的窗口。量化指標為單位時間內(nèi)成功創(chuàng)建及繪制完畢的窗口個數(shù),并以較長測試時間中取單位時間平均值為準。

控件創(chuàng)建速度。在顯示設(shè)備可見范圍內(nèi)任意位置創(chuàng)建隨機大小、包含隨機內(nèi)容的窗口。量化指標為單位時間內(nèi)成功創(chuàng)建及繪制完畢的控件個數(shù),并以較長測試時間中取單位時間平均值為準。

事件驅(qū)動機制反應(yīng)速度。針對窗口及不同控件的典型事件及耗時事件,測試其完成時間。窗口及控件的大小、復雜程度隨機產(chǎn)生。量化指標為單位時間內(nèi)成功處理完畢的事件數(shù),并以較長測試時間中取單位時間平均值為準。

3.3輸入引擎移植

在基于Linux的嵌入式系統(tǒng)中,輸入設(shè)備可能只有觸摸屏和為數(shù)不多的按鍵,相對圖形引擎來說,輸入設(shè)備的處理沒有統(tǒng)一接口,在此情況下,提供一個抽象的輸入層,顯得尤為重要。

這里我們參考MiniGUI,并結(jié)合實際工程機械控制系統(tǒng)來實現(xiàn)輸入引擎的移植工作。MiniGUI簡單可分為三層,最頂層為API,即編程接口;中間層是 MiniGUI的核心層,其中包括了窗口系統(tǒng)必不可少的各個模塊,如消息事件處理模塊、圖形設(shè)備接口等;而最底層則是GAL和IAL。

該實際工程機械控制系統(tǒng)擬采用觸摸屏作為主要的輸入設(shè)備,需要編寫自己的輸入引擎。首先定義一個結(jié)構(gòu)體用來從觸摸屏設(shè)備(/dev/ts)中接受數(shù)據(jù),結(jié)構(gòu)體定義如下:

typedef struct

{

unsigned short b; //觸摸屏狀態(tài)(是否被點擊)

unsigned short x; //觸摸屏x坐標

unsigned short y; //觸摸屏y坐標

unsigned short pad; //32位填充域,無實際意義

} POS;

接下來定義輸入引擎的初始化函數(shù),該函數(shù)打開觸摸屏設(shè)備文件:/dev/ts,類似PC上的/dev/psaux設(shè)備。在成功打開設(shè)備文件后,該函數(shù)通過 mouse_getxy和mouse_getbutton等函數(shù)將獲得的狀態(tài)信息通過INPUT結(jié)構(gòu)體傳遞給GUI應(yīng)用程序。

BOOl InitPADInput (INPUT*input,const char*mdev,const char*mtype)

{

ts = open(“/dev/ts”, O_RDONLY);

if (ts<0) {

fprintf (stderr, “PAD:Can not open touch screen! ”);

return FALSE;

}

……

input->get_mouse_xy=mouse_getxy;

input->get_mouse_button=mouse_getbutton;

……

}

static void mouse_getxy(int* x, int* y)

{

*x=mousex;

*y=mousey;

}

static int mouse_getbutton(void)

{

return pos.b;

}

[!--empirenews.page--]

最后通過wait_event函數(shù)調(diào)用select系統(tǒng)調(diào)用,當select系統(tǒng)調(diào)用返回值大于0時,該函數(shù)檢查是否有可讀的數(shù)據(jù)等待讀取,如果是,則從該文件描述符中讀取觸摸屏數(shù)據(jù)。

限于篇幅原因,這里只列出了其中輸入引擎的移植代碼中較為關(guān)鍵的部分。代碼編寫完成后,還需要在“/src/ial/ial.c”中添加自定義的輸入引擎的入口項。

static INPUT inputs [] =

{ ……

#ifdef _PC104_IAL

{"pc104", InitYKInput, TermYKInput},

#endif

……

}

4.結(jié)束語

本文具體介紹了Linux作為嵌入式操作系統(tǒng)的實現(xiàn)方法,結(jié)合嵌入式GUI技術(shù),在PC104主板上利用Linux創(chuàng)建了一個擁有用戶界面的微型操作系統(tǒng),并通過對抽象層接口及相關(guān)技術(shù)的分析,自定義輸入引擎,實現(xiàn)了設(shè)備的可定制,在實際工程機械項目中有較大的實用價值和市場前景。

創(chuàng)新點:利用Linux在嵌入式主板上搭建了一個微型操作系統(tǒng),在此基礎(chǔ)上實現(xiàn)了針對觸摸屏的輸入引擎的移植

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉