开发平台:ubuntu 8.04
目标平台:S3c2410
开发工具:arm 交叉工具链版本3.4.5
qt4版本:qt-embedded-linux-opensource-src-4.4.3.tar.gz(可到trolltech的ftp下载)
tslib 版本: tslib-1.4.tar.gz
源码版本:linux-2.6.29
一 触摸屏驱动移植
1. 复制s3c2410_ts.c到drivers/input/touchscreen
2. 修改 Kconfig,增加如下配置
config TOUCHSCREEN_S3C2410
tristate "Samsung S3C2410 touchscreen input driver"
depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
help
Say Y here if you have the s3c2410 touchscreen.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called s3c2410_ts.
3. 修改Makefile,增加如下
obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
4. make menuconfig
选中 Samsung S3C2410 touchscreen input driver
(并在内核查看是否支持LCD驱动、framebuffer
在界面中找到Graphics support
进入查看Support for framebuffer devices 和 S3C2410 LCD framebuffer support两个选项是否被选中,选中代表内核已支持。 否则选中两个选项 )
make zImage
cp arch/arm/boot/zImage /mnt/tftp
二 . 往文件系统中移植tslib
注释: 因为qt-embedded交叉编译时需要用到tslib的头文件和库,所以需要先交叉编译tslib
1 拷贝“项目代码\tslib源码”目录下的tslib-1.4.tar.gz到linux系统
2 # tar -zxvf tslib-1.4.tar.gz
# cd tslib-1.4
# ./autogen.sh
这一步需要安装一些工具,如:在ubantu系统下可以执行:sudo apt-get install automake 和 apt-get libtool
3 执行autogen.sh脚本所生成的Makefile文件
请打入以下命令:
echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH-linux.cache
./configure --host=arm-softfloat-linux-gnu --prefix=/home/linux/tslib --cache-file=$ARCH-linux.cache
--host是指你的交叉编译器的前最;例如:你的交叉编译器是arm-linux-gcc,则--host=arm-linux.如果是arm-softfloat-linux-gnu-gcc
则--host=arm-softfloat-linux-gnu
--prefix 是你执行make install 的时候编译后生成的可执行文件和库文件以及配置文所安装的目录;
configure文件下还有好多选项,你可以执行./configure --help 来进行选择其他项,不过在这里这些选项就够了。
4 #make
#make install
5 把指定安装目录下的mytslib的文件都copy到你所挂载的根文件下
#cp -rf /home/linux/tslib/* /rootfs/tslib
6 修改/rootfs/tslib下的etc目录中ts.conf文件
#vi ts.conf 将第二行的#module_raw input修改成module_raw input 注意一定要顶格写否则程序执行时会发生读取ts.conf错误
7 启动你的开发板
在终端上设置一下环境变量:
export TSLIB_ROOT=/mytslib
export TSLIB_TSDEVICE=/dev/input/event1
export LD_LIBRARY_PATH=/mytslib/lib:$LD_LIBRARY_PATH
export QWS_SIZE=320x240
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/mytslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/mytslib/etc/ts.conf
export POINTERCAL_FILE=/etc/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export TSLIB_TSEVENTTYYPE=H3600
为了实现Tslib的正确运行,需要对如下的Tslib的环境变量进行配置:
TSLIB_TSDEVICE //触摸屏设备文件名。
TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。
SLIB_CONFFILE //配置文件名。
TSLIB_PLUGINDIR //插件目录
TSLIB_CONSOLEDEVICE //控制台设备文件名
TSLIB_FBDEVICE //设备名
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。
为了不浪费时间我们把上面的这些设置写入一个脚本里面:参见5.6节
8 就可以运行mytslib/bin下的测试文件,如ts_calibrate校准程序。
注释:一定要把pointercal 备份一下
三 . Qt4 embedded 在S3C2410上的移植
1 将QtEmbeded 源码包解压后,把configsh文件考到解压后的目录中,可以根据实际情况修改configsh文件中第一行制定的安装目录
注释:安装的路径要先存在,如:/home/linux/qt4_port/qt/build
./configsh
(configsh脚本内容如下:
#!/bin/sh
./configure -prefix /home/linux/qt4_port/qt/build \
-release -shared \
-fast \
-pch \
-no-qt3support \
-qt-sql-sqlite \
-no-libtiff -no-libmng \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-freetype \
-no-openssl \
-nomake examples -nomake demos -nomake tools \
-optimized-qmake \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm \
-no-xinerama -no-xshape \
-no-separate-debug-info \
-xplatform qws/linux-arm-g++ \
-embedded arm \
-depths 16 \
-no-qvfb \
-qt-gfx-linuxfb \
-no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb \
-qt-kbd-usb \
-confirm-license \
-no-armfpa \
-little-endian \
-qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib
)
make && make install
cp /home/linux/qt4_port/qt/ /home/yw/ -fr
这个时候在指定的安装目录会出现如下目录:bin include lib mkspecs plugins translations
2 将开发机下的linux-2.6.29文件系统用nfs挂载到开发板上(开发板上/mnt/udisk目录下为可写),
mount –t nfs –o nolock 192.168.1.179:/home/yw /mnt/udisk
cd /mnt/appfs
mkdir -p qt/build/lib
mkdir - p qt/build/fonts
cp /mnt/udisk/qt/build/lib/libQt*.so /mnt/appfs/qt/build/lib
注释:只需拷贝.so结尾的库过去,其余如 .so.4 ,.so.4.4.3的建立软链接,以减小体积
例: ln libQTGui.so -s libQtGui.so.4
ln libQTGui.so -s libQtGui.so.4.4.3
cp /mnt/udisk/qt/build/lib/fonts/wenquanyi_160_75.qpf /mnt/appfs/qt/build/fonts/
注释:拷贝字体
3 在开发板上设置环境变量
export QTDIR=/mnt/appfs/qt/build
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH
export QT_QWS_FONTDIR=/mnt/appfs/qt/build/fonts
注释: 最好把这些环境变量设置直接加到 /etc/profile 里去
4 用qt编一个helloworld 程序进行测试。使用qmake、make对程序进行编译。
注意:一定要用qtembed安装目录下bin/下面的qmake
/home/linux/qt4_port/qt/build/bin/qmake –project
/home/linux/qt4_port/qt/build/bin/qmake
make
注释:若出现
/home/linux/qt4_port/qt/build/lib/libQtCore.so: undefined reference to `clock_gettime'
类似错误,请在Makefile 里的LIBS 后面加上 -lrt
5 最后运行helloworld程序
./helloworld -qws
注释:加 -qws,是因为字体
就可以看到界面了。