QT在JZ2440开发板上移植

为了和移植手册保持一致使用的gcc编译器版本降为3.4.5:

    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

    为了移植QT文件系统,把gcc编译器版本降为3.4.5:

export命令用于设置或显示环境变量,在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作

    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"

① 编译、安装jpeg库jpegsrc.v6b.tar.gz:

解压

tar xzvf jpegsrc.v6b.tar.gz

切换到 jpeg-6b目录下

cd jpeg-6b/

配置

这里 --enable-shared --enable-static

如果你要编译一个库的源代码,可以把它编译成静态库,也可以把它编译成动态库。如果你想编译成动态库,就用 --enable-shared参数;如果你想编译成静态库,就用--enable-static参数
不指定prefix,执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr /local/share
--host=HOST
指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--host=arm-linux 运行环境 (交叉编译成arm)

--build=BUILD
指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.
build就是你正在使用的机器,host就是你编译好的程序可以运行的平台,target就是你编译的程序可以处理的平台.这个 build和host比较好理解,但是target就不好办了,到底什么意思呢?一般来说,我们平时所说的交差编译用不到他target的,比如. /configure --build=i386-linux,--host=arm-linux就可以了,在386的平台上编译可以运行在arm板的程序.但是,一般我们都是编译程序,而不是编译工具,如果我们编译工具,比如gcc,这个target就有用了.如果我们需要在一个我们的机器上为arm开发板编译一个可以处理 mips程序的gcc,那么target就是mips了

i386即Intel 80386。其实i386通常被用来作为对Intel(英特尔)32位微处理器的统称
   
那么linux 中的 i386 i686 i486 i586 究竟是什么含义呢?

其实很简单,i代表intel(英特尔)系列的cpu 
386 几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等,都可以正常的工作!那个 i 指的是 Intel 兼容的 CPU 的意思,至于 386 不用说,就是 CPU 的等级啦!
i586 就是 586 等级的计算机,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级;
i686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等级的 CPU 都属于这个 686 等级! 
noarch 就是没有任何硬件等级上的限制。


configure一般是tar.gz包里面的一个可执行文件,./configure是执行它,其作用就是根据系统情况自动生成编译时所需的Makefile文件。
./configure --enable-shared --enable-static --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux   --build=i386 --host=arm

修改Makefile,因为编译后的程序要在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

切换到e2fsprogs-1.40.2目录下

cd e2fsprogs-1.40.2/

新建build目录,并切换到build目录下

mkdir build; cd build

配置

-cc指定编译器

-prefix指定安装目录

--enable-elf-shlibs: elf格式的库
--host=arm-linux:    交叉编译成arm平台 
--prefix=/usr/local/arm/2.95.3/arm-linux:  安装路径 

../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

切换到 zlib-1.2.3目录

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

切换到libpng-1.2.23

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,configure。一个软件

包,一般都会有configure文件,它用来测试编译环境,以及生成makefile文件,再次是

autogen.sh。autogen.sh的作用也是检测你的编译工具和依赖关系包是否完整;

Makefile是编译的目标文件,也就是 make的时候要找的文件!

./autogen.sh


管道符 
>  添加覆盖

>> 追加

echo "CPU = $3" >> config.mk 
会把 CPU+$3  添加在config.mk 的最后
 echo "CPU = $3" > config.mk
的话 config.mk 里就只剩   
CPU = $3

在make时候可能出现如下错误:

ts_test.o(.text 0x218): In function `main':
: undefined reference to `rpl_malloc'
在当前目录查找了rpl_malloc,发现configure里有#define malloc rpl_malloc一行。分析configure 脚本相关的代码,原来是ac_cv_func_malloc_0_nonnull引起的,OK我们不让它检查了,产生一个cache文件arm-linux.cache,欺骗configure:

解决办法:

# echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache


echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

配置

-host=arm-linux 

运行环境 (交叉编译成arm)

--cache-file

'configure'会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的配置,测试的结果会存储在一个cache file里.当configure一个每个子树里都有'configure'脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助.

--enable-inputapi=no

--enable-inputapi=no是由于驱动不支持ioctl操作,如果不改最后会有如下现象:
我在板子上运行./ts_test的时候,总是提示我:ts_open: No such file or directory?

--prefix

指定安装目录

./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_qtopia –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/

通常Linux bash shell可执行脚本文件第一行必须是:#!/bin/sh开头,表明这个脚本通过/bin/sh程序来解释执行脚本中的命令,其它的可执行脚本也必须在第一行指明脚本的解释执行程序,如python脚本是:#! /usr/bin/pythonx.x
f、建立一个脚本文件,用来较验触摸屏
在单板根目录/bin下建立ts_cal.sh文件,内容如下:
=====================================================================
#!/bin/sh
export HOME=/root
export QTDIR=/opt/Qtopia   Qt所在目录
export QPEDIR=/opt/Qtopia  qte所在目录
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  指定TSLIB的库文件路径
export TSLIB_TSDEVICE=/dev/event0   指定触摸屏设备
export TSLIB_CALIBFILE=/etc/pointercal  指定触摸屏校准文件pointercal存放位置
export TSLIB_CONFFILE=/etc/ts.conf   指定触摸屏配置文件的位置
export TSLIB_PLUGINDIR=/lib/ts        指定触摸屏插件文所在路径
export TSLIB_CONSOLEDEVICE=none   设定控制台设备为none,否则默认为/dev/tty
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  界面最终显示在fb0中
export QWS_KEYBOARD="TTY:/dev/tty1"  指定鼠标键盘在tty1
#export QWS_MOUSE_PROTO="USB:/dev/mouse0"
export QWS_MOUSE_PROTO="TPanel:/dev/ts0"   帮助QMouseDriverFactory也就是Qt鼠标设备的枚举者来创建你想要的鼠标设备而不是系统默认的,指明要使用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_qtopia1.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 460000 $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
--------------------- 
作者:qingkongyeyue 
来源:CSDN 
原文:https://blog.csdn.net/qingkongyeyue/article/details/52502314 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值