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

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

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

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

  3. 将系统镜像挂载到我们之前创建的目录:
    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

  4. 交叉编译工具
    找与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来代替,挨个装一遍吧。

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

  6. 运行脚本配置编译
    进入到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的移植已基本完成,本人新手,如有错误的地方还望指出。。。!

猜你喜欢

转载自blog.csdn.net/a844651990/article/details/70173209
今日推荐