免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1100 | 回复: 0
打印 上一主题 下一主题

ARM 9下编译qtopia-opensource-src-4.2.0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-17 21:26 |只看该作者 |倒序浏览

                注意:此过程不适合qtopia-opensource-src-4.3.2.tar.gz,仔细察看会发现qtopia-opensource-src-4.3.2/src/libraries/qtopiabase/ 下根本没有custom-linux-cassiopeia-g++.h 文件,因此也不可能做如下操作。
# cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h # cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp

编译前约定:

安装目录为:/mnt/yaffs/install
目标目录为:/mnt/yaffs/target

下面解压软件包:
# tar zxvf qtopia-opensource-src-4.2.0.tar.gz

然后重命名解压后的包:

# mv qtopia-opensource-4.2.0 install

# cd install

在此目录下,文件夹为qtopiacore的目录即是Qt,QtopiaCore所在目录,里边包含了开发所需的Designer,qmake,uic,moc等工具,也包含了面向嵌入式平台的Qt库。 为了让编译适应于目标平台和去除编译中将出现的错误,我们需要对源码进行修改和裁减。因此,编译的详细过程如下:

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-linux/sys_include/linux/videodev2.h
在其中添加如下内容:
#define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B','A','8','1')  /* 8  BGBG.. GRGR.. */
保存退出。

否则会提示错误或警告信息,没有记录,已记不清。搜索发现,下面的文件用到了该变量。

[root@localhost applications]# grep -ri V4L2_PIX_FMT  *
camera/v4l2videocapturedevice.cpp:        format.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB32;
camera/v4l2videocapturedevice.cpp:            if (imageType != V4L2_PIX_FMT_RGB32)    // have been here? keep RGB32 if we can
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB332:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB555:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB565:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB555X:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB565X:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB24:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_RGB32:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_GREY:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YVU410:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YVU420:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YUYV:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_UYVY:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YUV422P:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YUV411P:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_Y41P:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_NV12:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_NV21:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YUV410:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YUV420:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_YYUV:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_HI240:
camera/formatconverter.cpp:    case V4L2_PIX_FMT_SBGGR8:
camera/videocapturedevice.cpp:    format.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB32;


3) 修改时区信息
#cd /mnt/yaffs/install
# vi src/libraries/qtopia/qtimezone.cpp
将114行的 /usr/share/zoneinfo/ 改为/mnt/yaffs/target/zoneinfo/ ,保存退出。
# vi src/settings/systemtime/settime.cpp
将318行的 /usr/share/zoneinfo/ 改为/mnt/yaffs/target/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



首先,确定目录为: /mnt/yaffs/install,然后进行配置,执行如下命令 :

可以直接在源码目录下进行配置,但有时为了保持源码目录的干净不被破坏,单独建一个目录,如target,在target中进行配置。最后在运行make  install IMAGE=/qtopia4/方式生成最后下载到开发板的目录。
Qtopia has been configured. You can build Qtopia by running make.

After building, you MUST run make install, which will setup a runnable image in
/mnt/yaffs/install/image. You can override this by running make install
IMAGE=/other/location.

As configured, Qtopia MUST be run from /mnt/yaffs/install/image. If this is not
where you intend to run Qtopia from you should set the location by running
configure -prefix /opt/Qtopia.
但如果在与install平行的target目录进行编译,则写法如下:
#echo
"yes" | ../install/configure -edition phone -xplatform linux-arm-g++
-arch arm -no-qvfb -release -displaysize 240x320 -no-modem -quicklaunch
-defaultbuttons phone -image /mnt/yaffs/dest -prefix /mnt/yaffs/dest/
-no-bluetooth -no-drm -no-infrared -extra-qt-config "-qt-zlib -qt-gif
-qt-libpng -qt-libmng -qt-libjpeg" -extra-qtopiacore-config ' -release
-xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 16,24
-qt-kbd-usb -no-kbd-tty -no-mouse-linuxtp'


主要配置选项解说如下:
-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
触摸屏协议不支持linuxtp

3.编译源码包
执行如下命令:
#make

# make 2>/ERR.txt
后者是将错误信息写入到ERR.txt文件中

4.安装编译后源码包
# make install
编译安装完成后,在image=/mnt/yaffs/dest目录下产生各个目标文件。
也可以使用
Make install IMAGE=/重新指定路径

5.建立时区信息
# cd $QTOPIATARG
# mkdir zoneinfo
# cp -a /usr/share/zoneinfo/* $QTOPIATARG/zoneinfo/

3 移植成果演示

在这里,我们以Qtopia自带的例子程序为例,来演示应用程序运行步骤。首先在/mnt/nfs/dest/目录下用VI编辑器建立qtopiat.sh文件:
#!/bin/sh
export QTDIR=/mnt/yaffs/dest
export QPEDIR=/mnt/yaffs/dest
export KDEDIR=/mnt/yaffs/dest
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/tmp/ts.conf
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CALIBFILE=/tmp/ts-calib.conf
export TSLIB_PLUGINDIR=/mnt/yaffs/dest/lib
export QT_TSLIBDIR=/mnt/yaffs/dest/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/yaffs/dest/lib/
export QWS_SIZE=640x480
export QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB"
export LANG=zh_CN
insmod /mnt/yaffs/touchscreen/ts-uptech.o
cp /usr/qpe/etc/ts.conf /tmp
cd /usr/qpe/bin/
if [ "$1" = "c" ]; then
./ts_calibrate
fi

if [ -f "$TSLIB_CALIBFILE" ]; then
./qpe &>/dev/null
else
./ts_calibrate
./qpe &>/dev/null
fi
clear
保存退出,修改用户使用权限:

# chmod 777 qtopiat.sh

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

在终端里执行:
# cd /mnt/nfs/dest
# ./qtopiat.sh

编译过程中会出现各种各样的错误,请与宿主机操作系统环境以及GCC和交叉编译器的版本不同(含GLIBC库版本)而略有差异。下面给出笔者遇到的几个:
No1:
make[5]: Entering directory `/mnt/yaffs/target/src/libraries/qtopiaprinting'
uic /mnt/yaffs/install/src/libraries/qtopiaprinting/printdialogbase.ui
compiling /mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:23:32: ui_printdialogbase.h: No such file or directory
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp: In function `void createPrintDialog(QPrintDialog*)':
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33: error: `Ui' has not been declared
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33:
error: `PrintDialogBase' undeclared (first use this function)
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33:
error: (Each undeclared identifier is reported only once for each
function it appears in.)
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33:
error: `dialogBase' undeclared (first use this function)
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33: error: `Ui' has not been declared
/mnt/yaffs/install/src/libraries/qtopiaprinting/qprintdialogcreator.cpp:33: error: `PrintDialogBase' has not been declared
make[5]: *** [.obj/release-shared/qprintdialogcreator.o] Error 1
make[5]: Leaving directory `/mnt/yaffs/target/src/libraries/qtopiaprinting'
make[4]: *** [all] Error 2
make[4]: Leaving directory `/mnt/yaffs/target/src/libraries/qtopiaprinting'
make[3]: *** [sub-libraries-qtopiaprinting] Error 2
make[3]: Leaving directory `/mnt/yaffs/target/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/mnt/yaffs/target/src'
make[1]: *** [qtopia_all] Error 2
make[1]: Leaving directory `/mnt/yaffs/target'
make: *** [all] Error 2

解决办法:将错误行注释掉

类似的错误还见到好几次,主要是#include包含头文件写在CPP文件的末尾,不知道是否允许,好像一般都写在最前面。笔者在redhat linux 9下报错,但在fedora core 5下又没有报错。

注:此文重点在前面编译部分,如果编译成功,后面就相对简单了。剩下的移植运行笔者暂没有去测试,因为笔者的工作环境是MIPS。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/78300/showart_1866499.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP