基于ARM&Linux圖形用戶(hù)界面開(kāi)發(fā)平臺(tái)的設(shè)計(jì)
摘要:本文首先介紹了自行研制的基于AT91RM9200的ARM板ARM221及顯示模塊的硬件電路設(shè)計(jì);其次描述了嵌入式Linux系統(tǒng)在目標(biāo)板ARM221上移植過(guò)程及界面相關(guān)硬件驅(qū)動(dòng)程序的開(kāi)發(fā);最后移植了開(kāi)源嵌入式界面系統(tǒng)MiniGUI到目標(biāo)板ARM221。
本文引用地址:http://www.ex-cimer.com/article/149195.htm1引言嵌入式產(chǎn)品如PDA、機(jī)頂盒、WAP手機(jī)等迅速地普及,給廣大的非專(zhuān)業(yè)用戶(hù)帶來(lái)了極大方便。同時(shí),這些產(chǎn)品都需要有高性能、穩(wěn)定可靠的GUI(圖形用戶(hù)界面)來(lái)提供支持。
因此,在嵌入式產(chǎn)品的開(kāi)發(fā)過(guò)程中,關(guān)鍵的一步就是嵌入式圖形用戶(hù)界面開(kāi)發(fā)平臺(tái)的設(shè)計(jì)。本文介紹了一種基于ARM、Linux及MiniGUI的圖形用戶(hù)界面系統(tǒng)開(kāi)發(fā)平臺(tái)的設(shè)計(jì)過(guò)程。
2硬件平臺(tái)設(shè)計(jì)及開(kāi)發(fā)環(huán)境的搭建2。1硬件平臺(tái)設(shè)計(jì)硬件平臺(tái)ARM221為自行研發(fā)的基于AT91RM9200處理器芯片的ARM板,其核心板結(jié)構(gòu)圖如圖1所示。AT91RM9200處理器是一款基于ARM920T內(nèi)核的高性?xún)r(jià)比、低功耗、32位的ARM芯片,時(shí)鐘頻率為180Mhz,運(yùn)算速度可達(dá)到200MIPS。AT91RM9200具有存儲(chǔ)器管理單元(MMU)、16KB的SRAM和128KB的ROM以及外部總線接口(EBI),支持SDRAM、靜態(tài)存儲(chǔ)器、BurstFlash、CompactFlash、SmartMedia以及NANDFlash,還集成了USB控制器、以太網(wǎng)控制器、RTC、SPI、I2C等豐富的外圍設(shè)備。AT91RM9200處理器內(nèi)部沒(méi)有集成LCD控制器,因而需要配備專(zhuān)用的顯示控制器,才能實(shí)現(xiàn)LCD顯示。
系統(tǒng)選用了一款應(yīng)用比較廣泛的LCD控制器S1D13506,它是EPSON大規(guī)模顯示控制器家族中較新的一款。它的輸出可以驅(qū)動(dòng)VGA顯示或者最大為800×600的點(diǎn)陣LCD顯示屏,可以靈活地對(duì)各種不同的顯示方式進(jìn)行設(shè)置,功能非常強(qiáng)大,可以和目前市場(chǎng)上流行的多種CPU總線兼容。另外顯示器選用了一款東華的320×240-16bppTFT-LCD。S1D13506的PC卡總線接口可以很方便地與AT91RM920相連,其與總線接口信號(hào)相關(guān)的信號(hào)為:數(shù)據(jù)總線DB[15:0]、地址總線AB[21:1]、片選信號(hào)CS、高位讀寫(xiě)信號(hào)WE1、寫(xiě)使能信號(hào)WE0、輸出讀使能命令信號(hào)RD、選擇讀寫(xiě)顯存還是讀寫(xiě)S1D13506寄存器信號(hào)M/R。
AT91RM9200的EBI總線接口用以確保多個(gè)外設(shè)與基于ARM器件的內(nèi)置控制存儲(chǔ)器之間實(shí)現(xiàn)正確數(shù)據(jù)傳輸。靜態(tài)存儲(chǔ)器、SDRAM及BurstFlash控制器均可作為EBI上的外部存儲(chǔ)控制器。EBI擁有8個(gè)片選信號(hào)(NCS[7:0]),可處理多達(dá)8個(gè)外設(shè)的數(shù)據(jù)傳輸;數(shù)據(jù)通過(guò)8位或者16位數(shù)據(jù)總線進(jìn)行傳輸;地址總線高達(dá)26位。在16位總線寬度下,EBI與顯示控制器相關(guān)的總線接口信號(hào)有:數(shù)據(jù)總線DB[15:0]、地址總線AB[21:1]、片選信號(hào)NCS2(對(duì)應(yīng)的地址為0x30000000)、使能高字節(jié)讀與寫(xiě)操作信號(hào)NWR1、使能字節(jié)或半字節(jié)讀/寫(xiě)信號(hào)NRD/NWR0及復(fù)位信號(hào)NRST。由上述接口信號(hào)的定義分析得出,S1D13506與AT91RM9200的總線連接圖如上圖2所示。
2。2交叉編譯環(huán)境的搭建移植Linux前,需要在宿主機(jī)上建立ARM-Linux的交叉編譯環(huán)境,社區(qū)的開(kāi)發(fā)者和一些芯片廠商已經(jīng)編譯出了常用體系結(jié)構(gòu)的工具鏈,安裝簡(jiǎn)單,使用這些工具鏈,可以大大減少工作量。針對(duì)移植的Linux內(nèi)核版本2。4。26,選用cross-2。95。3。tar。bz2工具鏈。另外,MiniGUI的交叉編譯,還需要一些字體、圖形等庫(kù)文件的支持,這些庫(kù)文件包括:zlib-1。2。3。tar。gz(該庫(kù)是后面幾個(gè)庫(kù)編譯的基礎(chǔ))、libpng-1。0。10rc1。tar。gz(png圖形)、jpegsrc。v6b。tar。gz(jpeg圖形)、freetype-1。3。1。tar。gz(TrueType字體)等,在進(jìn)行MiniGUI交叉編譯之前,需要把這些庫(kù)安裝到交叉編譯器中去。安裝過(guò)程比較簡(jiǎn)單,可查找相關(guān)資料。
3嵌入式Linux系統(tǒng)移植及相關(guān)驅(qū)動(dòng)程序開(kāi)發(fā)3。1嵌入式Linux系統(tǒng)移植移植嵌入式Linux系統(tǒng)是實(shí)現(xiàn)嵌入式系統(tǒng)圖形用戶(hù)界面的系統(tǒng)軟件核心。嵌入式Linux系統(tǒng)包括引導(dǎo)程序(Bootloader)、內(nèi)核(kernel)和根文件系統(tǒng)三個(gè)部分。嵌入式Linux移植到特定的硬件平臺(tái)上,一般需要以下五個(gè)步驟:①前期準(zhǔn)備包括從上下載嵌入式Linux的源碼包、搭建交叉編譯開(kāi)發(fā)環(huán)境、配置主機(jī)的開(kāi)發(fā)環(huán)境等;②配置Bootloader,并將其燒寫(xiě)到目標(biāo)平臺(tái)的Flash上,使其能正常的啟動(dòng)內(nèi)核;③配置和編譯Linux內(nèi)核,首先要對(duì)源碼進(jìn)行一定的修改,并將其移植到目標(biāo)平臺(tái)上,然后再根據(jù)自己的硬件資源進(jìn)行裁減,使內(nèi)核達(dá)到最優(yōu);④制作RAMDISK來(lái)掛接Linux的根文件系統(tǒng),并在RAMDISK上添加自己的應(yīng)用程序;⑤部署Linux系統(tǒng)使目標(biāo)板脫離交叉開(kāi)發(fā)環(huán)境,直接在目標(biāo)機(jī)上本地啟動(dòng)運(yùn)行。由于篇幅所限,關(guān)于Linux的具體移植過(guò)程將不做詳細(xì)介紹。
3。2相關(guān)設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)設(shè)備驅(qū)動(dòng)在Linux內(nèi)核中扮演著特殊的角色。它們是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定硬件響應(yīng)一個(gè)定義良好的內(nèi)部編程接口,這些接口完全隱藏了設(shè)備的工作細(xì)節(jié)。用戶(hù)的操作通過(guò)一組標(biāo)準(zhǔn)化的調(diào)用執(zhí)行,而這些調(diào)用獨(dú)立于特定的驅(qū)動(dòng)程序。Linux系統(tǒng)的設(shè)備分為字符、塊和網(wǎng)絡(luò)設(shè)備三種。字符設(shè)備是指存取時(shí)沒(méi)有緩存的設(shè)備。塊設(shè)備的讀寫(xiě)都有緩存來(lái)支持,并且塊設(shè)備必須能夠隨機(jī)存取。網(wǎng)絡(luò)設(shè)備在Linux里做專(zhuān)門(mén)的處理。
3。2。1LCD控制器S1D13506驅(qū)動(dòng)程序的開(kāi)發(fā)①幀緩沖區(qū)驅(qū)動(dòng)程序接口LCD控制器的功能就是產(chǎn)生驅(qū)動(dòng)信號(hào),進(jìn)而驅(qū)動(dòng)LCD。用戶(hù)只需要讀寫(xiě)一系列寄存器,就可以配置和顯示驅(qū)動(dòng),在配置LCD控制器中最重要的一步是幀緩沖區(qū)的指定。幀緩沖區(qū)為圖像硬件設(shè)備提供了一種抽象化處理,它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過(guò)定義明確的界面來(lái)訪問(wèn)圖像硬件設(shè)備。用戶(hù)程序只要與幀緩沖區(qū)驅(qū)動(dòng)程序抽象出來(lái)的接口打交道,就可以把要顯示的內(nèi)容從緩沖區(qū)中讀出,從而顯示到屏幕上。
在Framebuffer(幀緩沖)驅(qū)動(dòng)程序里最核心的結(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ū)的物理地址和長(zhǎng)度等。(2)structfb_var_screeninfo:記錄了楨緩沖區(qū)設(shè)備和指定顯示模式的可修改信息,主要包括屏幕的分辨率、顏色數(shù)和一些時(shí)序變量。實(shí)際的編程中,通過(guò)賦值來(lái)設(shè)置這兩個(gè)結(jié)構(gòu)體的相關(guān)參數(shù)。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論