當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于ARM&Linux圖形用戶界面開發(fā)平臺的設(shè)計

摘要:本文首先介紹了自行研制的基于AT91RM9200的ARM板ARM221及顯示模塊的硬件電路設(shè)計;其次描述了嵌入式Linux系統(tǒng)在目標(biāo)板ARM221上移植過程及界面相關(guān)硬件驅(qū)動程序的開發(fā);最后移植了開源嵌入式界面系統(tǒng)MiniGUI到目標(biāo)板ARM221。

1引言嵌入式產(chǎn)品如PDA、機(jī)頂盒、WAP手機(jī)等迅速地普及,給廣大的非專業(yè)用戶帶來了極大方便。同時,這些產(chǎn)品都需要有高性能、穩(wěn)定可靠的GUI(圖形用戶界面)來提供支持。

因此,在嵌入式產(chǎn)品的開發(fā)過程中,關(guān)鍵的一步就是嵌入式圖形用戶界面開發(fā)平臺的設(shè)計。本文介紹了一種基于ARM、Linux及MiniGUI的圖形用戶界面系統(tǒng)開發(fā)平臺的設(shè)計過程。

2硬件平臺設(shè)計及開發(fā)環(huán)境的搭建2。1硬件平臺設(shè)計硬件平臺ARM221為自行研發(fā)的基于AT91RM9200處理器芯片的ARM板,其核心板結(jié)構(gòu)圖如圖1所示。AT91RM9200處理器是一款基于ARM920T內(nèi)核的高性價比、低功耗、32位的ARM芯片,時鐘頻率為180Mhz,運算速度可達(dá)到200MIPS。AT91RM9200具有存儲器管理單元(MMU)、16KB的SRAM和128KB的ROM以及外部總線接口(EBI),支持SDRAM、靜態(tài)存儲器、BurstFlash、CompactFlash、SmartMedia以及NANDFlash,還集成了USB控制器、以太網(wǎng)控制器、RTC、SPI、I2C等豐富的外圍設(shè)備。AT91RM9200處理器內(nèi)部沒有集成LCD控制器,因而需要配備專用的顯示控制器,才能實現(xiàn)LCD顯示。

系統(tǒng)選用了一款應(yīng)用比較廣泛的LCD控制器S1D13506,它是EPSON大規(guī)模顯示控制器家族中較新的一款。它的輸出可以驅(qū)動VGA顯示或者最大為800×600的點陣LCD顯示屏,可以靈活地對各種不同的顯示方式進(jìn)行設(shè)置,功能非常強(qiáng)大,可以和目前市場上流行的多種CPU總線兼容。另外顯示器選用了一款東華的320×240-16bppTFT-LCD。S1D13506的PC卡總線接口可以很方便地與AT91RM920相連,其與總線接口信號相關(guān)的信號為:數(shù)據(jù)總線DB[15:0]、地址總線AB[21:1]、片選信號CS、高位讀寫信號WE1、寫使能信號WE0、輸出讀使能命令信號RD、選擇讀寫顯存還是讀寫S1D13506寄存器信號M/R。

AT91RM9200的EBI總線接口用以確保多個外設(shè)與基于ARM器件的內(nèi)置控制存儲器之間實現(xiàn)正確數(shù)據(jù)傳輸。靜態(tài)存儲器、SDRAM及BurstFlash控制器均可作為EBI上的外部存儲控制器。EBI擁有8個片選信號(NCS[7:0]),可處理多達(dá)8個外設(shè)的數(shù)據(jù)傳輸;數(shù)據(jù)通過8位或者16位數(shù)據(jù)總線進(jìn)行傳輸;地址總線高達(dá)26位。在16位總線寬度下,EBI與顯示控制器相關(guān)的總線接口信號有:數(shù)據(jù)總線DB[15:0]、地址總線AB[21:1]、片選信號NCS2(對應(yīng)的地址為0x30000000)、使能高字節(jié)讀與寫操作信號NWR1、使能字節(jié)或半字節(jié)讀/寫信號NRD/NWR0及復(fù)位信號NRST。由上述接口信號的定義分析得出,S1D13506與AT91RM9200的總線連接圖如上圖2所示。

2。2交叉編譯環(huán)境的搭建移植Linux前,需要在宿主機(jī)上建立ARM-Linux的交叉編譯環(huán)境,社區(qū)的開發(fā)者和一些芯片廠商已經(jīng)編譯出了常用體系結(jié)構(gòu)的工具鏈,安裝簡單,使用這些工具鏈,可以大大減少工作量。針對移植的Linux內(nèi)核版本2。4。26,選用cross-2。95。3。tar。bz2工具鏈。另外,MiniGUI的交叉編譯,還需要一些字體、圖形等庫文件的支持,這些庫文件包括:zlib-1。2。3。tar。gz(該庫是后面幾個庫編譯的基礎(chǔ))、libpng-1。0。10rc1。tar。gz(png圖形)、jpegsrc。v6b。tar。gz(jpeg圖形)、freetype-1。3。1。tar。gz(TrueType字體)等,在進(jìn)行MiniGUI交叉編譯之前,需要把這些庫安裝到交叉編譯器中去。安裝過程比較簡單,可查找相關(guān)資料。

3嵌入式Linux系統(tǒng)移植及相關(guān)驅(qū)動程序開發(fā)3。1嵌入式Linux系統(tǒng)移植移植嵌入式Linux系統(tǒng)是實現(xiàn)嵌入式系統(tǒng)圖形用戶界面的系統(tǒng)軟件核心。嵌入式Linux系統(tǒng)包括引導(dǎo)程序(Bootloader)、內(nèi)核(kernel)和根文件系統(tǒng)三個部分。嵌入式Linux移植到特定的硬件平臺上,一般需要以下五個步驟:①前期準(zhǔn)備包括從上下載嵌入式Linux的源碼包、搭建交叉編譯開發(fā)環(huán)境、配置主機(jī)的開發(fā)環(huán)境等;②配置Bootloader,并將其燒寫到目標(biāo)平臺的Flash上,使其能正常的啟動內(nèi)核;③配置和編譯Linux內(nèi)核,首先要對源碼進(jìn)行一定的修改,并將其移植到目標(biāo)平臺上,然后再根據(jù)自己的硬件資源進(jìn)行裁減,使內(nèi)核達(dá)到最優(yōu);④制作RAMDISK來掛接Linux的根文件系統(tǒng),并在RAMDISK上添加自己的應(yīng)用程序;⑤部署Linux系統(tǒng)使目標(biāo)板脫離交叉開發(fā)環(huán)境,直接在目標(biāo)機(jī)上本地啟動運行。由于篇幅所限,關(guān)于Linux的具體移植過程將不做詳細(xì)介紹。

3。2相關(guān)設(shè)備驅(qū)動的開發(fā)設(shè)備驅(qū)動在Linux內(nèi)核中扮演著特殊的角色。它們是一個個獨立的“黑盒子”,使某個特定硬件響應(yīng)一個定義良好的內(nèi)部編程接口,這些接口完全隱藏了設(shè)備的工作細(xì)節(jié)。用戶的操作通過一組標(biāo)準(zhǔn)化的調(diào)用執(zhí)行,而這些調(diào)用獨立于特定的驅(qū)動程序。Linux系統(tǒng)的設(shè)備分為字符、塊和網(wǎng)絡(luò)設(shè)備三種。字符設(shè)備是指存取時沒有緩存的設(shè)備。塊設(shè)備的讀寫都有緩存來支持,并且塊設(shè)備必須能夠隨機(jī)存取。網(wǎng)絡(luò)設(shè)備在Linux里做專門的處理。

3。2。1LCD控制器S1D13506驅(qū)動程序的開發(fā)①幀緩沖區(qū)驅(qū)動程序接口LCD控制器的功能就是產(chǎn)生驅(qū)動信號,進(jìn)而驅(qū)動LCD。用戶只需要讀寫一系列寄存器,就可以配置和顯示驅(qū)動,在配置LCD控制器中最重要的一步是幀緩沖區(qū)的指定。幀緩沖區(qū)為圖像硬件設(shè)備提供了一種抽象化處理,它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的界面來訪問圖像硬件設(shè)備。用戶程序只要與幀緩沖區(qū)驅(qū)動程序抽象出來的接口打交道,就可以把要顯示的內(nèi)容從緩沖區(qū)中讀出,從而顯示到屏幕上。

在Framebuffer(幀緩沖)驅(qū)動程序里最核心的結(jié)構(gòu)體是structfb_info,它記錄了當(dāng)前Framebuffer硬件設(shè)備的狀態(tài),其定義在Linux的include/linux/fb。h中,其中主要的結(jié)構(gòu)體有:(1)structfb_fix_screeninfo:定義了顯示設(shè)備自身的屬性,如屏幕緩沖區(qū)的物理地址和長度等。(2)structfb_var_screeninfo:記錄了楨緩沖區(qū)設(shè)備和指定顯示模式的可修改信息,主要包括屏幕的分辨率、顏色數(shù)和一些時序變量。實際的編程中,通過賦值來設(shè)置這兩個結(jié)構(gòu)體的相關(guān)參數(shù)。[!--empirenews.page--]

②LCD初始化Linux下驅(qū)動程序的入口是module_init(),因此初始化通過調(diào)用module_init(13506fb_init)函數(shù)來實現(xiàn)。13506fb_init初始化的部分代碼主要完成以下工作:⑴對LCD的背光燈進(jìn)行點亮。LCD顯示是一種被動顯示模式,它不能發(fā)光,只能依靠控制透射或反射周圍環(huán)境的光達(dá)到顯示目的,因此必須通過寫寄存器,實現(xiàn)背光燈的點亮。⑵本系統(tǒng)在13506。h頭文件里用了一個數(shù)組對寄存器的設(shè)置作了一個預(yù)定義,然后再初始化函數(shù)里利用兩個實際參數(shù)寫入,從而設(shè)定寄存器的值。寄存器設(shè)置的值為:static13506_REGSas1dregs[]={…{0x0032,0x27},{0x0038,0xEF},{0x0039,0x0}…}。其中數(shù)組里每個元素的第一個值代表寄存器的名稱,第二個值代表要設(shè)定的值。這里32h設(shè)置LCD顯示的水平象素值320;38h,39h分別設(shè)置成0xEF和0x0,即設(shè)置垂直象素值240。除了這三個寄存器外,34h和3Ah這兩個寄存器也會對分辨率有影響。

③LCD驅(qū)動“文件層-驅(qū)動層”函數(shù)的實現(xiàn)幀緩沖設(shè)備屬于字符設(shè)備,要實現(xiàn)“文件層-驅(qū)動層”接口的方式來對LCD進(jìn)行驅(qū)動就必須對file_operation數(shù)據(jù)結(jié)構(gòu)fb_ops進(jìn)行填充,并實現(xiàn)其對應(yīng)的成員函數(shù)。本系統(tǒng)移植的Linux下include/linux/fb。h中定義了幀緩沖區(qū)的文件操作結(jié)構(gòu)體structfb_ops。該結(jié)構(gòu)中的每一個字段都必須指向驅(qū)動程序中實現(xiàn)特定操作的函數(shù),對于不支持的操作字段可以置為NULL,或留到后續(xù)開發(fā)時添加。針對本系統(tǒng)的LCD,需要特定的操作成員函數(shù)如下:staticstructfb_ops13506fb_ops={owner:THIS_MODULE,fb_open:13506fb_open,fb_get_fix:13506fb_get_fix,fb_get_var:13506fb_get_var,fb_set_var:13506fb_set_var,fb_get_cmap:13506fb_get_cmap,fb_set_cmap:13506fb_set_cmap,fb_mmap:13506_mmap,};至此,LCD的驅(qū)動程序框架已完成,所剩工作就是把一些調(diào)用的函數(shù)寫完整,編寫好驅(qū)動程序后用arm-linux-gcc交叉編譯工具編譯驅(qū)動模塊,之后動態(tài)加載或靜態(tài)編譯進(jìn)內(nèi)核。

3。2。2USB驅(qū)動程序開發(fā)通用串行總線(USB)是一種外部總線結(jié)構(gòu),特點是接口統(tǒng)一、易于使用、方便擴(kuò)展、支持熱插拔(hotplug)和PNP(Plug-and-Play),簡化了計算機(jī)與不同類型外設(shè)間的連接,一經(jīng)推出就得到計算機(jī)外設(shè)硬件制造商的廣泛采用。Linux作為一個占有相當(dāng)市場份額的開源操作系統(tǒng),自2。2。18版本內(nèi)核以來,就加入了對USB的支持。

USB是一種分層總線結(jié)構(gòu),USB設(shè)備和主機(jī)之間的信息傳輸通過USB控制器實現(xiàn)。USB控制器的驅(qū)動分為三層,由底至上為:USB主控制器驅(qū)動、USB驅(qū)動和USB設(shè)備類驅(qū)動。

處于最底層USB主機(jī)控制器驅(qū)動(HCD)是USB主機(jī)直接與硬件交互的軟件模塊。Linux-2。4內(nèi)核中的USB支持2種主控制器接口:通用主控制器接口(UHCI)和開放控制器接口(OHCI)。主控制器驅(qū)動為上層提供統(tǒng)一的接口,屏蔽掉硬件的具體細(xì)節(jié)。具體實現(xiàn)的功能有:主控制器硬件初始化;為USBD層提供相應(yīng)的接口函數(shù);提供集線器設(shè)備配置、控制功能;完成4種數(shù)據(jù)傳輸類型。USB驅(qū)動(USBD)部分是整個USB主機(jī)驅(qū)動的核心,主要負(fù)責(zé)USB總線的管理、USB總線設(shè)備、USB總線帶寬管理、為USB設(shè)備驅(qū)動提供相關(guān)的接口、提供應(yīng)用程序訪問的USB系統(tǒng)的文件接口。

USB設(shè)備類驅(qū)動是最終與應(yīng)用程序交互的軟件模塊,主要為訪問特定的USB設(shè)備和應(yīng)用程序提供接口。Linux內(nèi)核支持的USB設(shè)備類有:USB打印機(jī)設(shè)備類、通信設(shè)備類、存儲設(shè)備類、語音設(shè)備類等。由于AT91RM9200的USBHOST控制器符合OHCI標(biāo)準(zhǔn),而系統(tǒng)所選擇的Linux內(nèi)核又對OHCI規(guī)范提供了模塊支持,因此使得開發(fā)工作相對簡單。開發(fā)目標(biāo)板所需的USB驅(qū)動程序時,只需對原Linux內(nèi)核驅(qū)動針對目標(biāo)板稍做修改即可。具體修改部分如下:①調(diào)整初始化地址。在/usb/usb-ochi。c中,使用板載起始地址(0x40700000)來初始化;②刪除PCI接口的處理代碼。在目標(biāo)板ARM221平臺上,USB主機(jī)控制器不包含PCI接口,故把/usb/usb-ochi。c中與PCI有關(guān)的代碼刪除;③修改HUB下端口數(shù)目。目標(biāo)板ARM221設(shè)有兩個USBHUB端口,用于鍵盤和鼠標(biāo)接口。故在/usb/usb-ochi。c中把HUB的下行端口數(shù)目從默認(rèn)值改為2。代碼修改之后,重新編譯、加載到內(nèi)核。

4MiniGUI在ARM221目標(biāo)板上的移植4。1MiniGUI的體系結(jié)構(gòu)MiniGUI是一種針對嵌入式設(shè)備的、跨操作系統(tǒng)的、輕量級的圖形用戶界面支持系統(tǒng)。從整體結(jié)構(gòu)上看,MiniGUI是分層設(shè)計的。在最底層,圖形抽象層(GAL:GraphicAbstractLayer)和輸入抽象層(IAL:InputAbstractLayer)提供底層圖形設(shè)備接口GDI(GDI:GraphicDeviceInterface)及輸入設(shè)備驅(qū)動,Pthread(POSIX標(biāo)準(zhǔn)線程)用于提供內(nèi)核級線程支持的C函數(shù)庫;中間層是MiniGUI的核心層,包括窗口系統(tǒng)必不可少的各個模塊;最頂層是應(yīng)用編程接口(API:ApplicationProgramingInterface)。MiniGUI的這種分層體系結(jié)構(gòu),大大方便了其在目標(biāo)系統(tǒng)上的移植。

4。2MiniGUI的移植移植MiniGUI主要是根據(jù)具體的硬件平臺定制或移植GAL引擎和IAL引擎,主要包括以下三個方面的工作。①GAL引擎的移植。MiniGUI可支持多種GAL引擎,包括對Framebuffer引擎的支持。因此,對于目標(biāo)板ARM221來說,顯示設(shè)備為LCD,相應(yīng)的驅(qū)動程序已開發(fā)完成,這里只需要在配置文件MiniGUI。cfg中修改gal_engine=fbcon即可。②IAL引擎的移植。MiniGUI可支持多種IAL引擎,包括USB鼠標(biāo)、鍵盤引及部分觸摸屏引擎。

對于目標(biāo)板ARM221來說,其軟硬件方面都已支持USB鼠標(biāo)、鍵盤,故這里只需在配置文件MiniGUI。cfg中修改ial_engine=console、mdev=/dev/PS2即可。③交叉編譯MiniGUI的庫文件、資源文件、應(yīng)用程序,并制作根文件系統(tǒng)下載到目標(biāo)板系統(tǒng)上運行。移植完成后,板載MiniGUI的運行情況如圖3。

5總結(jié)本文介紹了一種基于ARM&Linux的圖形用戶界面平臺的設(shè)計過程。實驗表明,該平臺運行穩(wěn)定可靠,在應(yīng)用系統(tǒng)中只需根據(jù)實際需求做上層應(yīng)用軟件實現(xiàn)即可。

本文作者創(chuàng)新點:從整體角度,對嵌入式GUI開發(fā)平臺進(jìn)行分析研究,選用了性能可靠的ARM、開放源代碼的Linux及輕型嵌入式GUI支持庫MiniGUI,完成了系統(tǒng)的軟硬件設(shè)計。[!--empirenews.page--]

本站聲明: 本文章由作者或相關(guān)機(jī)構(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)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

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

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(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 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(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ā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

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

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(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ù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

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