qtopia-opensource-src-4.2.3成功交叉编译与移植

        折腾了很多天,终于把qtopia的交叉编译环境搭建好了,并成功地进行了开发板的移植.记录下我们遇到的每一个问题,方便以后查阅和资源的网络共享。在文章之前我要声明以下所记载的内容决非网络转载,里面的每一个步骤都是我和老丁付出过艰辛的汗水并进行了实际验证的。请转载的朋友们标明出处,以对得起我们的劳动果实。本文献给刚刚进入ARM领域的那些和我一样渴望起飞的菜鸟们。希望你们少走些弯路,大家共同进步。

        系统环境:同样的方法同时在Ubuntu 8.10(我的系统环境)与 Fedora(老丁的系统环境)上实现 。

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

        qt包: qtopia-opensource-src-4.3.3.tar.gz 请注意,不是qtopia-core-opensource-src-4.3.3.tar.gz两个有很大的区别,前者大概有100M而后者只是前者的一部分内核大概只有50M想要得到最后的image文件夹就一定要用不带core的进行config。我就是因为了个原因浪费了三天时间。

        第一步:建立好arm-linux-gcc 3.4.1。只要是有开发板的人这个搭建应该不难。

        第二步:建立两个文件夹source(里面就是解压之后的源代码)和target(进行安装qtopia的目录我们想得到的那个image文件夹在make之后就会出现在这里)    

        第三步:将qtopia-opensource-src-4.2.3.tar.gz解压缩并把里面的内容放到刚建立的source文件夹里面(典型的做法是mv -r qtopia-4.2.3 source) ,进入此目录。

cd source/mkspecs/qws/Linux-arm-g++

sudo gedit qmake.conf

经过我和老丁两个人的实际教训,一定要用绝对路径,在arm-Linux- 前面加上路径/usr/local/arm/3.4.1/bin/.(虽然我们已经直接在/etc/bash.bashrc修改,加上PATH=$PATH:/usr/local/arm/3.3.2/bin来设置环境变量,但是在实际的编译过程中依然遇到找不到路径的问题,解决问题的办法就是用绝对路径)。

        第四步: 配置QT/E ,回到源代码根目录,在文件source/src/gui/embedded/qmouselinuxtp_qws.h中加入

#define QT_QWS_IPAQ

#define QT_QWS_IPAQ_RAW

         第五步:按照道理来说现在就应该config了,但是我们的经验告诉大家,现在就config那会付出大把的时间代价来处理在漫长make中所遇到的各种问题。于是在这里我提前把make过程中我们遇到的所有问题和解决问题的办法写出来。

第一个要修改的地方是

sudo gedit /source/src/libraries/qtopiabase/qmemoryfile_unix.cpp 将里面-这行换成+这行,代码不多

int f = :pen(tmpFile.toLatin1(), O_WRONLY);

if (!f)

- f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY);

+ f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY,S_IRUSR | S_IWUSR);

if (f){ fstat(f, &st);

如果不这么处理在make的过程中会出现下面的误:

/usr/include/bits/fcntl2.h:51: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT in second argument needs 3 arguments

第二个要修改的地方是

sudo gedit /usr/local/3.4.1/arm-linux/include/linux/videodev2.h 在

#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') 之后添加

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

sudo gedit /usr/local/3.4.1/arm-linux/sys_include/linux/videodev2.h

处理方式与上面那个一样在

#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') 之后添加

#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') 不做这个修改在make的时候回出现下面这个问题:

ome/arm/source/src/applications/camera/formatconverter.cpp:75: error: `V4L2_PIX_FMT_SBGGR8' undeclared (first use this function) /home/arm/source/src/applications/camera/formatconverter.cpp:75: error: (Each undeclared identifier is reported only once for each function it appears in.) /home/arm/source/src/applications/camera/formatconverter.cpp: In static member function `static QList camera::FormatConverter::supportedFormats()': /home/arm/source/src/applications/camera/formatconverter.cpp:97: error: `V4L2_PIX_FMT_SBGGR8' undeclared (first use this function) make[6]: *** [.obj/release-shared/formatconverter.o] Error 1 以上处理方式是我们遇到的问题后进行的相应修改。各个版本不一样的话可能遇到的问题也不一样欢迎大家和我们联系并共同讨论遇到的问题。好,下面就可以进行config了。

        第六步:开始configure

cd target

sudo ../source/configure -edition phone -xplatform linux-arm-g++ -arch arm -prefix /opt/qtopia -no-qvfb -displaysize 320x240 -no-ssl -no-bluetooth -no-dbus -no-drm -v4l2 -no-modem -no-libamr -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg" -extra-qtopiacore-config "-xplatform qws/linux-arm-g++ -embedded arm"

关于gongfigure的相关设置代表的含义大家应该先了解一下,不然遇到问题了都不知道是由于什么原因引起的。了解configure的设置含义对自己的需要也有很大的帮助。不过一般按照我说的也应该没什么问题了。需要注意的一个地方就是-prefix /opt/qtopia 这里设置的文件夹位置就是编译好之后那个image文件夹在开发板上移植到的位置。其他的设置可以按照上面写的做。运行这个过程大概要10分钟。不出什么问题就可以进行下一步了。

        第七步:sudo make 然后就等吧。大概要运行三个小时(还得是你电脑性能不错的前提下)。我经常在运行到一个半小时的时候就出错了。可想有多郁闷!不过本文就是为了避免大家遇到跟我遇到的同样郁闷的事情而写的。

        第八步:sudo make install这步应该不会出什么错误。我没见在这步还能出错的。如果在这步遇到问题,解决的办法只有一个:去烧香吧!然后带着好心情回来重新编译。不然估计你的电脑会有性命危险。 没有问题的话就应该是成功一大半了。剩下的工作就是把编译好的东西移植到开发板了。很多情况下在开发板上要设置和时区相关的信息。为了这个我们今天用了一天的时间进行了重新的编译,结果验证我们亏了。 下面进行开发板移植的讲解。

        第一步:cd target

sudo cp -r image /home cd /home

sudo mv -r image qtopia (还记得configure中的那个-prefix /opt/qtopia 吗?) 这几步的目的就是把image拷贝到home下并把他重命名为qtopia。

        第二步:把/usr/local/arm/3.4.1/arm-linux/lib中的东西拷到刚重命名的那个qtopia的lib目录下。具体怎么弄自己想办法吧。

        第三步:启动开发板,在开发板上 mkdir opt 然后把usr目录中的除了share目录之外的所有都删了。进入share目录把里面除了zoneinfo目录之外的所有目录都删除了。这个目的是为了设置时区。因为在编译之前我们就默认了在开发板的这个位置保存的就是开发板的时区信息。不这么做在开发板上运行程序会出错。       

        第四步:建立开发板与电脑的nfs服务。不会弄的人先去弄那个吧........       

        第五步:通过NFS把刚我们建立的那个电脑home下的那个qtopia文件夹传到开发板我们刚建立的那个opt目录下(还记得configure中的那个-prefix /opt/qtopia 吗?) 好了。移植完毕。 不过在移动那个qtopia文件夹的时候要用到这个命令:

mv -r -d qtopia /opt 不用-d那可是完全不幸地事情。。。。。。

        哦,还要在电脑上建立个文件,名字随便起。在里面加上如下代码后保存 然后把这个文件也通过nfs传到开发板的任何位置都行。其实这么做的目的就是设置开发板的环境变量。运行开发板上的程序之前先运行那个文件。比如你那个文件叫sh那你就 ./sh就好了。 现在整个编译和移植过程已经完成了。可以在开发板上通过以下命令看看程序的运行了。 cd opt cd qtopia cd bin ./qpe 看看你的开发板!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值