深度解析 Qt Eembedded Linux移植要點

Qt Eembedded Linux移植要點是本文要介紹的內容,不多說。先來看內容。

1、安裝qt 對系統的要求

安裝 qt 的過程在不同的平臺上會有所不同,主要關嵌入式linux平臺上如何安裝。若需要提供對OpenSSL的支持,需要通過單獨安裝OpenSSL Toolkit,來獲得Secure Sockets Layer (SSL)。對於不同的平臺上,會有不同的要求。下面具體關注嵌入式linux的要求。如果要在qt上對QtWebKit模塊的支持,必須使用uClibc 0.9.29或者更高的版本,以對pthread的支持。在內存方面的要求主要取決於體系架構以及在編譯過程中使能的QT選項。下面是針不同平臺上qt支持庫的大小。

  1. Architecture         
  2.  Compiler  
  3.  QtCore  
  4.  QtGui  
  5.  QtNetwork  
  6.  QtWebKit  
  7.    
  8. Minimal  
  9.  Normal  
  10.  Minimal  
  11.  Normal  
  12.  Minimal  
  13.  Normal  
  14.  Minimal  
  15.  Normal  
  16.    
  17. linux-x86-g++  
  18.  GCC 4.2.4  
  19.  1.7M  
  20.  2.7M  
  21.  3.3M  
  22.  9.9M  
  23.  653K  
  24.  1.1M  
  25.  N/A  
  26.  17M  
  27.    
  28. linux-arm-g++  
  29.  GCC 4.1.1  
  30.  1.9M  
  31.   3.2M  
  32.  4.1M  
  33.  11M  
  34.  507K  
  35.  1.0M  
  36.  N/A  
  37.  17M  
  38.    
  39. linux-arm-g++ (thumb)  
  40.  GCC 4.1.1  
  41.  1.7M  
  42.   2.8M  
  43.  4.0M  
  44.  9.8M  
  45.  409K  
  46.  796K  
  47.  N/A  
  48.  17M  
  49.  
  50. linux-mips-g++ (MIPS32)  
  51.  GCC 4.2.4  
  52.  2.0M  
  53.   3.2M   
  54.  4.5M  
  55.  12M  
  56.  505K  
  57.  1003K  
  58.  N/A  
  59.  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

  1. 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。而且沒有服務進程在運行。可以使用的顯示方式有:

  1. Using a Single Display 

單顯示,運行這種顯示方式,改變Linux console,而且選擇一個應用來運行。它要求在安裝過程中,環境變量是可用的。它要求指定的硬件設備驅動必須工作正常。比如:

  1. cd path/to/QtEmbedded/demos/textedit  
  2. ./textedit -qws  
  3. * Using Multiple Displays 

linux同時也是支持多設備顯示。有兩種方式可以完成。當在運行多服務程序的時候,顯示屏的驅動(以及數量)必須爲每一個程序進行指定。用-display命令行或者QWS_DISPLAY 來指定。比如:

  1. ./myfirstserverapplication -qws -display "transformed:rot90:1"  
  2. ./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"

  1. * 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。多鼠標可以用下列方式來指定。

  1. export QWS_MOUSE_PROTO="[:]  
  2.         [:]  
  3.         [:]" 

需要注意的是:Vr41xx 驅動有兩個可選的參數:press=來定義單擊的時間(默認值是750);filter= 指定的是濾波長度。用於慮掉噪聲。比如:

  1. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章