前提:已經(jīng)存在一個可以運行 ulinux 系統(tǒng)(內(nèi)核需要支持 unix socket 選項 )且支持 frambuffer 的 Blackfin 平臺環(huán)境 , 并且有了 blackfin 平臺編譯工具鏈。
1. 下載 QtEmbedde(Qt/E) 版本源碼,下載地址為 :ftp://ftp.trolltech.no/qt/source/qt-embedded-linux-opensource-src-4.5.1.tar.gz ;
2. 下載 Qt/E 支持 blackfin 的補丁,從 http://blackfin.uclinux.org/gf/ 下載 blackfin-linux-dist-2010R1-RC5.tar.bz2 的 uClinux 版本,因為該版本支持 QT ,解壓后在解壓目錄下 lib/qt-embedded/patches 下有相關(guān)的補。ㄈ绻械脑捯部蓮钠渌胤较拢
3. 解壓 qt-embedded-linux-opensource-src-4.5.1.tar.gz ,在解壓后的目錄下利用 patch 命令打上所有的補丁 :
patch -p1 -E < (補丁文件)
注意:由于補丁版本的 BUG 打完補丁后還需要修改觸壓目錄下 src/gui/embedded/qscreenlinuxfb_qws.cpp 文件 , 找到 412 行把 MAP_SHARED 改為 MAP_PRIVATE, 否則將無法正常顯示 ,修改如下:
改前:
data = (unsigned char *)-1;
if (d_ptr->fd != -1)
data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE,
MAP_SHARED , d_ptr->fd, 0);
改后:
data = (unsigned char *)-1;
if (d_ptr->fd != -1)
data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE,
MAP_PRIVATE , d_ptr->fd, 0);
如果要支持自己的觸摸屏需自更改相關(guān)鼠標(biāo)驅(qū)動文件代碼,文件所在目錄為 : src/gui/embedded, 最后采用修改 qmouselinuxtp_qws.cpp 和 qmouselinuxtp_qws.h 文件,添加自己的觸摸屏信息解碼相關(guān)代碼 ( 詳細(xì)的修改可以參考網(wǎng)上 ) ,最后需在配置選項增加 -qt-mouse-linuxtp 對 linuxtp 驅(qū)動的支持 .
4 .打完補丁和修改代碼后,可以進(jìn)行 Qt 的配置,可以通過 ./configure –help 查看相關(guān)的配置幫助,配置選項的意思可以在配置幫助查看,最后采用如下配置 :
./configure -prefix /usr/local/qtembedded -embedded bfin -xplatform qws/linux-bfin-fdpic-g++ -shared -confirm-license -opensource -verbose -little-endian -no-qt3support -depths 8,16,24,32 -no-webkit -nomake translations -no-cups -no-nis -no-dbus -qt-gfx-linuxfb -no-iconv -no-glib -no-rpath -no-feature-QWS_CURSOR -qt-mouse-linuxtp
注: -no-feature-QWS_CURSOR 表示不出現(xiàn)鼠標(biāo)指針 .
5. 配置成功后就可以進(jìn)行 make ;
6.make 成功后生成相關(guān)動態(tài)庫和實例,即基本完成移植;
7 .把實例放到平臺上運行 , 先要配置環(huán)境變量:
export QWS_MOUSE_PROTO=LinuxTP:( 觸摸屏設(shè)備節(jié)點 )
再把相關(guān)的動態(tài)庫復(fù)制到 blackfin 平臺的 /usr/lib 目錄下,同時也要把 font 下的 *qpf 文件復(fù)制到指定的目錄,復(fù)制到什么目錄可以運行下實例,出錯時會提示出目錄;
再運行 :
./ 實例 –qws &
加 & 表示后臺運行 , 如果沒出錯表示運行成功;
運行出錯分析提示 :
( 1 )直接 ./ 實例 運行出現(xiàn)如下錯誤:
QWSSocket::connectToLocalFile could not connect:: Bad file descriptor
QWSSocket::connectToLocalFile could not connect:: Bad file descriptor
QWSSocket::connectToLocalFile could not connect:: Bad file descriptor
No Qt for Embedded Linux server appears to be running.
If you want to run this program as a server,
add the "-qws" command-line option.
需加 -qws 運行即 ./ 實例 –qws 如果還出現(xiàn) socket 類的錯誤可能是內(nèi)核沒有增加 Unix socket 的支持;
( 2 )出現(xiàn)如下錯誤:
QLinuxFbScreen::connect: No such device
Error: failed to map framebuffer device to memory.
表示沒把 src/gui/embedded/qscreenlinuxfb_qws.cpp 文件進(jìn)行修改,
( 3 )出現(xiàn)如下錯誤碼:
QFontDatabase : Cannot find font directory /usr/local/qte-arm/lib/fonts - is Qt ?
Aborted
(注: /usr/local/qte-arm/lib/fonts 這個具體路徑視你安裝 qte 的路徑而定)
需要把編譯后在 lib 下的 fonts 復(fù)制到對應(yīng)提示的目錄。
( 4 )出現(xiàn)如下錯誤:
locking qpf: Permission denied
在復(fù)制 font 下的文件時只復(fù)制 *.qpf 文件即可,可能會支持不了中文顯示。
8 .最后可以在 $PATH 中增加 qt 編譯后的 bin 目錄,主要是用到 qmake ,這樣就有了 QT/blackfin 平臺的交叉編譯環(huán)境,可以編譯自己的 QT 代碼!
9 .完成。 |