移植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的内核中处理了该动态事件。

你可能感兴趣的:(AM335x,AM335x移植)