您的位置:首页 > Web前端

Fedora8上交叉编译qtopia4移植成功到s3c2410开发板

2010-03-11 16:46 567 查看
开发平
台:Fedora8
操作系统



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

这几天一直在忙着QTOPIA4.2.1
在2410
上面的移植,平台的差异,编译器的问题,可是我最后万万没有想到,还是得到一个论坛大哥的帮助,还得以解决。问题出在make
的前提是一定要是原来的源代码,不管你是make clean
过,还是怎么讲都不行。至少我在red hat linux 9
上面是这样的。

教程是这样的:

一.硬件平台

1
.主机: PC
机,512M
内存以上。

2
.目标机: UP-NetARM2410-S
实验平台。

二.移植软件资源

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

2
.gcc-3.4.1.tar.gz
(主机编译器)

3
.arm-linux-gcc-3.4.1.tar.bz2
(交叉编译器)

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

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

Qtopia core)

2

. GUI(QT)的移植过程

编译前的约定:

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


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

一.编译主机编译器

gcc-3.4.1.tar.gz

步骤如下:

# tar –zxvf gcc-3.4.1.tar.gz

# ./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 /etc/profile

在里边添加:

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
的目录即是Qt
,QtopiaCore
所在目录,里边包含了开发所需的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

Qtopia4
移植过程(
三)2007-06-27 22:252
.配置源码包

首先,确定目录为:
/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 640x480 -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
文件中。

3

.编译源码包

执行如下命令:

# make 2>../qtopiamakeERR.txt

4

.安装编译后源码包

# make install

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

5

.建立时区信息

# cd $QTOPIATARG

# mkdir zoneinfo

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

五.编译后的处理

完成上面的步骤后,所有软件包已编译完成。下面建立环境变量,进行后期处理,建立开发环境。

1
)将designer,qmake
等工具拷贝到$QTOPIATARG/bin/
目录下。

# cp $QTOPIAINST/qtopiacore/host/bin/* $QTOPIATARG/bin/



2
)建立环境变量:



# vi /etc/profile



添加如下
内容:



QTOPIA="/mnt/nfs/qtopia4/qtopiatslibtarget"



LD_LIBRARY_PATH="/usr/lib:/usr/local/lib:/usr/X11R6/lib"



LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QTOPIA/lib"



PATH="$PATH:$QTOPIA/bin"



QMAKESPEC=/mnt/nfs/qtopia4/qtopiatslibinstall/qtopiacore/qt/mkspecs/qws/linux-arm-g++



export QTOPIA PATH LD_LIBRARY_PATH QMAKESPEC



保存退
出。



#source /etc/profile



3
)修改ts.conf



# cd /mnt/nfs/tslib1.3-install/etc



# vi ts.conf



原文件内
容如下:



#module mousebuts



module variance xlimit=50 ylimit=50
pthreshold=3



module dejitter xdelta=1 ydelta=1 pthreshold=3



module linear



将第一行
的“#”
去掉,让触摸屏起作用。



到此为止,开发环境建立完毕。

3
移植成果演示



在这里,
我们以Qtopia
自带的例子程序为例,来演示应用程序运行步骤。首先在/mnt/nfs/qtopia4/
目录下用VI
编辑器建立qtopiatslib.sh
文件:



export TSLIB_TSEVENTTYPE=event0



export TSLIB_TSDEVICE=/dev/input/event0



export
TSLIB_CONFFILE=/mnt/nfs/tslib1.3-install/etc/ts.conf



export TSLIB_CONSOLEDEVICE=none



export
TSLIB_CALIBFILE=/mnt/yaffs/tmp/pointercal



export
TSLIB_PLUGINDIR=/mnt/nfs/tslib1.3-install/share/ts/plugins



export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs



/tslib1.3-install/lib



export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs



/qtopia4/qtopiatslibtarget/lib



export QWS_SIZE=640x480



export
QWS_MOUSE_PROTO="Tslib:/dev/input/event0"



export
POINTERCAL_FILE=/mnt/yaffs/tmp/pointercal





insmod
/mnt/yaffs/touchscreen/ts-uptech.o



cd /mnt/nfs/tslib1.3-install/bin



./ts_calibrate





cd
/mnt/nfs/qtopia4/qtopiatslibtarget/bin



if [ -f "$TSLIB_CALIBFILE" ]; then



./qpe -qws



else



/mnt/nfs/tslib1.3-install/bin/ts_calibrate



./qpe -qws



fi



保存退
出,修改用户使用权限:



# chmod 777 qtopiatslib.sh



然后启动
目标平台,打开minicom
终端,
进入目标平台的系统。在主机上启动NFS
服务,将主机的/mnt/nfs
目录挂载到目标机的/mnt/nfs
目录。



在终端里
执行:





#
ifconfig eth0 192.168.0.1



# mount -t nfs (
主机IP
地址):/mnt/nfs /mnt/nfs



# cd /mnt/yaffs



# mkdir tmp



# cd /mnt/nfs/qtopia4



# ./qtopiatslib.sh





执行qtopiatslib.sh
文件,首先校准触摸屏,
依次点击屏幕上出现的五个点,完成后,会在/mnt/yaffs/tmp
目录下生成pointercal
校准文件。接下来就会启动qpe
应用程序,进入Qtopia Phone
的界面。



在实验的
过程中可能会出现下面的错误:




在make
的时候,遇到了一个错误。/usr/bin/ld .....debug-shared/moc.o
提示could't read symbols :File in wrong format”



只要重新
用新的源代码来做才能通过。



有时候嵌
入式的问题真的很难说。总之,出现问题不要紧,能学到东西。努力吧,嵌入式的新人们。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: