Qt 4.5.3 + tslib1.4 移植
我的编译环境是: ubuntu 10.04+Qt 4.5.3+tslib1.4
需要的软件包: arm-linux-gcc-3.4.1.tar.bz2 (交叉编译)
qt-x11-opensource-src-4.5.3.tar.gz
qt-embedded-linux-opensource-src-4.5.3.tar.gz
tslib-1.4.tar.gz
一 . 配置交叉编译环境
下载 arm-linux-gcc-3.4.1.tar.bz2 地址: http://download.csdn.net/source/2889583
具体安装就不细讲了,可以参照 http://blog.csdn.net/qq419036154/archive/2010/12/05/6056803.aspx
我的交叉编译安装路径是 /usr/local/arm/3.4.1
二 . 安装 X11
# tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz
# cd qt-x11-opensource-src-4.5.3
# ./configure
# make
# make install
qt-x11 被安装到此目录下 /usr/local/Trolltech/Qt-4.5.3
编译 qvfb:
# cd qt-x11-opensource-src-4.5.3/tools/qvfb
# make
会在 qt-x11-opensource-src-4.5.3/bin 下生成 qvfb 文件
三 . 安装pc 机的 x86
解压:
# tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
更名:
# mv qt-embedded-linux-opensource-src-4.5.3 qt-embedded-linux-opensource-src-4.5.3-x86
编译:
# cd qt-embedded-linux-opensource-src-4.5.3-x86
# ./configure -embedded x86 -qvfb ( 千万不要落了- qvfb)
# make
# make install
qt-embedded 被安装在这个目录下 /usr/local/Trolltech/QtEmbedded-4.5.3
新建一个 setenv.sh 文件内容如下:
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbeded-4.5.3/lib:$LD_LIBRARY_PATH
将 qt-x11-opensource-src-4.5.2/bin 下生成的 qvfb 文件 copy 至 /usr/local/Trolltech/QtEmbedded-4.5.2-x86/bin 下
四 . 安装 tslib1.4
下载 tslib1.4 地址: http://download.csdn.net/source/2889575
1. 安装编译过程需用到的程序
sudo apt-get install autoconf( 或 autoconf2.13)
sudo apt-get install automake
sudo apt-get install libtool
2. 解压配置
$tar xzvf tslib-1.4.tar.gz
$./autogen.sh
$echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
$./configure --prefix=/usr/local/tslib --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no
其中ac_cv_func_malloc_0_nonnull=yes 是为解决如下编译错误设置的
ts_test.o: In function `main':
ts_test.c:(.text+0x1d8): undefined reference to `rpl_malloc'
fbutils.o: In function `open_framebuffer':
fbutils.c:(.text+0xa20): undefined reference to `rpl_malloc'
collect2: ld returned 1 exit status
参数--enable-inputapi=no. 是为了解决运行中提示 ts_open:Inappropriate ioctol for devic
它表示不使用ioctl来控制触摸屏。
3. 编译安装
$make
$sudo make install
在PC机/ usr/local/tslib/下生成触摸屏运行库。
五 . 安装 embedded-ARM
解压
$ tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
更名
$mv qt-embedded-linux-opensource-src-4.5.3 qt-embedded-linux-opensource-src-4.5.3-arm
进入
$cd qt-embedded-linux-opensource-src-4.5.3-arm
配置
$./configure -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib
(蓝色标注的路径最好不要改变)
$make
#make install
qt-embeded 被安装在这个目录下 /usr/local/Trolltech/QtEmbedded-4.5.3-arm
这里你可以新建一个 setenv.sh 文件
把下面复制到文件中
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH
六 . 移植到开发板
接下来通过 NFS 测试是否成功( NFS 安装请参照http://blog.csdn.net/qq419036154/archive/2010/12/05/6056824.aspx )
先创建 3 个 nfs 共享文件夹, /nfsboot , /fonts , /tslib
1. 准备库
sudo cp -a /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib/ /nfsboot/ 然后在 /usr/local/arm/3.4.1/arm-linux/lib 里面找这些库
librt.so , librt.so.1 , librt-2.3.2.so , libstdc++.so , libstdc++.so.6 ,libstdc++.so.6.0.1,libgcc_s.so.1
将上面这些库拷贝到 /nfsboot/lib
2. 准备字体
cp -arf /usr/local/Trolltect/QtEmbedded-4.5.3- arm/lib/fonts /fonts
3. 准备 tslib 文件
sudo cp -a /usr/local/tslib/* /tslib
4. 修改触摸屏配置文件
tslib 程序在运行的时候是通过打开 / 关闭 ts.conf 配置文件来配置相应的文件,根据我们板子的实际需求我们修改如下:
vi /usr/local/tslib/etc/ts.conf
我的设备驱动是 h3600 ,所以将 第 14 行 # module_raw h3600 前面的 # 和空格去掉
内容如下:
module_raw h3600
module pthres pmin=1 // Pthres : 为 Tslib 提供的触摸屏灵敏度门槛插件
module variance delta=30 // Variance: 为 Tslib 提供的触摸屏滤波算法插件
module dejitter delta=100 //Dejitter: 为 Tslib 提供的触摸屏去噪算法插件
module linear // Linear: 为 Tslib 提供的触摸屏坐标变换插件
去掉哪个主要取决于你的驱动类型
5. 挂载文件
接下来将开发板和主机通过网线连接起来,并在开发板里进行 mount , 先配置 PC 机上的 IP ,所配
置的 IP 要于开发板的 IP 在同一个网段,在开发板上建立目录 /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib 和 /usr/local/tslib
然后挂载:
(a). 挂载 Qt 库文件
mount -t nfs -o nolock -o tcp 192.168.0.16:/nfsboot /mnt
(b). 挂载字体 ( 在 lib 目录的 fonts )
因为 Qtopia 默认查找字体的目录是 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts ,所以我们要在开发板
上建立一条 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts 路径
#mkdir /usr/local && mkidr /usr/local/Trolltech &&mkdir /usr/local/Trolltech/QtEmbedded-4.5.3-arm &&/usr
/local/Trolltech/QtEmbedded-4.5.3-arm/lib
然后进行挂载:
mount -t nfs -o nolock -o tcp 192.168.0.16:/fonts /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib
(c). 挂载 tslib 库文件
在开发板上建立一条 /usr/local/tslib 路径
然后进行挂载:
mount -t nfs -o nolock -o tcp 192.168.0.16:/tslib /usr/local/tslib (挂载 tslib 库文件)
6. 设置环境变量
export T_ROOT=/usr/local/tslib // 开发板上 tslib 的路径
export TSLIB_CONSOLEDEVICE=none // 设定控制台设备为 none
export TSLIB_FBDEVICE=/dev/fb0 // 指定帧缓冲设备
export TSLIB_TSDEVICE=/dev/h3600_tsraw // 触摸屏设备节点文件
export QWS_MOUSE_PROTO=Tslib:/dev/h3600_tsraw
export LD_LIBRARY_PATH=$T_ROOT/lib:/mnt/lib // 库文件的路径
export TSLIB_CALIBFILE=/etc/pointercal // 指定触摸屏校准文件 pintercal 的存放位置
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf //tslib 配置文件的位置
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts // 触摸屏插件所在路径
export QWS_SIZE=640x480
在配置环境变量时要注意 TSLIB_TSDEVICE ,这取 决于具体的设备驱动了 , 事件驱动用 export TSLIB_TSDEVICE=/dev/input/event0 ,而 h3600 用如下配置 , export TSLIB_TSDEVICE=/dev/h3600_tsraw
7.校准触摸屏
触摸屏的前提是你的触摸屏驱动已经写好 , 并加载进了内核。 你可以测试有没有加载触摸屏驱动, /dev/touchscreen/0( 这是我板子上的触摸节点 )
# cat /dev/touchscreen/0
看终端有无信息显示,若有则表明正确
进行校准:
# cd /usr/local/tslib/bin
# ./ts_calibrate
如果正常,则会在校准文件会保存在 /etc/pointercal
接下来就可以运行 qt 程序了
#./dialog -qws &
如果出现问题一般都是缺少库文件或者环境变量没设置好