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

来源:百度文库 编辑:神马文学网 时间:2024/04/26 07:45:57
系统环境:同样的方法同时在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 看看你的开发板!