移植Qt

buildroot中配置

Target packages  --->
    Graphic libraries and applications (graphic/text)  ---> 
        [*] Qt  --->  
            [*]   Approve free license 
            Graphics drivers  --->
                [*] Linux Framebuffer (NEW) 
            Keyboard drivers  --->
                [*] linux input

配置完,進行編譯,最終生成的文件系統中usr/lib目錄下包含了Qt的動態庫。

環境變量

在etc/init.d目錄下的初始化腳本中設置Qt的環境變量

export QTDIR=/usr/lib
export LD_LIBRARY_PATH=$QTDIR/:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/fonts
export QWS_SIZE=640x480
export QWS_DISPLAY=LinuxFb:/dev/fb0

問題

這樣移植完之後,Qt程序可以正常運行,但是按鍵不管用。網上說需要顯示的指定keyboard的設備,但是我們需要熱插拔標準鍵盤就出現問題了。所以,Qt應該動態識別keyboard的設備。

其他項目中的Qt是可以實現動態識別的。通過對比,發現唯一的區別就是Qt的動態庫不同。一個是手動配置編譯的,一個是buildroot配置編譯的,難道buildroot會出錯。

手動編譯

cd output/build/qt-4.8.7目錄下

make clean
cd mkspecs
cp -rf linux-arm-gnueabi-g++ linux-arm-g++

vi linux-arm-g++/qmake.conf,修改交叉編譯工具

# modifications to g++.conf
QMAKE_CC                = arm-linux-gcc
QMAKE_CXX               = arm-linux-g++
QMAKE_LINK              = arm-linux-g++
QMAKE_LINK_SHLIB        = arm-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-ar cqs
QMAKE_OBJCOPY           = arm-linux-objcopy
QMAKE_STRIP             = arm-linux-strip

配置信息如下:

./configure \
 -prefix /usr/local/arm/qt4.8.7\
 -opensource \
 -confirm-license \
 -release -shared \
 -embedded arm \
 -xplatform linux-arm-g++ \
 -depths 16,18,24,32 \
 -fast \
 -optimized-qmake \
 -little-endian -host-little-endian \
 -qt-zlib \
 -no-openssl \
 -no-glib \
 -no-qt3support \
 -no-libtiff -no-libmng \
 -no-opengl \
 -no-mmx -no-sse -no-sse2 \
 -no-3dnow \
 -no-qvfb \
 -no-phonon \
 -no-nis \
 -no-opengl \
 -no-cups \
 -no-separate-debug-info \
 -nomake docs \
 -qt-kbd-linuxinput

編譯:

make 

利用新編譯出來的qmake來編譯自己的Qt程序。

通過arm-linux-readelf命令查看程序依賴的Qt動態庫

arm-linux-readelf -d my_qt

手動將這些動態庫拷貝到根文件系統下,替換掉之前buildroot編譯出來的動態庫。
還是使用之前的配置:

export QTDIR=/usr/lib
export LD_LIBRARY_PATH=$QTDIR/:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/fonts
export QWS_SIZE=640x480
export QWS_DISPLAY=LinuxFb:/dev/fb0

現在按鍵可以使用了,而且標準鍵盤也可以使用了。不需要顯示指定keyboard設備。
這兒的重點是配置時設置keyboard的輸入爲linuxinput。猜想Qt的內核中處理了該動態事件。

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