<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM&Linux圖形用戶(hù)界面開(kāi)發(fā)平臺的設計

基于A(yíng)RM&Linux圖形用戶(hù)界面開(kāi)發(fā)平臺的設計

作者: 時(shí)間:2012-04-20 來(lái)源:網(wǎng)絡(luò ) 收藏

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

③LCD驅動(dòng)“文件層-驅動(dòng)層”函數的實(shí)現幀緩沖設備屬于字符設備,要實(shí)現“文件層-驅動(dòng)層”接口的方式來(lái)對LCD進(jìn)行驅動(dòng)就必須對file_operation數據結構fb_ops進(jìn)行填充,并實(shí)現其對應的成員函數。本系統移植的Linux下include/linux/fb。h中定義了幀緩沖區的文件操作結構體structfb_ops。該結構中的每一個(gè)字段都必須指向驅動(dòng)程序中實(shí)現特定操作的函數,對于不支持的操作字段可以置為NULL,或留到后續開(kāi)發(fā)時(shí)添加。針對本系統的LCD,需要特定的操作成員函數如下: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的驅動(dòng)程序框架已完成,所剩工作就是把一些調用的函數寫(xiě)完整,編寫(xiě)好驅動(dòng)程序后用arm-linux-gcc交叉編譯工具編譯驅動(dòng)模塊,之后動(dòng)態(tài)加載或靜態(tài)編譯進(jìn)內核。

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

USB是一種分層總線(xiàn)結構,USB設備和主機之間的信息傳輸通過(guò)USB控制器實(shí)現。USB控制器的驅動(dòng)分為三層,由底至上為:USB主控制器驅動(dòng)、USB驅動(dòng)和USB設備類(lèi)驅動(dòng)。

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

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

4MiniGUI在A(yíng)RM221目標板上的移植4。1MiniGUI的體系結構MiniGUI是一種針對嵌入式設備的、跨操作系統的、輕量級的支持系統。從整體結構上看,MiniGUI是分層的。在最底層,抽象層(GAL:GraphicAbstractLayer)和輸入抽象層(IAL:InputAbstractLayer)提供底層設備接口GDI(GDI:GraphicDeviceInterface)及輸入設備驅動(dòng),Pthread(POSIX標準線(xiàn)程)用于提供內核級線(xiàn)程支持的C函數庫;中間層是MiniGUI的核心層,包括窗口系統必不可少的各個(gè)模塊;最頂層是應用編程接口(API:ApplicationProgramingInterface)。MiniGUI的這種分層體系結構,大大方便了其在目標系統上的移植。

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

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

5總結本文介紹了一種ARMLinux的圖形平臺的過(guò)程。實(shí)驗表明,該平臺運行穩定可靠,在應用系統中只需根據實(shí)際需求做上層應用軟件實(shí)現即可。

本文作者創(chuàng )新點(diǎn):從整體角度,對嵌入式GUI進(jìn)行分析研究,選用了性能可靠的ARM、開(kāi)放源代碼的Linux及輕型嵌入式GUI支持庫MiniGUI,完成了系統的軟硬件。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>