移植QT/E到ARM设备(一)
我本次移植已有的条件:fedora15,已搭建好交叉编译环境,nfs服务器,以及qt的安装:
移植开始:
一、编译QT/E环境(有的文件如果宿主机上没有的话自己建立文件夹):
#cd /home/sprife/qt4/for_arm/
首先将qt-embedded-linux-opensource-src-4.4.0.tar.bz2 和tslib-1.4.tar.bz2放到文件夹for_arm下面
#tar xjvf qt-embedded-linux-opensource-src-4.4.0.tar.bz2
#tar xjvf tslib-1.4.tar.bz2
修改脚本文件vi ./tslib-1.4/buid.sh
#############################################
#/bin/sh
export CC=arm-linux-gcc
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache
-prefix=$PWD/../tslib1.4-install
make
make install
#############################################
#./build.sh
#.cd ..
#cp -a tslib1.4-install/lib/* qt-embedded-linux-opensource-src-4.4.0/lib/
#cp -a tslib1.4-install/include/ts* qt-embedded-linux-opensource-src-4.4.0/include/
#cd qt-embedded-linux-opensource-src-4.4.0
#./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -little-endian -qt-mouse-linuxtp -qt-mouse-tslib -I/home/sprife/qt4/for_arm/tslib1.4-install/include -L/home/sprife/qt4/for_arm/tslib1.4-install/lib -prefix /mnt/nfs/Trolltech/qt-embedded-4.4.0
一定要注意:上面这些配置一定要看清楚了,因为已配置就是=是三四个小时(我相信你不会愿意做两次的)
需要注意:/home/sprife/qt4/for_arm/这个目录是你的解压文件位置,/mnt/nfs这个是你开发板的挂载目录,这个Trolltech/qt-embedded-4.4.0是你自己在你宿主机上的挂载目录下需要建立的文件夹。
################这里你会经过漫长的四个小时################################################
当配置完成后
#make
#make install
若上面的操作没有错误则进行下面的工作(若上面有错,一定要找出错误再做下面的操作,否则,你会浪费很多时间)
#cd /tmp/share 这是我宿主机的挂载目录,你可以根据自己的需要建立挂载目录
#mkdir Trolltech
#cd Trolltech
#mkdir qt-embedded-4.4.0
#cd qt-embedded-4.4.0
#########################################
#cp /home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0/
lib/ ./ -arf
#cp /home/sprife/qt4/for_arm/tslib1.4-install/etc/ ./ -arf
#cp /home/sprife/qt4/for_arm/tslib1.4-install/bin/ ./ -arf
//在minicom中挂载宿主机的文件系统
#mount -o nolock,rsize=4096,wsize=4096 192.168.1.12:/tmp/share /mnt/nfs
成功以后:
#cd /mnt/nfs/Trolltech/qt-embedded-4.4.0
#vi ep.sh
export QTDIR=$PWD
export LD_LIBRARY_PATH=$PWD/lib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_PLUGINDIR=$PWD/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=$PWD/etc/ts.conf
export POINTERCAL_FILE=$PWD/etc/ts-calib.conf
export QWS_MOUSE_PROTO=tslib:/dev/event0
export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf
export LANG=zh_CN
export QWS_DISPLAY="LinuxFb:mmWidth160:mmHeight120:0"
保存退出
#./ep.sh
执行触摸屏校准程序:
#./bin/ts_calibrate
这里会出现很多错误:
我遇到的:
错误一:
./bin/ts_calibrate: error while loading shared libraries: libts-0.0.so.0: cannot y
解决办法:
利用echo $LD_LIBRARY_PATH,发现环境变量不对。重新执行export LD_LIBRARY_PATH=$PWD/lib
再执行#./bin/ts_calibrate
错误二:
ts_open: No such file or directory
错误分析:首先你需要查看开发板的/dev下面的lcd设备结点,有的是event0有的是fb0,所以你需要重新
export TSLIB_TSDEVICE=/dev/event0 或者 export TSLIB_TSDEVICE=/dev/fb0(如果你要将这个修改到上面创建的ep.sh脚本下面)
那么最好再执行一下:
#env 查看export TSLIB_TSDEVICE=/dev/event0或者 export TSLIB_TSDEVICE=/dev/fb0是否有若没有最好使用export命令直接在命令行执行。
错误三:Couldnt open tslib config file: No such file or directory ts_config: Illegal seek
解决:#export TSLIB_CONFFILE=$PWD/etc/ts.conf
错误四:
Couldnt load module pthres
No raw modules loaded.
ts_config: Success
解决办法:#export TSLIB_PLUGINDIR=$PWD/lib/ts
我总共出现了上面几个错误:如果你出现不同的错误请参考:http://blog.csdn.net/xiaoyangger/article/details/5369961
完了之后执行:./bin/ts_calibrate
##############################输出信息#########################
xres = 320, yres = 240
selected device is not a touchscreen I understand
Took 10 samples...
Top left : X = -1073360184 Y = -1073618118
Took 10 samples...
Top right : X = -1073360184 Y = -1073618118
Took 10 samples...
Bot right : X = -1073360184 Y = -1073618118
Took 10 samples...
Bot left : X = -1073360184 Y = -1073618118
Took 10 samples...
Center : X = -1073360184 Y = -1073618118
1.558322 -0.006303 0.006302
1.568846 -0.004712 0.004710
Calibration constants: 102126 -413 412 102815 -308 308 65536
移植QT/E(二)到ARM板
出现上面QT/E(一)最后问题:
没有加载触屏驱动程序,我的微处理器是S3C2410,因而加载驱动时也要加载相对应的驱动:
insmod s3c2410_ts.ko显示结果如下:
s3c2410 TouchScreen successfully loaded
input: s3c2410 TouchScreen as /class/input/input0
驱动加载成功。。。。。。。
这里还需要之前所配置的环境变量:
export TSLIB_TSDEVICE=/dev/event0
export QWS_MOUSE_PROTO=tslib:/dev/event0
这里驱动可以提前加载进去内核中,这里就不会配置两次环境变量了
测试./bin/ts_cablirate
校准。。。。。。。。。
QT/E移植三:测试
QT/E移植三:测试
测试的时候会出现下列问题:
找出宿主机交叉编译目录下的下列文件,若没有,用更目录下的文件
解决方法:
find / name "libz.so.1"
find / name "librt.so.1"
find / name "libstdc++.so.6"
find / name "libgcc_s.so.1"
当前目录是/tmp/share/t../q../
cp /lib/libz.so.1 ./lib/
cp opt/usr/local/arm/3.4.1/arm-linux/lib/libgcc_s.so.1 ./lib
cp /opt/usr/local/arm/3.4.1/arm-linux/lib/librt.so.1 ./lib
cp /opt/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so.6 ./lib
./digitalclock -qws
结果是一个时钟
写一个程序编译然后挂载开发板端到直接运行程序:步骤如下
在/root/.bash_profile里声明
export QLINUXG=/home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0/mkspecs/qws/linux-arm-g++
将写的文件放到一个目录下:testqt-x11
#/home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0
/bin/qmake –project
////////////上面生成一个.pro文件
#/home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-4.4.0
/bin/qmake –spec $QLINUXG -o Makefile
/////////上面需要指明linux-arm-g++的具体位置,因为直接qmake不能找到它/////////////
#make
//////////////上面生成一个可在开发板上执行的二进制文件,可直接放到开发板上运行