QT在JZ2440开发板上移植笔记
QT在JZ2440开发板上移植笔记:
为了和移植手册保持一致使用的gcc编译器版本降为3.4.5:
#if 0
tar xjf arm-linux-gcc-4.3.2.tar.bz2 //解压工具链
对于arm-linux-gcc-4.3.2解压出来得到usr目录,工具链在usr/local/arm/4.3.2/bin,
对于gcc-3.4.5解压出来得到gcc-3.4.5-glibc-2.3.6工具链目录在gcc-3.4.5-glibc-2.3.6/bin/
到解压出来的工具链目录下:
cd usr/local/arm/4.3.2/bin
pwd
/home/book/workspace/jz2440_project/system/usr/local/arm/4.3.2/bin
#else
为了移植QT文件系统,把gcc编译器版本降为3.4.5:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin
sudo vi /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"
#endif
① 编译、安装jpeg库jpegsrc.v6b.tar.gz:
tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared --enable-static --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --build=i386 --host=arm
vi Makefile,如下:
CC= gcc 改为:CC= arm-linux-gcc
AR= ar rc 改为:AR= arm-linux-ar rc
AR2= ranlib 改为:AR2= arm-linux-ranlib
make
make install-lib
将在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux中的include目录中生成一些头文件,在lib目录中生成一些jpeg库文件。
② 编译、安装uuid库:
tar xzf e2fsprogs-1.40.2.tar.gz
cd e2fsprogs-1.40.2/
mkdir build; cd build
../configure --with-cc=arm-linux-gcc --with-linker=arm-linux-ld --enable-elf-shlibs --host=arm -prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
make
make install-libs
最后一条命令在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/下的include、lib目录中安装一些头文件和库,比如uuid/uuid.h、libuuid.a、libuuid.so等
③ 编译、安装zlib库:
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3/
./configure --shared --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
修改生成的Makefile,以下是修改后的结果,都加上了“arm-linux-”前缀:
CC=arm-linux-gcc
……
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
……
CPP=arm-linux-gcc -E
……
AR=arm-linux-ar rc
……
RANLIB=arm-linux-ranlib
make
make install
④ 编译、安装png库:
tar xjf libpng-1.2.23.tar.bz2
cd libpng-1.2.23/
cp scripts/makefile.linux ./Makefile
修改Makefile,以下是修改后的结果,都加上了“arm-linux-”前缀:
AR_RC=arm-linux-ar rc
CC=arm-linux-gcc
……
RANLIB=arm-linux-ranlib
……
prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
make
make install
⑤ 编译、安装触摸屏ts库:
由于使用tslib-1.3按照文档修改依然出现“libtool:link: only absolute run-paths are allowed“的错误,决定使用tslib-1.4:
a、使用tslib-1.3:
tar xjf tslib-1.3.tar.bz2
cd tslib-1.3/
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
在make之前,为了支持触摸屏修改src/ts_read_raw.c文件,如下修改代码:
char *defaulttseventtype="UCB1x00";
改为:
char *defaulttseventtype="H3600";
为了防止出现“libtool:link: only absolute run-paths are allowed“的错误,在plugins/Makefile里面找rpath,找到将其注释并加上绝对路径:
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`
最后执行以下命令编译安装:
make
make install
b、使用tslib-1.4:
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
// 如果使用的arm-linux-gcc-4.3.2交叉编译工具要修改/usr/local/arm/4.3.2里
// 的宏EV_VERSION要修改input.h,再make,详情参见“触摸屏实验章节”
make
make install //安装到tmp目录
⑥ 使用补丁修改、编译QT:
tar xzf qtopia-free-src-2.2.0.tar.gz
cd qtopia-free-2.2.0
patch -p1 < ../qtopia-free-2.2.0_jz2440.patch
./configure -qte '-embedded -xplatform linux-arm-g++ -qconfig qpe -depths 16,24 -no-qvfb -system-jpeg -system-libpng -system-zlib -tslib -gif -thread -lts' -qpe '-xplatform linux-arm-g++ -edition pda -displaysize 240x320' -qt2 '-no-xft' -dqt '-no-xft'
make
make install
这将把所有必需的目录、文件复制到qtopia/image/opt/Qtopia目录下。
注意:./configure时,要输入“yes”并回车才能继续下去
⑦ 基于最小根文件系统制作QT文件系统:
使用fs_mini_mdev.tar.bz2:
sudo tar xjf fs_mini_mdev.tar.bz2
sudo cp -rf fs_mini_mdev fs_qtopia
sudo chown book:book fs_qtopis –R
a、复制Qtopia所依赖库文件
cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/
cp libpng.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libjpeg.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libuuid.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libz.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
b、拷贝触摸屏所需文件
到libts目录下:
cd /home/book/workspace/jz2440_project/system/deps/tslib/tmp
cp * /home/book/workspace/jz2440_project/fs_qtopia -rfd
修改开发板 /etc/ts.conf第1行(去掉#号和第一个空格):
# module_raw input
改为:
module_raw input
c、复制字库
cd /home/book/workspace/jz2440_project/system/deps/qtopia-free-2.2.0/
cp -rf qt2/lib/fonts qtopia/image/opt/Qtopia/lib/
d、将qtopia/image/opt/整个目录复制到开发板根目录上
cd /home/book/workspace/jz2440_project/system/deps/qtopia-free-2.2.0/
cp -rf qtopia/image/opt /home/book/workspace/jz2440_project/fs_qtopia
e、创建时区文件
直接使用主机中的时区文件:
cd /home/book/workspace/jz2440_project/fs_qtopia
mkdir -p usr/share/zoneinfo/
cp -rf /usr/share/zoneinfo/America usr/share/zoneinfo/
cp /usr/share/zoneinfo/zone.tab usr/share/zoneinfo/
f、建立一个脚本文件,用来较验触摸屏
在单板根目录/bin下建立ts_cal.sh文件,内容如下:
=====================================================================
#!/bin/sh
export HOME=/root
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_KEYBOARD="TTY:/dev/tty1"
#export QWS_MOUSE_PROTO="USB:/dev/mouse0"
export QWS_MOUSE_PROTO="TPanel:/dev/ts0"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
/usr/bin/ts_calibrate
=====================================================================
我们使用ts_calibrate来较验触摸屏,QT自带的触摸屏程序不好用。想再次较验时,把/etc/po删掉后重启单板就可以了。
这个脚本被下面说到的qpe.sh调用。
还要修改它的属性:
chmod +x bin/ts_cal.sh
g、建立一个脚本文件,用来运行qtopia
在单板根目录/bin下建立qpe.sh文件,它用来设置环境变量、启动qtopia。内容如下:
=====================================================================
#!/bin/sh
export HOME=/root
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_KEYBOARD="TTY:/dev/tty1"
#export QWS_MOUSE_PROTO="USB:/dev/mouse0"
export QWS_MOUSE_PROTO="TPanel:/dev/ts0"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
if [ ! -e /etc/pointercal ]
then
/bin/ts_cal.sh
fi
$QPEDIR/bin/qpe &
=====================================================================
h、修改根文件系统的启动脚本
修改/home/book/workspace/jz2440_project/fs_qtopia/etc/fstab文件,加入一行:
tmpfs /tmp tmpfs defaults 0 0
/home/book/workspace/jz2440_project/fs_qtopia/etc/init.d/rcS,在最后加入以下一行:
/bin/qpe.sh &
还要修改它的属性:
chmod +x bin/qpe.sh
⑧ 制作YAFFS2、JFFS2文件系统映象文件:
mkyaffs2image fs_qtopia fs_qtopia.yaffs2
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_qtopia -o fs_qtopia.jffs2
⑨ 烧写系统测试:
tftp 30000000 u-boot.bin; nand erase.part u-boot; nand write 30000000 u-boot
reset
tftp 30000000 uImage;nand erase.part kernel;nand write 30000000 kernel
tftp 30000000 fs_qtopia.yaffs2;nand erase.part rootfs;nand write.yaffs 30000000 260000 $filesize
或:
tftp 30000000 fs_qtopia.jffs2;nand erase.part rootfs;nand write.jffs2 30000000 260000 $filesize
设置参数:
set bootcmd 'nand read 30000000 kernel;bootm 30000000'
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
或:
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
set machid 16a
save
reset