树莓派2B,Qt5.8交叉编译移植。

    xiaoxiao2021-04-19  72

    开发板: 树莓派2B PC机环境: Ubuntu 14.04 LTS 参考官方文档: https://wiki.qt.io/Raspberry_Pi_Beginners_Guide 写本文的目的: 与大家分享自己的移植过程和一些心得,如有不当之处,请大家指出!

    创建目录opt,方便管理所需要的工具资料。** mkdir ~/opt cd ~/opt 在/mnt目录下创建 rasp-pi-rootfs目录,用来挂载系统镜像 sudo mkdir /mnt/rasp-pi-rootfs

    获取系统镜像,可以使用官方最新镜像,输入命令: wget http://downloads.raspberrypi.org/raspbian_latest,这里我使用的是开发板自带的系统镜像

    将系统镜像挂载到我们之前创建的目录: sudo mount -o loop,offset=62914560 RPI_2B_B_B+_7.0_cap_usb_touch_RASPBIAN_20150405.img /mnt/rasp-pi-rootfs 关于offset的计算: 使用命令查看 我们看到了两个image,第一个相当于bootloader,从第二个开始计算,从start的位置。 offset = 512 * 122880

    交叉编译工具 找与Qt版本对应的gcc! 找与Qt版本对应的gcc! 找与Qt版本对应的gcc!重要的事情说3遍, 可以通过官方网站查看 https://doc.qt.io/qt-5/supported-platforms-and-configurations.html

    因此,我们至少得用GCC4.8.2,低于该版本的话编译的时候会报各种各样的错误。我们采用的是arm-linux-gnueabihf-gcc-4.8.3 , 使用官方介绍文档里的工具会报错误,百度google了一圈才找到自己能用的。 cross-compile-tools arm-linux-gnueabihf-gcc-4.8.3 arm-linux-gnueabihf-gcc-4.8.3下载地址:链接:http://pan.baidu.com/s/1bprK2bt 密码:6gbb gcc4.8在 tools-master里 在tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin 下 因为上面的交叉编译工具是32位Linux的,如果你所使用的是64位Linux的话,还需要安装32位的运行库软件包:sudo apt-get install ia32-libs 下载出错,但是有提示我们可以使用lib32z1 lib32ncurses5 lib32bz2-1.0来代替,挨个装一遍吧。

    准备qt5源码 在opt目录下从远程仓库克隆一份qt源码库到本地 git clone git://code.qt.io/qt/qt5.git 下载完成后进入qt5目录,运行init-repository,开始下载各个模块源码,这个持续的时间就跟网速有关系了,我的一般20分钟左右。

    运行脚本配置编译 进入到cross-compile-tools目录内,进行配置 sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/tools-master/arm-bcm2708/gcc-linaro-arm-linunx-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc 但是发现会出错,关于libstdc++.so.6 的问题,网上找了一圈,什么拷贝库啊什么的,都不管用,最后无意间看到百度经验有关于解决该问题的办法,试了下真成功了。直接 sudo apt-get install lib32stdc++6 再运行一次脚本,不报错了

    然后再进入到qt5目录的qtbase目录进行configure配置。如果需要用到qml,在configure后面加上-make tools ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -make tools -prefix /usr/local/qt5pi

    配置完成

    接下来在qtbase目录进行编译安装: make -j4

    -j4允许4个编译命令同时进行,加快编译速度,但是我发现,当编译出错的时候,make -j+n 并不能准确的定位错误的位置,然后单独的make指令就可以。 这一过程持续了8分钟左右(编译时间和电脑配置有很大关系,5-60分钟都有可能,大家耐心等待) 编译完成之后 sudo make install 进行安装。

    至此我们的编译安装基本完成,如果还需要其它模块,为了防止依赖错误的发生,按照以下顺序进行编译安装。 qtimageformats, qtsvg, qtjsbackend, qtscript, qtxmlpatterns, qtdeclarative, qtsensors, qt3d, qtgraphicaleffects, qtjsondb, qtlocation, qtdocgallery 假如我们要编译qtimageformats模块,执行命令: cd ~/opt/qt5/qtimageformats ~/opt/qt5/qtimageformats$ /usr/local/qt5pi/bin/qmake

    ~/opt/qt5/qtimageformats$make -j4

    ~/opt/qt5/qtimageformats$sudo make install

    qt5.8好像没有qtjsbackend 和 qtjsondb模块?编译的时候先跳过吧。

    7、烧写系统镜像到树莓派SD卡。

    ~/opt$ sync; sudo umount /mnt/rasp-pi-rootfs

    ~/opt$ sudo dd bs=1M if=RPI_2B_B_B+_7.0_cap_usb_touch_RASPBIAN_20150405.img of=/dev/sdb; sync

    sdb是我们插入的sd卡,可以在/dev目录下查看自己的是哪一个设备。

    文件比较大,烧写过程中没有任何提示,耐心等待。 传输完成:

    8、配置QtCreator 此方法是我们可以直接在pc端编译运行qt程序,在树莓派板子上生成bin文件并显示。因此需要pc和树莓派在同一局域网内。树莓派和pc最好通过路由或者交换机通信,pc和树莓派网线直连我试过并不管用,也懒得改线序了。

    工具链设置: 依次点击 Tools -> Options..-> Build & Run -> Compilers ->Add -> GCC ->C++ 在”Compiler Path”处选择g++编译器的路径,比如我的是

    /home/opt/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ 随便给它命名,方便你自己记忆就行。单击 “Apply”

    Qt Version设置: Tools -> Options..-> Build & Run -> Qt Versions -> Add 然后选择qmake的路径“/usr/local/qt5pi/bin/qmake”,但是发现会提示错误了 原因是,我们之前把img文件卸载了,需要我们重新挂载上,因为交叉编译依赖的是img中的我们移植好的库。挂载完img文件后,重启qtcreator,错误消失: 点击“Apply”完成。

    设备设置: Tools -> Options…-> Devices -> Devices -> Add ->Generic Linux Device -> Start Wizard

    第一行name,随意命名,方便记忆就行。 第二行Hostname or IP address 是开发板的ip地址 第三行username 树莓派默认pi 第五行password 默认raspberry

    点击Next -> finshed 成功

    接下来我们新建一个qt程序

    然后Projects -> Manage Kits… -> Buil&Run -> Kits -> Add 然后设置如下

    接下来点击“Debugger”的“Manage”-> Add ,

    接下来点击”Projects” 在Build & Run下点击Raspberry Pi

    然后运行程序报错:

    在项目文件.pro中添加这两句 target.path = /home/pi/ INSTALLS += target 成功运行:

    再来试一个qml的程序: 新建qml程序选上Raspberry Pi 在项目文件.pro末尾加上 target.path = /home/pi/ 成功运行:

    默认是全屏的。

    至此,Qt5.8的移植已基本完成,本人新手,如有错误的地方还望指出。。。!

    转载请注明原文地址: https://ju.6miu.com/read-675691.html

    最新回复(0)