a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux下Qt/Embedded的應用

嵌入式Linux下Qt/Embedded的應用

作者: 時間:2012-04-05 來源:網絡 收藏

引言

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

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


圖1 Qt/Embedded的實現結構

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

硬件平臺

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

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

Qt/Embedded底層支持分析

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

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

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

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

幀緩沖設備在驅動層所要做的工作僅僅是對Linux為幀緩沖的驅動層接口fb-info進行初始化,然后調用這兩個函數對其注冊或注銷。幀緩沖設備驅動層接口直接對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,/*關閉操作*/
};

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

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 下一頁

評論


相關推薦

技術專區

關閉