1.编译、安装jpeg库
tar-xzvf/jpegsrc.v6b.tar.gz
cdjpeg-6b
./configure--enable-shared--enable-static--prefix=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux--build=i386--host=arm
修改生成的Makefile.如下:
CC=gcc改为:CC=arm-linux-gcc
AR=arrc改为:AR=arm-linux-arrc
AR2=ranlib改为:AR2=arm-linux-ranlib
最后是编译和安装,执行如下命令:
$make
$makeinstall-lib
2.编译、安装uuid库
tarxzfe2fsprogs-1.40.2.tar.gz
cde2fsprogs-1.40.2/
mkdirbuild
cdbuild
../configure--with-cc=arm-linux-gcc--with-linker=arm-linux-ld--enable-elf-shlibs--host=arm-prefix=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux
sudoapt-getinstalltexinfo(避免"make[2]:makeinfo:命令未找到"的报错)
最后是编译和安装,执行如下命令:
$make
$makeinstall-libs
3.编译、安装zlib库
tar-xzvfzlib-1.2.3.tar.gz
cdzlib-1.2.3
./configure--shared--prefix=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux
修改生成的Makefile.如下:
CC=arm-linux-gcc
……
LDSHARED=arm-linux-gcc-shared-Wl,-soname,libz.so.1
……
CPP=arm-linux-gcc-E
……
AR=arm-linux-arrc
……
RANLIB=arm-linux-ranlib
最后是编译和安装,执行如下命令:
$make
$makeinstall
4.编译、安装png库
tar-xjvflibpng-1.2.23.tar.bz2
cdlibpng-1.2.23/
复制Makefile:
cpscripts/makefile.linux./Makefile
修改Makefile,以下是修改后的结果,都加上了“arm-linux-”前缀:
AR_RC=arm-linux-arrc
CC=arm-linux-gcc
……
RANLIB=arm-linux-ranlib
……
prefix=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux
ZLIBLIB=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib
ZLIBINC=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include
最后执行以下命令编译、安装:
$make
$makeinstall
5.编译、安装触摸屏ts库
tar-xjvftslib-1.3.tar.bz2
cdtslib-1.3
sudoapt-getinstallautoconfautomakelibtool
./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=/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux
修改src/ts_read_raw.c文件:
chardefaulttseventtype="UCB1x00";
改为:
chardefaulttseventtype="H3600";
在plugins/Makefile里面找rpath,找到将其注释并加上绝对路径:
......
#LDFLAGS:=$(LDFLAGS)-rpath$(PLUGIN_DIR)
LDFLAGS:=$(LDFLAGS)-rpath`cd$(PLUGIN_DIR)&&pwd`
......
最后执行以下命令编译安装:
$make
$makeinstall
6.使用补丁修改、编译QT
cd/home/a1/jz2440/qtopia
tar-xzvfqtopia-free-src-2.2.0.tar.gz
cdqtopia-free-2.2.0
patch-p1<../qtopia-free-2.2.0_jz2440.patch
./configure-qte''-embedded-xplatformlinux-arm-g++-qconfigqpe-depths16,24-no-qvfb-system-jpeg-system-libpng-system-zlib-tslib-gif-thread-lts''-qpe''-xplatformlinux-arm-g++-editionpda-displaysize240x320''-qt2''-no-xft''-dqt''-no-xft''
./configure-qte"-embedded-xplatformlinux-arm-g++-qconfigqpe-depths16,24-no-qvfb-system-jpeg-system-libpng-system-zlib-tslib-gif-thread-lts-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib"-qpe"-xplatformlinux-arm-g++-editionpda-displaysize240x320-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib"-qt2"-no-xft"-dqt"-no-xft"
(注意要输入yes,接收qt的license)
或者这个配置:
./configure-qte"-embedded-xplatformlinux-arm-g++-qconfigqpe-no-qvfb-depths16,24-system-jpeg-system-libpng-system-zlib-tslib-gif-thread-no-xft-release-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib-lpng-lts-lz-luuid-ljpeg"-qpe"-xplatformlinux-arm-g++-editionpda-displaysize320x240-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib-prefix=/home/a1/jz2440/qtopia2.2.0"
最后执行以下命令编译、安装:
$make
$makeinstall
这将把所有必需的目录、文件复制到qtopia/image/opt/Qtopia目录下。编译时间有点久,耐心等待一会。
注意,实际操作时,会有提示报错信息:
make[5]:/home/a1/jz2440/qtopia/qtopia-free-2.2.0/qt2/bin/uic:Commandnotfound
make[5]:[../../../include/qtopia/private/passwordbase_p.h]Error127
应该先把X11的相关库文件安装一下(嵌入式linux应用开发完全手册,P501)
sudoapt-get-yinstallx-devlibx11-devxlibs-static-devx11proto-xext-devlibxext-devlibqt3-mt-dev
sudomkdir-p/usr/X11R6/include
sudocp-rf/usr/include/X11/usr/X11R6/include
然后安装kdevelop集成开发环境
sudoapt-getinstallkdevelop
sudoapt-getinstallkonsole
之后,先运行./configure,然后再make,就会产生uic.
重新./configure-qte"-embedded-xplatformlinux-arm-g++-qconfigqpe-depths16,24-no-qvfb-system-jpeg-system-libpng-system-zlib-tslib-gif-thread-lts-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib"-qpe"-xplatformlinux-arm-g++-editionpda-displaysize240x320-I/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/include-L/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib"-qt2"-no-xft"-dqt"-no-xft"
,重新make,出现错误:
warning:libuuid.so.1,neededbyqtopia/qtopia-free-2.2.0/qtopia/lib/libqpe.so,notfound(tryusing-rpathor-rpath-link)
。。。。。。
解决方法:
修改/home/a1/jz2440/qtopia/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-arm-g++/qmake.conf,将其内容"QMAKE_LIBS_QT =-lqte-lts"修改为:"QMAKE_LIBS_QT =-lqte-lts-lpng-lz-luuid-ljpeg",保存退出。
重新make,成功,再makeinstall.
7.构造根文件系统
在/home/a1/jz2440/rootfs/下创建好nfs_qtopia的根文件系统,创建好dev下的console和null设备。
1).复制Qtopia所依赖的库文件:
$cd/home/a1/jz2440/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/lib
$cplibpng.so/home/a1/jz2440/rootfs/nfs_qtopia/lib/-d
$cplibjpeg.so/home/a1/jz2440/rootfs/nfs_qtopia/lib/-d
$cplibuuid.so/home/a1/jz2440/rootfs/nfs_qtopia/lib/-d
$cplibz.so/home/a1/jz2440/rootfs/nfs_qtopia/lib/-d
2).安装触摸屏所需文件
执行以下命令重新安装:
$cd/home/a1/jz2440/qtopia/need_libs/tslib-1.3
$makeprefix=/home/a1/jz2440/rootfs/nfs_qtopia/usrinstall
(如果这一步有错误的话,可以把tslib-1.3目录删掉,重新解压缩,重新配置,重新make)
这样子,在/home/a1/jz2440/rootfs/nfs_qtopia/usr目录下,产生了和tslib有关的bin,etc,include,lib,share等文件夹和文件.
把nfs_qtopia/usr/etc/ts.conf文件复制到nfs_qtopia/etc目录下:
$cp/home/a1/jz2440/rootfs/nfs_qtopia/usr/etc/ts.conf/home/a1/jz2440/rootfs/nfs_qtopia/etc/
修改nfs_qtopia/etc/ts.conf文件,去掉这行(在前面加上#号即可):
moduledejitterxdelta=1ydelta=1pthreshold=3
修改好的nfs_qtopia/etc/ts.conf内容如下:
#modulemousebuts
modulevariancexlimit=50ylimit=50pthreshold=3
#moduledejitterxdelta=1ydelta=1pthreshold=3
modulelinear
3).复制字库
$cd/home/a1/jz2440/qtopia/qtopia-free-2.2.0/
如果没有目录qtopia/image/opt/Qtopia/lib的话,就创建这个lib目录
$mkdirqtopia/image/opt/Qtopia/lib/-p
$cp-rfqt2/lib/fontsqtopia/image/opt/Qtopia/lib/
4).将qtopia/image/opt/整个目录复制到开发板根目录上
$cd/home/a1/jz2440/qtopia/qtopia-free-2.2.0/
$cp-rfqtopia/image/opt/home/a1/jz2440/rootfs/nfs_qtopia
5).创建时区文件
直接使用主机中的时区文件:
$cd/home/a1/jz2440/rootfs/nfs_qtopia
$mkdir-pusr/share/zoneinfo/
$cp-rf/usr/share/zoneinfo/Americausr/share/zoneinfo/
$cp/usr/share/zoneinfo/zone.tabusr/share/zoneinfo/
6).建立一个脚本文件,用来较验触摸屏
在/home/a1/jz2440/rootfs/nfs_qtopia/bin下建立ts_cal.sh文件,内容如下:
#!/bin/sh
exportHOME=/root
exportQTDIR=/opt/Qtopia
exportQPEDIR=/opt/Qtopia
exportQWS_DISPLAY=LinuxFb:/dev/fb0
exportQWS_KEYBOARD="TTY:/dev/tty1"
#exportQWS_MOUSE_PROTO="USB:/dev/mouse0"
exportQWS_MOUSE_PROTO="TPanel:/dev/ts0"
exportPATH=$QPEDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
exportTSLIB_TSDEVICE=/dev/ts0
exportTSLIB_CONSOLEDEVICE=none
exportTSLIB_FBDEVICE=/dev/fb0
exportTSLIB_CONFFILE=/etc/ts.conf
exportTSLIB_PLUGINDIR=/usr/share/ts/plugins
exportTSLIB_TSEVENTTYPE="H3600"
/usr/bin/ts_calibrate
QT自带的触摸屏程序不好用,我们使用ts_calibrate来较验触摸屏。再次较验时,把/etc/pointercal删掉后重启单板就可以了。
这个脚本被下面说到的qpe.sh调用。
还要修改它的属性:
$chmod+x/home/a1/jz2440/rootfs/nfs_qtopia/bin/ts_cal.sh
7).建立一个脚本文件,用来运行qtopia
在单板根目录:/home/a1/jz2440/rootfs/nfs_qtopia/bin下建立qpe.sh文件,它用来设置环境变量、启动qtopia。内容如下:
#!/bin/sh
exportHOME=/root
exportQTDIR=/opt/Qtopia
exportQPEDIR=/opt/Qtopia
exportQWS_DISPLAY=LinuxFb:/dev/fb0
exportQWS_KEYBOARD="TTY:/dev/tty1"
#exportQWS_MOUSE_PROTO="USB:/dev/mouse0"
exportQWS_MOUSE_PROTO="TPanel:/dev/ts0"
exportPATH=$QPEDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
exportTSLIB_TSDEVICE=/dev/ts0
exportTSLIB_CONSOLEDEVICE=none
exportTSLIB_FBDEVICE=/dev/fb0
exportTSLIB_CONFFILE=/etc/ts.conf
exportTSLIB_PLUGINDIR=/usr/share/ts/plugins
exportTSLIB_TSEVENTTYPE="H3600"
if[!-e/etc/pointercal]
then
/bin/ts_cal.sh
fi
$QPEDIR/bin/qpe&
需要指出的是,qtopia启动后,它在$HOME目录下存放运行过程中产生的配置文件;其中文本编辑器、媒体播放器等程序使用的文件也存放在$HOME/Documents目录下,这意味着可以在这个目录下存放音乐、影视文件。
倒数2~5行用来判断是否存在触摸屏较验文件/etc/pointercal,如果不存在,则调用脚本文件/bin/ts_cal.sh进行较验。
最后一行启动qtopia。
注意:由于上面设置了“HOME=/root”,qtopia运行时产生的信息将保存在/root目录下。如果没有root目录的话,还要建立/root目录:
$mkdir-p/home/a1/jz2440/rootfs/nfs_qtopia/root
8).修改根文件系统的启动脚本
运行qtopia时,需要用到临时目录/tmp,为减少对Flash的擦写,在/tmp目录上挂接tmpfs文件系统:
如果没有tmp目录的话,需要先建立/tmp目录:
$mkdir-p/home/a1/jz2440/rootfs/nfs_qtopia/tmp
然后修改/home/a1/jz2440/rootfs/nfs_qtopia/etc/fstab文件,加入一行(如果已经有了,不用在修改):
tmpfs/tmptmpfsdefaults00
最后,修改启动脚本/home/a1/jz2440/rootfs/nfs_qtopia/etc/init.d/rcS,在最后加入以下一行:
/bin/qpe.sh&
还要修改它的属性:
$chmod+x/home/a1/jz2440/rootfs/nfs_qtopia/bin/qpe.sh
至此,/home/a1/jz2440/rootfs/目录的nfs_qtopia已经是一个完整的、可支持QT的根文件系统了。
配置宿主机的nfs:
sudogedit/etc/exports,添加:
/home/a1/jz2440/rootfs/nfs_qtopia(rw,sync)
保存,重启nfs服务:
sudo/etc/init.d/portmaprestart
sudo/etc/init.d/nfs-kernel-serverrestart
启动开发板,修改u-boot启动参数:
setbootargsnoinitrdroot=/dev/nfsrwnfsroot=192.168.1.19:/home/a1/jz2440/rootfs/nfs_qtopiaip=192.168.1.15init=linuxrcconsole=ttySAC0
重启开发板,出现tslib的触摸屏矫正,校正完毕后,串口终端提示:
couldnotopenforwriting`/root/Settings/locale_new.conf''
QCopChannel::send:MustconstructaQApplicationbeforeusingQCopChannel
解决方法:修改root目录的权限:chmod777/home/a1/jz2440/rootfs/nfs_qtopia/root-R
Couldnotreadcalibration:/etc/pointercal
tsdev(compaqtouchscreenemulation)isscheduledforremoval.
解决方法:修改etc目录的权限:chmod777/home/a1/jz2440/rootfs/nfs_qtopia/etc-R
kdevelop3的buildprojects需要用到tmake,tmake的安装如下:
在Linux命令模式下运行以下命令:
tarxfztmake-1.11.tar.gz
exportTMAKEDIR=$PWD/tmake-1.11
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportPATH=$TMAKEDIR/bin:$PATH
|
|