配色: 字号:
JZ2440移植Qte4.4.3
2020-08-14 | 阅:  转:  |  分享 
  
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

献花(0)
+1
(本文系摘摘摘丿丿...首藏)