基于A(yíng)RM&Linux圖形用戶(hù)界面開(kāi)發(fā)平臺的設計
摘要:本文首先介紹了自行研制的基于AT91RM9200的ARM板ARM221及顯示模塊的硬件電路設計;其次描述了嵌入式Linux系統在目標板ARM221上移植過(guò)程及界面相關(guān)硬件驅動(dòng)程序的開(kāi)發(fā);最后移植了開(kāi)源嵌入式界面系統MiniGUI到目標板ARM221。
本文引用地址:http://dyxdggzs.com/article/149195.htm1引言嵌入式產(chǎn)品如PDA、機頂盒、WAP手機等迅速地普及,給廣大的非專(zhuān)業(yè)用戶(hù)帶來(lái)了極大方便。同時(shí),這些產(chǎn)品都需要有高性能、穩定可靠的GUI(圖形用戶(hù)界面)來(lái)提供支持。
因此,在嵌入式產(chǎn)品的開(kāi)發(fā)過(guò)程中,關(guān)鍵的一步就是嵌入式圖形用戶(hù)界面開(kāi)發(fā)平臺的設計。本文介紹了一種基于ARM、Linux及MiniGUI的圖形用戶(hù)界面系統開(kāi)發(fā)平臺的設計過(guò)程。
2硬件平臺設計及開(kāi)發(fā)環(huán)境的搭建2。1硬件平臺設計硬件平臺ARM221為自行研發(fā)的基于AT91RM9200處理器芯片的ARM板,其核心板結構圖如圖1所示。AT91RM9200處理器是一款基于A(yíng)RM920T內核的高性?xún)r(jià)比、低功耗、32位的ARM芯片,時(shí)鐘頻率為180Mhz,運算速度可達到200MIPS。AT91RM9200具有存儲器管理單元(MMU)、16KB的SRAM和128KB的ROM以及外部總線(xiàn)接口(EBI),支持SDRAM、靜態(tài)存儲器、BurstFlash、CompactFlash、SmartMedia以及NANDFlash,還集成了USB控制器、以太網(wǎng)控制器、RTC、SPI、I2C等豐富的外圍設備。AT91RM9200處理器內部沒(méi)有集成LCD控制器,因而需要配備專(zhuān)用的顯示控制器,才能實(shí)現LCD顯示。

系統選用了一款應用比較廣泛的LCD控制器S1D13506,它是EPSON大規模顯示控制器家族中較新的一款。它的輸出可以驅動(dòng)VGA顯示或者最大為800×600的點(diǎn)陣LCD顯示屏,可以靈活地對各種不同的顯示方式進(jìn)行設置,功能非常強大,可以和目前市場(chǎng)上流行的多種CPU總線(xiàn)兼容。另外顯示器選用了一款東華的320×240-16bppTFT-LCD。S1D13506的PC卡總線(xiàn)接口可以很方便地與AT91RM920相連,其與總線(xiàn)接口信號相關(guān)的信號為:數據總線(xiàn)DB[15:0]、地址總線(xiàn)AB[21:1]、片選信號CS、高位讀寫(xiě)信號WE1、寫(xiě)使能信號WE0、輸出讀使能命令信號RD、選擇讀寫(xiě)顯存還是讀寫(xiě)S1D13506寄存器信號M/R。
AT91RM9200的EBI總線(xiàn)接口用以確保多個(gè)外設與基于A(yíng)RM器件的內置控制存儲器之間實(shí)現正確數據傳輸。靜態(tài)存儲器、SDRAM及BurstFlash控制器均可作為EBI上的外部存儲控制器。EBI擁有8個(gè)片選信號(NCS[7:0]),可處理多達8個(gè)外設的數據傳輸;數據通過(guò)8位或者16位數據總線(xiàn)進(jìn)行傳輸;地址總線(xiàn)高達26位。在16位總線(xiàn)寬度下,EBI與顯示控制器相關(guān)的總線(xiàn)接口信號有:數據總線(xiàn)DB[15:0]、地址總線(xiàn)AB[21:1]、片選信號NCS2(對應的地址為0x30000000)、使能高字節讀與寫(xiě)操作信號NWR1、使能字節或半字節讀/寫(xiě)信號NRD/NWR0及復位信號NRST。由上述接口信號的定義分析得出,S1D13506與AT91RM9200的總線(xiàn)連接圖如上圖2所示。

2。2交叉編譯環(huán)境的搭建移植Linux前,需要在宿主機上建立ARM-Linux的交叉編譯環(huán)境,社區的開(kāi)發(fā)者和一些芯片廠(chǎng)商已經(jīng)編譯出了常用體系結構的工具鏈,安裝簡(jiǎn)單,使用這些工具鏈,可以大大減少工作量。針對移植的Linux內核版本2。4。26,選用cross-2。95。3。tar。bz2工具鏈。另外,MiniGUI的交叉編譯,還需要一些字體、圖形等庫文件的支持,這些庫文件包括:zlib-1。2。3。tar。gz(該庫是后面幾個(gè)庫編譯的基礎)、libpng-1。0。10rc1。tar。gz(png圖形)、jpegsrc。v6b。tar。gz(jpeg圖形)、freetype-1。3。1。tar。gz(TrueType字體)等,在進(jìn)行MiniGUI交叉編譯之前,需要把這些庫安裝到交叉編譯器中去。安裝過(guò)程比較簡(jiǎn)單,可查找相關(guān)資料。
3嵌入式Linux系統移植及相關(guān)驅動(dòng)程序開(kāi)發(fā)3。1嵌入式Linux系統移植移植嵌入式Linux系統是實(shí)現嵌入式系統圖形用戶(hù)界面的系統軟件核心。嵌入式Linux系統包括引導程序(Bootloader)、內核(kernel)和根文件系統三個(gè)部分。嵌入式Linux移植到特定的硬件平臺上,一般需要以下五個(gè)步驟:①前期準備包括從上下載嵌入式Linux的源碼包、搭建交叉編譯開(kāi)發(fā)環(huán)境、配置主機的開(kāi)發(fā)環(huán)境等;②配置Bootloader,并將其燒寫(xiě)到目標平臺的Flash上,使其能正常的啟動(dòng)內核;③配置和編譯Linux內核,首先要對源碼進(jìn)行一定的修改,并將其移植到目標平臺上,然后再根據自己的硬件資源進(jìn)行裁減,使內核達到最優(yōu);④制作RAMDISK來(lái)掛接Linux的根文件系統,并在RAMDISK上添加自己的應用程序;⑤部署Linux系統使目標板脫離交叉開(kāi)發(fā)環(huán)境,直接在目標機上本地啟動(dòng)運行。由于篇幅所限,關(guān)于Linux的具體移植過(guò)程將不做詳細介紹。
3。2相關(guān)設備驅動(dòng)的開(kāi)發(fā)設備驅動(dòng)在Linux內核中扮演著(zhù)特殊的角色。它們是一個(gè)個(gè)獨立的“黑盒子”,使某個(gè)特定硬件響應一個(gè)定義良好的內部編程接口,這些接口完全隱藏了設備的工作細節。用戶(hù)的操作通過(guò)一組標準化的調用執行,而這些調用獨立于特定的驅動(dòng)程序。Linux系統的設備分為字符、塊和網(wǎng)絡(luò )設備三種。字符設備是指存取時(shí)沒(méi)有緩存的設備。塊設備的讀寫(xiě)都有緩存來(lái)支持,并且塊設備必須能夠隨機存取。網(wǎng)絡(luò )設備在Linux里做專(zhuān)門(mén)的處理。
3。2。1LCD控制器S1D13506驅動(dòng)程序的開(kāi)發(fā)①幀緩沖區驅動(dòng)程序接口LCD控制器的功能就是產(chǎn)生驅動(dòng)信號,進(jìn)而驅動(dòng)LCD。用戶(hù)只需要讀寫(xiě)一系列寄存器,就可以配置和顯示驅動(dòng),在配置LCD控制器中最重要的一步是幀緩沖區的指定。幀緩沖區為圖像硬件設備提供了一種抽象化處理,它代表了一些視頻硬件設備,允許應用軟件通過(guò)定義明確的界面來(lái)訪(fǎng)問(wèn)圖像硬件設備。用戶(hù)程序只要與幀緩沖區驅動(dòng)程序抽象出來(lái)的接口打交道,就可以把要顯示的內容從緩沖區中讀出,從而顯示到屏幕上。
在Framebuffer(幀緩沖)驅動(dòng)程序里最核心的結構體是structfb_info,它記錄了當前Framebuffer硬件設備的狀態(tài),其定義在Linux的include/linux/fb。h中,其中主要的結構體有:(1)structfb_fix_screeninfo:定義了顯示設備自身的屬性,如屏幕緩沖區的物理地址和長(cháng)度等。(2)structfb_var_screeninfo:記錄了楨緩沖區設備和指定顯示模式的可修改信息,主要包括屏幕的分辨率、顏色數和一些時(shí)序變量。實(shí)際的編程中,通過(guò)賦值來(lái)設置這兩個(gè)結構體的相關(guān)參數。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論