Qt Eembedded Linux移植要點是本文要介紹的內容,不多說。先來看內容。
1、安裝qt 對系統的要求
安裝 qt 的過程在不同的平臺上會有所不同,主要關嵌入式linux平臺上如何安裝。若需要提供對OpenSSL的支持,需要通過單獨安裝OpenSSL Toolkit,來獲得Secure Sockets Layer (SSL)。對於不同的平臺上,會有不同的要求。下面具體關注嵌入式linux的要求。如果要在qt上對QtWebKit模塊的支持,必須使用uClibc 0.9.29或者更高的版本,以對pthread的支持。在內存方面的要求主要取決於體系架構以及在編譯過程中使能的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)下載源碼包,解壓;
下載開源嵌入式版本的網址:http://download.qtsoftware.com/qt/source/常用官網
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
(2)建立支持庫
通過./configure來設置,主要配置可以通過--help來獲得幫助;之後用make命令,然後用make install 命令。將庫安裝到指定的路徑下面。其中的設置包括指定安裝的路徑;未配置的話,默認的路徑是/usr/local/Trolltech/QtEmbedded-4.5.0;
(3)設置環境變量
爲了能夠使用Qt for Embedded Linux, 必須導出的PATH變量有qmake, moc 以及其他Qt for Embedded Linux 的工具, 以及LD_LIBRARY_PATH 必須導出。例如: PATH=/usr/local/Trolltech/QtEmbedded-4.5.0/bin:$PATH
- export PATH
(4)建立虛擬的frambuffer。
建立虛擬的frambuffer,需要安裝X11 Platforms .
3、嵌入式linux版本的qt環境變量
POINTERCAL_FILE:指定文件包含的數據,用來校準觸摸筆設備。同時可以參考QWSCalibratedMouseHandler and Qt for Embedded Linux Pointer Handling.
QT_ONSCREEN_PAINT:如果定義了的話,可以用來將控件顯示在屏幕上。如果沒有其他控件在同一個區域的話,該設備響應的區域將不會隨着屏幕設備驅動的改變而改變。設置這個環境變量相當於在控件中應用程序中設置Qt::WA_PaintOnScreen。
QWS_SW_CURSOR:如果定義了的話,軟件鼠標的光標將一直是可用的。(即使使用硬件加速驅動器來支持硬件光標)
QWS_DISPLAY:指定顯示形式和framebuffer.例如:export QWS_DISPLAY=[:]...[:]
QWS_SIZE:指定嵌入式linux qt窗口在屏幕上的大小。export QWS_SIZE=x
QWS_MOUSE_PROTO:指定觸摸設備。 export QWS_MOUSE_PROTO=[:],參數可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy. Tslib and keys。/dev/mouse 指的是鼠標設備, /dev/ts for touch panels。
QWS_KEYBOARD爲輸入設備指定輸入設備和驅動。比如:export QWS_KEYBOARD=[:]。參數可以是SL5000, Yopy, VR41xx, TTY, USB and keys,指定的是一個標準設備。比如:/dev/tty0。
4、在嵌入式linux上運行qt程序
任何嵌入式linux應用程序可以通過構建QApplication 對象QApplication::GuiServer的格式,被構建爲服務server application。或者通過-qws命令行選項的方式。本文當假設用The Virtual Framebuffer 或者嵌入式linux的VNC協議,或者正確配置的Linux framebuffer。而且沒有服務進程在運行。可以使用的顯示方式有:
- Using a Single Display
單顯示,運行這種顯示方式,改變Linux console,而且選擇一個應用來運行。它要求在安裝過程中,環境變量是可用的。它要求指定的硬件設備驅動必須工作正常。比如:
- cd path/to/QtEmbedded/demos/textedit
- ./textedit -qws
- * Using Multiple Displays
linux同時也是支持多設備顯示。有兩種方式可以完成。當在運行多服務程序的時候,顯示屏的驅動(以及數量)必須爲每一個程序進行指定。用-display命令行或者QWS_DISPLAY 來指定。比如:
- ./myfirstserverapplication -qws -display "transformed:rot90:1"
- ./mysecondserverapplication -qws -display "QVFb:2"
需要注意的是,必須指定一個顯示設備,在開始客戶端程序的時候。比如:./myclientapplication -display "QVFb:2"。在程序運行的時候,沒有辦法將一個客戶端程序從一個顯示移動到另一個顯示。用多顯示屏驅動,另一方面,應用程序可以方便的在兩個不同類型的顯示屏之間切換。多屏幕顯示可以用-display命令行參數來指定 或者通過設置QWS_DISPLAY環境變量比如: ./myserverapplication -qws -display "Multi: QVFb:0 QVFb:1:offset=0,0 VNC:offset=640,0 :2"
- * Command Line Options
命令行選項
5、移植qt在嵌入式linux的應用
移植過程和移植到x11平臺上的差別不大,遵守通用的移植過程。然後還包括幾個方面:字體庫移植,設置環境變量以及Framebuffer的支持。
字體庫的支持:是在qt的/lib/fonts目錄下。由於程序運行的時候是到這個文件夾下面來調用,因此需要將字體庫複製到這個目錄下。
環境變量的設置:通常情況下,與默認的環境變量不同,因此需要設置的有QWS_MOUSE_PROTO, QWS_KEYBOARD 以及 QWS_DISPLAY,用來指定鼠標、鍵盤以及顯示設備管理。在./configure 的時候需要加入的選項是-qt-kbd- and -qt-mouse- ,這樣才能使能這些設備驅動。但是還需要指定一個具體的設備,因此需要通過設置環境變量來完成。
framebuffer的支持:沒有特殊需求的情況下,要求在目標設備上使能framebuffer。Linux framebuffer在標準設置情況下是使能的。
6、嵌入式linuxqt 顯示管理
當需要顯示的時候,默認的動作是每一個嵌入式linux的客戶端將 需要的顯示的色調存放在內存中,然後服務端將相關的數據從內存在中送到顯示屏上。服務端用顯示屏驅動copy內存中的內容到顯示屏上顯示。顯示屏的驅動是在服務端應用加載的時候運行的,用的是qt的插件系統。常用的方式有:可用的驅動;指定一個驅動;子驅動和多驅動。
Available Drivers可用的驅動
嵌入式linux的qt提供的驅動有Linux framebuffer, the virtual framebuffer, transformed screens, VNC servers and multi screens.通過運行./configure 選項來列出可用的驅動。默認的配置是不加速的Linux framebuffer driver (/dev/fb0) 被打開。其他的設備驅動也可以使能或者禁止,通過以下命令行。例如:./configure -qt-gfx-transformed
Specifying a Driver指定一個驅動
通過設置環境變量QWS_DISPLAY來指定一個設備。比如:格式如下的: export QWS_DISPLAY="[:]... [:]" 可以用的參數有:LinuxFb, QVFb, VNC, Transformed, Multi and keys identifying custom drivers。參數的被用來分辨用相同驅動的屏幕,而且使能多顯示。如下的表格用來指定驅動。環境變量的QWS_DISPLAY也可以通過-display來設置。比如: myApplication -display "[:]... [:]"
Subdrivers and Multiple Drivers子驅動和多驅動
VNC, Transformed 和Multi screen drivers取決於子驅動。通用的語法是: export QWS_DISPLAY="[:][:]...[ :]"至於子驅動,在每個子驅動之間加上空間是很重要的,在顯示設備前加上用來分開各個驅動和顯示設備。注意的是多屏幕驅動可以擁有多個子設備驅動,比如: export QWS_DISPLAY="Multi: QVFb:0 QVFb:offset=640,0:1 :2"注意的是:VNC screen driver在沒有指定屏幕驅動的情況下,默認的是虛擬屏幕驅動。在這種情況下,VNC driver有一些額外的參數來指定大小的位寬,參數有: * size= * depth= * mmHeight=
* mmWidth= 。例如:export QWS_DISPLAY="VNC:size=720x480:depth=32"。例如運行VNC屏幕驅動在Linux framebuffer driver的情況下,則:export QWS_DISPLAY="VNC:LinuxFb"
7、輸入設備鍵盤和鼠標的設置與管理
當運行一個Qt for Embedded Linux應用程序的時候,不管是作爲一個服務還是連接到另一個服務,當它開始運行的時候,鼠標驅動被服務的應用加載,用qt的plugin system。 在配置qt的時候通過選項來選擇支持的鼠標以及鍵盤設備,同時測試可用的設備。
通過 ./configure -help 查看可用的設備,配置時候默認的是PC的鼠標驅動。如果是自己添加一個設備,比如觸摸屏,則需要創建一個QWSCalibratedMouseHandler subclass來完成校驗功能。若提供的pc的鼠標被使能,Qt for Embedded Linux將會自動探測所支持的一種鼠標設備,這個設備是在/dev/psaux 或者 /dev/ttyS的一種。如果多種類型的都檢測到的話,則多種同時支持。需要注意的是,Qt for Embedded Linux 不支持自動檢測觸摸屏設備,因此需要指定使用的是哪一種。
要設置環境變量QWS_MOUSE_PROTO ,例如:export QWS_MOUSE_PROTO=[:],其中的參數可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy, Tslib and keys,driver specific options是一個標準設備,比如:dev/mouse,觸摸屏的是/dev/ts。多鼠標可以用下列方式來指定。
- export QWS_MOUSE_PROTO="[:]
- [:]
- [:]"
需要注意的是:Vr41xx 驅動有兩個可選的參數:press=來定義單擊的時間(默認值是750);filter= 指定的是濾波長度。用於慮掉噪聲。比如:
- export QWS_MOUSE_PROTO="Vr41xx:press=500:/dev/misc/ts"
對於The Tslib Mouse Driver是一個繼承QWSCalibratedMouseHandler的類,在產生鼠標事件的時候,提供校驗和濾波的功能,用於使用同一的觸摸屏的庫。爲了使用鼠標,必須編譯的選項是-qt-mouse-tslib。此外,tslib的頭文件和庫也要在build的環境變量中指出來。tslib 的源碼可以在http://tslib.berlios.de. 下載。通過-L 和-I 來指定庫和頭文件的位置。比如: ./configure -L -I 。 爲了保證能夠使用鼠標,tslib必須正確的安裝在目標機上。包括提供一個ts.conf 配置文件和設置必要的環境變量。ts.conf包括兩行:內容是: module_raw input
module linear在make Qt for Embedded Linux 時候特別指定tslib 鼠句柄,設置環境變量QWS_MOUSE_PROTO 。可能出現問題的地方是設備文件和文件權限兩個方面。爲了保證能夠正確的使用設備文件,第一步,先測試一下設備文件是否有輸出。比如:如果指定的鼠標設備驅動是:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,然後檢查設備的輸出,通過在控制檯上敲: cat /dev/input/mouse0 | hexdump,移動鼠標後,如果可以在控制檯上看見輸出,表示能夠正確的使用設備,否則要重新連接設備。
對於設備的讀寫權限,一般要求對設備至少有讀權限。比如:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,那麼應該將該設備的權限設置爲chmod a+rw /dev/input/mouse0。如果設備文件符號連接到另一個文件的話,必須改變相關文件的屬性。
小結:深度解析 Qt Eembedded Linux移植要點的內容介紹完了,希望本文對你有所幫助。如果需要更多的資料,請參考編輯推薦。
原文:http://mobile.51cto.com/symbian-272161.htm