深度解析 Qt Eembedded Linux移植要點
Qt Eembedded Linux移植要點是本文要介紹的內(nèi)容,不多說。先來看內(nèi)容。
1、安裝qt 對系統(tǒng)的要求
安裝 qt 的過程在不同的平臺上會有所不同,主要關(guān)嵌入式linux平臺上如何安裝。若需要提供對OpenSSL的支持,需要通過單獨安裝OpenSSL Toolkit,來獲得Secure Sockets Layer (SSL)。對于不同的平臺上,會有不同的要求。下面具體關(guān)注嵌入式linux的要求。如果要在qt上對QtWebKit模塊的支持,必須使用uClibc 0.9.29或者更高的版本,以對pthread的支持。在內(nèi)存方面的要求主要取決于體系架構(gòu)以及在編譯過程中使能的QT選項。下面是針不同平臺上qt支持庫的大小。
- Architecture
- Compiler
- QtCore
- QtGui
- QtNetwork
- QtWebKit
- Minimal
- Normal
- Minimal
- Normal
- Minimal
- Normal
- Minimal
- Normal
- linux-x86-g++
- GCC 4.2.4
- 1.7M
- 2.7M
- 3.3M
- 9.9M
- 653K
- 1.1M
- N/A
- 17M
- linux-arm-g++
- GCC 4.1.1
- 1.9M
- 3.2M
- 4.1M
- 11M
- 507K
- 1.0M
- N/A
- 17M
- linux-arm-g++ (thumb)
- GCC 4.1.1
- 1.7M
- 2.8M
- 4.0M
- 9.8M
- 409K
- 796K
- N/A
- 17M
- linux-mips-g++ (MIPS32)
- GCC 4.2.4
- 2.0M
- 3.2M
- 4.5M
- 12M
- 505K
- 1003K
- N/A
- 21M
2、qt-embedded-linux的安裝
(1)下載源碼包,解壓;
下載開源嵌入式版本的網(wǎng)址:http://download.qtsoftware.com/qt/source/常用官網(wǎng)
qt news:http://www.qtsoftware.com/about/news
qt downloads:http://www.qtsoftware.com/downloads
qt Quarterly:http://doc.trolltech.com/qq/
qt bugs:http://www.qtsoftware.com/developer/task-tracker
qt Supported Platforms:http://doc.trolltech.com/supported-platforms.html
qt Version Changes :http://www.qtsoftware.com/developer/changes
qt books: http://www.qtsoftware.com/developer/books
#p#
(2)建立支持庫
通過./configure來設(shè)置,主要配置可以通過--help來獲得幫助;之后用make命令,然后用make install 命令。將庫安裝到指定的路徑下面。其中的設(shè)置包括指定安裝的路徑;未配置的話,默認的路徑是/usr/local/Trolltech/QtEmbedded-4.5.0;
(3)設(shè)置環(huán)境變量
為了能夠使用Qt for Embedded Linux, 必須導(dǎo)出的PATH變量有qmake, moc 以及其他Qt for Embedded Linux 的工具, 以及LD_LIBRARY_PATH 必須導(dǎo)出。例如: PATH=/usr/local/Trolltech/QtEmbedded-4.5.0/bin:$PATH
- export PATH
(4)建立虛擬的frambuffer。
建立虛擬的frambuffer,需要安裝X11 Platforms .
3、嵌入式linux版本的qt環(huán)境變量
POINTERCAL_FILE:指定文件包含的數(shù)據(jù),用來校準觸摸筆設(shè)備。同時可以參考QWSCalibratedMouseHandler and Qt for Embedded Linux Pointer Handling.
QT_ONSCREEN_PAINT:如果定義了的話,可以用來將控件顯示在屏幕上。如果沒有其他控件在同一個區(qū)域的話,該設(shè)備響應(yīng)的區(qū)域?qū)⒉粫S著屏幕設(shè)備驅(qū)動的改變而改變。設(shè)置這個環(huán)境變量相當于在控件中應(yīng)用程序中設(shè)置Qt::WA_PaintOnScreen。
QWS_SW_CURSOR:如果定義了的話,軟件鼠標的光標將一直是可用的。(即使使用硬件加速驅(qū)動器來支持硬件光標)
QWS_DISPLAY:指定顯示形式和framebuffer.例如:export QWS_DISPLAY=[:]...[:]
QWS_SIZE:指定嵌入式linux qt窗口在屏幕上的大小。export QWS_SIZE=x
QWS_MOUSE_PROTO:指定觸摸設(shè)備。 export QWS_MOUSE_PROTO=[:],參數(shù)可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy. Tslib and keys。/dev/mouse 指的是鼠標設(shè)備, /dev/ts for touch panels。
QWS_KEYBOARD為輸入設(shè)備指定輸入設(shè)備和驅(qū)動。比如:export QWS_KEYBOARD=[:]。參數(shù)可以是SL5000, Yopy, VR41xx, TTY, USB and keys,指定的是一個標準設(shè)備。比如:/dev/tty0。
4、在嵌入式linux上運行qt程序
任何嵌入式linux應(yīng)用程序可以通過構(gòu)建QApplication 對象QApplication::GuiServer的格式,被構(gòu)建為服務(wù)server application?;蛘咄ㄟ^-qws命令行選項的方式。本文當假設(shè)用The Virtual Framebuffer 或者嵌入式linux的VNC協(xié)議,或者正確配置的Linux framebuffer。而且沒有服務(wù)進程在運行??梢允褂玫娘@示方式有:
- Using a Single Display
單顯示,運行這種顯示方式,改變Linux console,而且選擇一個應(yīng)用來運行。它要求在安裝過程中,環(huán)境變量是可用的。它要求指定的硬件設(shè)備驅(qū)動必須工作正常。比如:
- cd path/to/QtEmbedded/demos/textedit
- ./textedit -qws
- * Using Multiple Displays
linux同時也是支持多設(shè)備顯示。有兩種方式可以完成。當在運行多服務(wù)程序的時候,顯示屏的驅(qū)動(以及數(shù)量)必須為每一個程序進行指定。用-display命令行或者QWS_DISPLAY 來指定。比如:
- ./myfirstserverapplication -qws -display "transformed:rot90:1"
- ./mysecondserverapplication -qws -display "QVFb:2"
需要注意的是,必須指定一個顯示設(shè)備,在開始客戶端程序的時候。比如:./myclientapplication -display "QVFb:2"。在程序運行的時候,沒有辦法將一個客戶端程序從一個顯示移動到另一個顯示。用多顯示屏驅(qū)動,另一方面,應(yīng)用程序可以方便的在兩個不同類型的顯示屏之間切換。多屏幕顯示可以用-display命令行參數(shù)來指定 或者通過設(shè)置QWS_DISPLAY環(huán)境變量比如: ./myserverapplication -qws -display "Multi: QVFb:0 QVFb:1:offset=0,0 VNC:offset=640,0 :2"
- * Command Line Options
命令行選項
#p#
5、移植qt在嵌入式linux的應(yīng)用
移植過程和移植到x11平臺上的差別不大,遵守通用的移植過程。然后還包括幾個方面:字體庫移植,設(shè)置環(huán)境變量以及Framebuffer的支持。
字體庫的支持:是在qt的/lib/fonts目錄下。由于程序運行的時候是到這個文件夾下面來調(diào)用,因此需要將字體庫復(fù)制到這個目錄下。
環(huán)境變量的設(shè)置:通常情況下,與默認的環(huán)境變量不同,因此需要設(shè)置的有QWS_MOUSE_PROTO, QWS_KEYBOARD 以及 QWS_DISPLAY,用來指定鼠標、鍵盤以及顯示設(shè)備管理。在./configure 的時候需要加入的選項是-qt-kbd- and -qt-mouse- ,這樣才能使能這些設(shè)備驅(qū)動。但是還需要指定一個具體的設(shè)備,因此需要通過設(shè)置環(huán)境變量來完成。
framebuffer的支持:沒有特殊需求的情況下,要求在目標設(shè)備上使能framebuffer。Linux framebuffer在標準設(shè)置情況下是使能的。
6、嵌入式linuxqt 顯示管理
當需要顯示的時候,默認的動作是每一個嵌入式linux的客戶端將 需要的顯示的色調(diào)存放在內(nèi)存中,然后服務(wù)端將相關(guān)的數(shù)據(jù)從內(nèi)存在中送到顯示屏上。服務(wù)端用顯示屏驅(qū)動copy內(nèi)存中的內(nèi)容到顯示屏上顯示。顯示屏的驅(qū)動是在服務(wù)端應(yīng)用加載的時候運行的,用的是qt的插件系統(tǒng)。常用的方式有:可用的驅(qū)動;指定一個驅(qū)動;子驅(qū)動和多驅(qū)動。
Available Drivers可用的驅(qū)動
嵌入式linux的qt提供的驅(qū)動有Linux framebuffer, the virtual framebuffer, transformed screens, VNC servers and multi screens.通過運行./configure 選項來列出可用的驅(qū)動。默認的配置是不加速的Linux framebuffer driver (/dev/fb0) 被打開。其他的設(shè)備驅(qū)動也可以使能或者禁止,通過以下命令行。例如:./configure -qt-gfx-transformed
Specifying a Driver指定一個驅(qū)動
通過設(shè)置環(huán)境變量QWS_DISPLAY來指定一個設(shè)備。比如:格式如下的: export QWS_DISPLAY="[:]... [:]" 可以用的參數(shù)有:LinuxFb, QVFb, VNC, Transformed, Multi and keys identifying custom drivers。參數(shù)的被用來分辨用相同驅(qū)動的屏幕,而且使能多顯示。如下的表格用來指定驅(qū)動。環(huán)境變量的QWS_DISPLAY也可以通過-display來設(shè)置。比如: myApplication -display "[:]... [:]"
Subdrivers and Multiple Drivers子驅(qū)動和多驅(qū)動
VNC, Transformed 和Multi screen drivers取決于子驅(qū)動。通用的語法是: export QWS_DISPLAY="[:][:]...[ :]"至于子驅(qū)動,在每個子驅(qū)動之間加上空間是很重要的,在顯示設(shè)備前加上用來分開各個驅(qū)動和顯示設(shè)備。注意的是多屏幕驅(qū)動可以擁有多個子設(shè)備驅(qū)動,比如: export QWS_DISPLAY="Multi: QVFb:0 QVFb:offset=640,0:1 :2"注意的是:VNC screen driver在沒有指定屏幕驅(qū)動的情況下,默認的是虛擬屏幕驅(qū)動。在這種情況下,VNC driver有一些額外的參數(shù)來指定大小的位寬,參數(shù)有: * size= * depth= * mmHeight=
* mmWidth= 。例如:export QWS_DISPLAY="VNC:size=720x480:depth=32"。例如運行VNC屏幕驅(qū)動在Linux framebuffer driver的情況下,則:export QWS_DISPLAY="VNC:LinuxFb"
7、輸入設(shè)備鍵盤和鼠標的設(shè)置與管理
當運行一個Qt for Embedded Linux應(yīng)用程序的時候,不管是作為一個服務(wù)還是連接到另一個服務(wù),當它開始運行的時候,鼠標驅(qū)動被服務(wù)的應(yīng)用加載,用qt的plugin system。 在配置qt的時候通過選項來選擇支持的鼠標以及鍵盤設(shè)備,同時測試可用的設(shè)備。
通過 ./configure -help 查看可用的設(shè)備,配置時候默認的是PC的鼠標驅(qū)動。如果是自己添加一個設(shè)備,比如觸摸屏,則需要創(chuàng)建一個QWSCalibratedMouseHandler subclass來完成校驗功能。若提供的pc的鼠標被使能,Qt for Embedded Linux將會自動探測所支持的一種鼠標設(shè)備,這個設(shè)備是在/dev/psaux 或者 /dev/ttyS的一種。如果多種類型的都檢測到的話,則多種同時支持。需要注意的是,Qt for Embedded Linux 不支持自動檢測觸摸屏設(shè)備,因此需要指定使用的是哪一種。
要設(shè)置環(huán)境變量QWS_MOUSE_PROTO ,例如:export QWS_MOUSE_PROTO=[:],其中的參數(shù)可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy, Tslib and keys,driver specific options是一個標準設(shè)備,比如:dev/mouse,觸摸屏的是/dev/ts。多鼠標可以用下列方式來指定。
- export QWS_MOUSE_PROTO="[:]
- [:]
- [:]"
需要注意的是:Vr41xx 驅(qū)動有兩個可選的參數(shù):press=來定義單擊的時間(默認值是750);filter= 指定的是濾波長度。用于慮掉噪聲。比如:
- export QWS_MOUSE_PROTO="Vr41xx:press=500:/dev/misc/ts"
對于The Tslib Mouse Driver是一個繼承QWSCalibratedMouseHandler的類,在產(chǎn)生鼠標事件的時候,提供校驗和濾波的功能,用于使用同一的觸摸屏的庫。為了使用鼠標,必須編譯的選項是-qt-mouse-tslib。此外,tslib的頭文件和庫也要在build的環(huán)境變量中指出來。tslib 的源碼可以在http://tslib.berlios.de. 下載。通過-L 和-I 來指定庫和頭文件的位置。比如: ./configure -L -I 。 為了保證能夠使用鼠標,tslib必須正確的安裝在目標機上。包括提供一個ts.conf 配置文件和設(shè)置必要的環(huán)境變量。ts.conf包括兩行:內(nèi)容是: module_raw input
module linear在make Qt for Embedded Linux 時候特別指定tslib 鼠句柄,設(shè)置環(huán)境變量QWS_MOUSE_PROTO ??赡艹霈F(xiàn)問題的地方是設(shè)備文件和文件權(quán)限兩個方面。為了保證能夠正確的使用設(shè)備文件,第一步,先測試一下設(shè)備文件是否有輸出。比如:如果指定的鼠標設(shè)備驅(qū)動是:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,然后檢查設(shè)備的輸出,通過在控制臺上敲: cat /dev/input/mouse0 | hexdump,移動鼠標后,如果可以在控制臺上看見輸出,表示能夠正確的使用設(shè)備,否則要重新連接設(shè)備。
對于設(shè)備的讀寫權(quán)限,一般要求對設(shè)備至少有讀權(quán)限。比如:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,那么應(yīng)該將該設(shè)備的權(quán)限設(shè)置為chmod a+rw /dev/input/mouse0。如果設(shè)備文件符號連接到另一個文件的話,必須改變相關(guān)文件的屬性。
小結(jié):深度解析 Qt Eembedded Linux移植要點的內(nèi)容介紹完了,希望本文對你有所幫助。如果需要更多的資料,請參考編輯推薦。