Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23552
  • 博文数量: 13
  • 博客积分: 535
  • 博客等级: 中士
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-18 15:50
文章分类

全部博文(13)

文章存档

2011年(1)

2009年(12)

我的朋友

分类: 嵌入式

2009-11-29 12:17:48

之前完成了ARM9平台上qt-embedded-4.5.1的移植,由于设计需要一个桌面环境,qte4的程序只能跑

qtopia4的桌面环境下,于是开始尝试移植qtopia4到板子上去。

开发过程主要参考博客http://blog.csdn.net/hongjiujing/archive/2007/08/09/1733126.aspx

感谢原作者!

以下介绍我的编译过程:

开发平台:redhat9 操作系统

开发板:(三星芯片S3C2410ARM9)

交叉编译器:arm-linux-gcc-3.4.1

主机编译器:gcc-3.4.4(需要3.3以上版本)

软件资源包:(顺便给出可以下载的地址)

1.Red Hat Linux 9.0(主机操作系统)

2
gcc-3.4.4.tar.bz2(主机编译器)


3
arm-linux-gcc-3.4.1.tar.bz2(交叉编译器)
(特别注意:编译Rootfilesystem 、busybox、APP(QT)要使用同一版本因为这些程序都要使用动态链接库即/lib下的SO,不同版的交叉编译器编译的程序使用不同的加载器即ld.so.x)



4
tslib-1.3.tar.bz2(管理目标平台的触摸屏)



5
qtopia-opensource-src-4.2.1.tar.gz(包含Qt
Qtopia core)

 

编译前的约定:

1
)我的工作目录为:/mnt/nfs


2
qtopia-opensource-src-4.2.1.tar.gz 软件包放在/mnt/nfs/qtopia4目录下。


一.编译主机编译器
 gcc-3.4.4.tar.bz2

步骤如下:


# tar –jxvf gcc-3.4.4.tar.bz2

# ./configure    (
默认安装目录为:
/usr/local)

# make

# make install

安装完成后,可执行文件放在/usr/local/bin目录下,库文件放在/usr/local/lib目录下。


二.安装交叉编译器
 arm-linux-gcc-3.4.1.tar.bz2

步骤如下:


# tar jxvf arm-linux-gcc-3.4.1.tar.bz2

解压后的文件为 usr目录,其已包括可执行文件,直接将usr拷贝到根目录下。然后


# vi ~/.bashrc

在里边添加:


export PATH=$PATH:/usr/local/arm/3.4.1/bin

保存退出,执行:


# source /etc/profile

三.编译
tslib-1.3.tar.bz2

详细步骤如下:


# tar jxvf tslib-1.3.tar.bz2

解压后的目录为tslib-1.3


# cd tslib-1.3

# export CC=arm-linux-gcc

# export CXX= arm-linux-g++

# ./autogen.sh

# ./configure --prefix=/mnt/nfs/tslib1.3-install --host=arm-linux

 配置目标平台为ARM-linux,在主机上的安装目录为/mnt/nfs/tslib1.3-install 


# make

# make install

四.编译 qtopia-opensource-src-4.2.1.tar.gz

编译前约定:


安装目录为:
/mnt/nfs/qtopia4/qtopiatslibinstall

目标目录为:
/mnt/nfs/qtopia4/qtopiatslibtarget

下面解压软件包:


# tar zxvf qtopia-opensource-src-4.2.1.tar.gz

然后重命名解压后的包:


# mv qtopia-opensource-4.2.1 qtopiatslibinstall

# cd qtopiatslibinstall

在此目录下,文件夹为qtopiacore的目录即是QtQtopiaCore所在目录,里边包含了开发所需的Designer,qmake,uic,moc等工具,也包含了面向嵌入式平台的Qt库。


编译前,首先建立定位到安装目录和目标目录的环境变量:


# export QTOPIAINST=/mnt/nfs/qtopia4/qtopiatslibinstall

# export QTOPIATARG=/mnt/nfs/qtopia4/qtopiatslibtarget

为了让编译适应于目标平台和去除编译中将出现的错误,我们需要对源码进行修改和裁减。因此,编译的详细过程如下:


1
 修改源码包


1


# cd src/libraries/qtopiabase/

# cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h

# cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp

2
)修改3.4.1版的arm编译器的文件


# cd /usr/local/arm/3.4.1/

# vi arm-linux/include/linux/videodev2.h

在其中添加如下内容:


#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B','A','8','1') 

/*  8  BGBG.. GRGR.. */

保存退出。


# vi arm/3.4.1/arm-linux/sys_include/linux/videodev2.h

在其中添加如下内容:


#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B','A','8','1') 

/*  8  BGBG.. GRGR.. */

保存退出。


3) 
修改时区信息


# vi src/libraries/qtopia/qtimezone.cpp

114行的 /usr/share/zoneinfo/ 改为/mnt/nfs/qtopia4/qtopiatslibtarget/zoneinfo/ ,保存退出。


# vi src/settings/systemtime/settime.cpp

318行的 /usr/share/zoneinfo/ 改为/mnt/nfs/qtopia4/qtopiatslibtarget/zoneinfo/ ,保存退出。


4) 
裁减Qtopia core的库


# vi qtopiacore/qconfig-qpe.h

首先注释掉关于鼠标光标的宏定义,让程序运行时,触摸屏中央有光标出现:


// Qtopia Core

/*

#ifndef QT_NO_QWS_CURSOR

#  define QT_NO_QWS_CURSOR

#endif

*/

/*

#ifndef QT_NO_QWS_MOUSE

#  define QT_NO_QWS_MOUSE

#endif

#ifndef QT_NO_QWS_MOUSE_AUTO

#  define QT_NO_QWS_MOUSE_AUTO

#endif

*/

其它宏定义根据需要进行注释。


保存后将qconfig-qpe.h拷贝到global目录。


# cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/

global/qconfig-qpe.h

5
)注释掉其他文件里的QT_NO_QWS_CURSOR的定义


# vi qtopiacore/qt/src/corelib/global/qfeatures.h

注释掉如下内容:


/*

#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))

#define QT_NO_QWS_CURSOR

#endif

*/

保存退出。



# vi qtopiacore/qt/src/corelib/global/qglobal.h

注释掉以下内容:


//#    define QT_NO_QWS_CURSOR

2.配置源码包

首先,确定目录为:
 /mnt/nfs/qtopia4/qtopiatslibinstall

然后进行配置,执行如下命令 


# ./configure -silent -release 

-image /mnt/nfs/qtopia4/qtopiatslibtarget 

-prefix /mnt/nfs/qtopia4/qtopiatslibtarget 

-xplatform linux-arm-g++ -arch arm -no-qvfb 

-displaysize 320x240 -no-modem 

-extra-qtopiacore-config "-release -xplatform qws/linux-arm-g++ -embedded arm -opengl -qconfig qpe -qt-sql-sqlite 

-depths 4,8,16,32 -qt-kbd-usb -no-kbd-tty -no-mouse-linuxtp 

-qt-mouse-tslib -I/mnt/nfs/tslib1.3-install/include -L/mnt/nfs/tslib1.3-install/lib" 2>../qtopiaconfgureERR.txt


主要配置选项解说如下:


-xplatform linux-arm-g++ -arch arm

目标平台为arm-linux,体系结构为arm



-no-qvfb 

目标平台已支持framebuffer,因而不使用虚拟帧缓冲。



-extra-qtopiacore-config

Qtopia core 配置选项。



-xplatform qws/linux-arm-g++ -embedded arm

目标平台编译配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目录下的配置文件,嵌入式平台为arm



-qconfig qpe

使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,则使用-qconfig large选项。



-qt-sql-sqlite

数据库支持Sqlite



-qt-kbd-usb

键盘支持usb协议。



-no-mouse-linuxtp -qt-mouse-tslib

-I/mnt/nfs/tslib1.3-install/include -L/mnt/nfs/tslib1.3-install/lib

触摸屏协议不支持linuxtp,支持tslib,并在后面添加上刚才编译的tslib的头文件和库。



2>../qtopiaconfgureERR.txt

最后将配置过程中的错误输出到qtopiaconfgureERR.txt文件中。

就在执行配置命令后,问题出现了,具体如下:

Checking the compiler (host): FAIL (can not run binaries)

通过字面的分析就是主机编译器检查未通过,可是我明明刚刚装好了gcc-3.4.4编译器的啊,

gcc -v 显示是 3.4.4的版本没错啊。

到底是怎么回事儿呢?于是上百度搜索,发现也有人遇到同样的问题了,可是没人给出解决方法,我

只有硬着头皮自己解决了。尝试了很多方法,怀疑是编译器的问题,换了好几个版本的编译器试了过

后还是出现同样的错误,一度抓狂。

上网搜gcc编译的方法,看到有一点说,编译后要进行一些设置,其中包括库路径的设置。

http://cdzhch84.blog.163.com/blog/static/3820050200710272352826/

于是export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH,再此执行configure...的时候,之前的问

题不再出现了!!!

当然为了不用每次都设置库路径,可以将export LD_LIBRARY_PATH=/usr/local/lib:$PATH写入~/.bashrc文件。

其实之前写个hello.cpp文件试试就知道,可以编译,但是执行的时候会提示库找不到。

3.编译源码包


执行如下命令:


# make 2>../qtopiamakeERR.txt

4
.安装编译后源码包


# make install

编译安装完成后,在/mnt/nfs/qtopia4/qtopiatslibtarget目录下产生各个目标文件。


5
.建立时区信息


# cd $QTOPIATARG

# mkdir zoneinfo

# cp -a /usr/share/zoneinfo/* $QTOPIATARG/zoneinfo/

至此,编译完成,下面就是要将之移植到板子上去,希望不会出奇怪的问题!

 


 

阅读(953) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Tslib的编译和触摸屏测试

给主人留下些什么吧!~~