<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux下Qt/Embedded的應用

          嵌入式Linux下Qt/Embedded的應用

          作者: 時間:2012-04-05 來源:網(wǎng)絡 收藏

          引言

          嵌入式操作系統(tǒng)是目前比較流行的操作系統(tǒng),以其小巧、操作簡單、便于攜帶而深受消費者的歡迎。在當今流行的嵌入式操作系統(tǒng)當中,Linux深受開發(fā)者的青睞。是Trolltech公司推出的一個多平臺的C++圖形用戶界面應用程序框架。它給應用程序開發(fā)者提供建立圖形用戶界面所需的所用功能。是完全面向對象的,很容易擴展,并且允許真正的組件編程。

          是由Trolltech這家公司所開發(fā)的一套開源的C++圖形用戶界面庫。在XWindow上KDE桌面環(huán)境就是用這套圖形界面庫所建立。它采用 C++的語法,有各式各樣的圖形對象可供使用,采用signal/slot信號的事件信號傳遞機制。Qt/則是在嵌入式環(huán)境下所使用的 Qt。目前市面上所有上市的LinuxPDA都是采用Qt/作為圖形接口的函數(shù)庫。Qt/的特性是可以直接在 Framebuffer上顯示圖形接口,反應的速度更快了,這對硬件與容量都有限制的嵌入式環(huán)境來說非常重要。圖1為Qt/Embedded的實現(xiàn)結構。


          圖1 Qt/Embedded的實現(xiàn)結構

          筆者參與了一個基于ARM9的下的GUI的移植及應用程序開發(fā),所用處理器是三星公司的S3C24l0X,操作系統(tǒng)為Linux2.4.18,應用GNUGCC交叉編譯器。

          硬件平臺

          S3C2410X是三星公司的基于ARM920T的S3C2410X芯片。S3C2410X集成了一個LCD控制器(支持STN和TFT帶有觸摸屏的液晶顯示屏)、SDRAM、觸摸屏、USB、SPI、SD和MMC等控制器,4個具有PWM功能的計時器和1個內(nèi)部時鐘,8通道的10位ADC,117位通用 I/O口和24位外部中斷源,8通道10位AD控制器,處理器工作頻率最高達到203MHz。

          S3C2410中的LCD控制器可支持單色/彩色LCD顯示器。支持彩色TFT時,可提供4/8/12/16位顏色模式,其中16位顏色模式下可以顯示 65536種顏色。配置LCD控制器重要的一步是指定顯示緩沖區(qū),顯示的內(nèi)容就是從緩沖區(qū)中讀出的,其大小由屏幕分辨率和顯示顏色數(shù)決定。文中采用的是臺灣元太V16C6448ACTFT顯示模塊,在640*480分辨率下可提供16位彩色顯示。

          Qt/Embedded底層支持分析

          Qt/Embedded的底層圖形引擎是基于(Frame Buffer),是出現(xiàn)在2.2.x以上內(nèi)核的版本當中的一種驅動程序接口。這種接口采用mmap系統(tǒng)調用,將顯示設備抽象為區(qū)。用戶可以將它看成是顯示內(nèi)存的一個映像,將其映射到進程地址空間以后,就可以直接進行讀寫操作了,而寫操作可以立即反映在屏幕上。幀緩沖驅動程序是最重要的驅動程序之一,正是這個驅動程序才能使系統(tǒng)屏幕顯示內(nèi)容,其實現(xiàn)分為兩個方面:一是對LCD及其相關部件的初始化,包括畫面緩沖區(qū)的創(chuàng)建和對DMA通道的設置;二是對畫面緩沖區(qū)的讀寫,具體到代碼為read,write等系統(tǒng)調用接口。

          幀緩沖是Linux為圖形設備提供的一個抽象接口,它允許上層應用程序在圖形模式下直接對顯示緩沖區(qū)進行讀寫操作。這種操作是抽象的、統(tǒng)一的。應用程序不必關心物理顯存的位置、換頁機制等等具體細節(jié)。這些都是由幀緩沖設備驅動來完成的。幀緩沖設備對應的設備文件通常為/dev/fb031,Linux的幀緩沖設備的驅動主要基于兩個文件:

          1)linux/include/linux/fb.h;
          2)linux/drivers/video/fbmem.c。

          幀緩沖設備屬于字符設備,采用“文件層-驅動層”的接口方式。

          幀緩沖設備在驅動層所要做的工作僅僅是對Linux為幀緩沖的驅動層接口fb-info進行初始化,然后調用這兩個函數(shù)對其注冊或注銷。幀緩沖設備驅動層接口直接對LCD設備硬件進行操作,而fbmem.c可以記錄和管理多個底層設備驅動。

          文件fbmem.c中定義了幀緩沖設備的文件層接口file-operations結構體,它對應用程序可見,該結構體的定義如下:

          staticstructfile-operationsfb-fops=
           {
             owner:THIS-MODULE,
             read:fb-read,/*讀操作*/
             write:fb-write,/*寫操作*/
             ioctl:fb-ioctl,/*控制操作*/
             mmap:fb-mmap,/*映射操作*/
             open:fb-open,/*打開操作*/
             release:fb-release,/*關閉操作*/
          };

          在這個結構體中功能函數(shù)open()和release()不需要底層的支持,而read(),write(),mmap()則需要調用fb-get- fix(),fb-get-var(),fb-set-var()(這些函數(shù)位于結構體fb-info中指針fbops指向的結構體變量中)等與底層 LCD硬件相關的函數(shù)的支持。另一個功能函數(shù)是ioctl(),ioctl()是設備驅動程序中對設備的I/O通道進行管理的函數(shù),應用程序應用 ioctl()系統(tǒng)調用來調用fb-get-fix(),fb-get-var(),fb-set-var()等方法來獲得和設置結構體fb-info中 var,fix和cmap等變量的信息。在fbmem.c中給出了ioctl()命令和fb-info中結構體fb-ops的成員函數(shù)的對應關系如下:

          FBIOGET-VSCREENINFOfb-get-var
          FBIOPUT-VSCREENINFOfb-set-var
          FBIOGET-FSCREENINFOfb-get-fix
          FBIOPUTCMAPfb-set-cmap
          FBIOGETCMAPfb-get-cmap
          FBIOPAN-DISPLAYfb-pan–display

          linux相關文章:linux教程


          c++相關文章:c++教程



          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();