自学内容网 自学内容网

rk3568创建基于Ubuntu18.04交叉编译遇到的坑

尽管配置过rk3288,觉得rk3568也不会有啥问题,但还是掉坑了。
一、安装依赖库
安装完ubuntu后,先进行升级

sudo apt update
sudo apt upgrade

然后安装依赖库

$ sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools 
$ sudo apt-get install device-tree-compiler gcc-aarch64-linux-gnu mtools parted 
$sudo apt-get install libudev-dev libusb-1.0-0-dev python-linaro-image-tools 
$ sudo apt-get install linaro-image-tools autoconf autotools-dev libsigsegv2 m4 
$ sudo apt-get install intltool libdrm-dev curl sed make binutils build-essential gcc 
$ sudo apt-get install g++ bash patch gzip bzip2 perl tar cpio python unzip rsync flex 
$ sudo apt-get install bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev 
$ sudo apt-get install libglade2-dev cvs git mercurial rsync openssh-client subversion 
$ sudo apt-get install asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 
$ sudo apt-get install libssl-dev texinfo genext2fs
$ sudo apt-get install lib32stdc++6
$ sudo apt-get install g++-arm-linux-gnueabihf
$sudo apt-get install gcc-arm-linux-gnueabihf
$ sudo apt-get install g++-aarch64-linux-gnu
$ sudo apt-get install gcc-aarch64-linux-gnu
$ sudo apt-get install liblz4-tool lib32gcc-7-dev g++-7 libstdc++-7-dev
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
$ sudo apt-get install openssh-server vim git fakeroot make gcc libssl-dev bc

二、获取交叉编译工具
荣品的可以从百度网盘里下载到,
gcc_for_rk356x_buildroot.tgz,然后在当前目录下解压到/opt下
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt/
然后添加环境变量,sudo vi ~/.bashrc 或者 sudo gedit ~/.bashrc

export PATH=$PATH:/opt/prebuilts/gcc/linux-x86/aarch64/gcc-buildroot-9.3.0-2020.03-x86 64 aarch64-rockcip-linux-gnu/bin
保存退出

然后运行 source ~/.bashrc 使环境变量生效

接下来,运行echo $PATH,如下图可见到刚添加的路径,表明环境变量添加成功。
在这里插入图片描述
而后,查看aarch64-rockchip-linux-gnu-gcc -v,aarch64-rockchip-linux-gnu-g++ -v 编译器版本,查到即成功。

三、准备qt的源码
先下载源码,查看arm板的lib文件,找到适合自己arm版本的qt源码。
例如我选择的荣品rk3568,是qt5.15.2,所以下载qt5.5.2的源码。
可以去清华大学、中科大等镜像源站去下载。qt的版本查找起来很乱。https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.15/5.15.2/single/下载源码,qt-everywhere-src-5.15.2.tar.xz
然后解压到当前目录下
tar -xvJf qt-everywhere-src-5.15.2.tar.xz
进入qt源码的如下目录并新建文件夹,例如

cd qt-everywhere-src-5.12.2/qtbase/mkspecs
mkdir linux-rockchip 
cd linux-rockchip 
touch qmake.conf # 配置交叉编译工具的文件 
touch qplatformdefs.h

**编辑 Vi qmake.conf**
#
# qmake configuration for building with arm-linux-gnueabi-g++ 
#
MAKEFILE_GENERATOR = UNIX 
CONFIG += incremental 
QMAKE_INCREMENTAL_STYLE = sublib 

include(../common/linux.conf) 
include(../common/gcc-base-unix.conf) 
include(../common/g++-unix.conf) 
# modifications to g++.conf,如果没有配置环境变量,这里一定要为绝对路径 
#注:我配置了环境变量,不用绝对路径不行,不知道哪错了。
QMAKE_CC =aarch64-rockchip-linux-gnu-gcc
QMAKE_CXX = aarch64-rockchip-linux-gnu-g++
QMAKE_LINK =aarch64-rockchip-linux-gnu-g++
QMAKE_LINK_SHLIB=aarch64-rockchip-linux-gnu-g++
# modifications to linux.conf,如果没有配置环境变量,这里一定要为绝对路径 
QMAKE_AR = aarch64-rockchip-linux-gnu-ar cqs 
QMAKE_OBJCOPY =  aarch64-rockchip-linux-gnu-objcopy 
QMAKE_NM =  aarch64-rockchip-linux-gnu-nm -P 
QMAKE_STRIP =aarch64-rockchip-linux-gnu-strip 
load(qt_config)
**再打开 qplatformdefs.h进行编辑** 
#include "../linux-g++/qplatformdefs.h"

也可以采取下面的方式,利用原文件夹linux-aarch64-gnu-g++,然后直接修改qmake.conf中的QMAKE_CC等等,如下图所示。但要注意./configure 里边的参数-xplatform 也要替换为linux-aarch64-gnu-g++.
在这里插入图片描述建立qt源码安装路径

Cd /usr/local
Mkdir qt-arm
Cd qt-arm
Mkdir QtEmbedded-9.3.0-arm

cd qt-everywhere-src-5.12.2,回到源码根目录,然后准备配置编译项,配置基本可以复制如下指令进行配置,需要注意的是参数-xplatform linux-rockchip。

./configure -prefix /usr/local/qt-arm/QtEmbedded-9.3.0-arm 
-confirm-license -opensource -release -make libs -xplatform linux-rockchip -pch  -qt-libjpeg  -qt-libpng  -qt-zlib  -no-opengl -no-sse2  -no-openssl  -no-cups  -no-glib -dbus  -no-xcb  -no-separate-debug-info  -no-iconv

但出现了问题,如下所示,无论在qmake.conf文件中的QMAKE_CC等用aarch64-rockchip-linux-gnu-gcc、全局路径.……/bin/aarch64-rockchip-linux-gnu-gcc,均存在以下问题。
在这里插入图片描述
查看 echo $PATH 是成功的,不知是何原因。无奈停摆。
然而,无意中翻到一个帖子(https://blog.csdn.net/qq_35529025/article/details/129526576)说:“aarch64-rockchip-linux-gnu是国产芯片的ToolChian。猜测与aarch64-linux-gnu兼容,因此后续很多编译与配置实际是使用aarch64-linux-gnu,并且成功。”
因为前边安装了 gcc-aarch64-linux-gnu,g++ -aarch64-linux-gnu,运行aarch64-linux-gnu-g++ -v aarch64-linux-gnu-gcc -v也是可以查到的。
在这里插入图片描述
但实际上 aarch64-linux-gnu-gcc在/usr/bin/aarch64-linux-gnu-gcc,用的编译链也不是opt下的,而是Linaro 7.5.0。不知道为什么!

于是将qmake.conf中的aarch64-rockchip-linux-gnu改为aarch64-linux-gnu,再运./configure,居然过了。
然后,make -j4
sudo make install
然后,出现了这个错误,明明serialport,serialbus在源码里都有,但是还是有问题。
在这里插入图片描述

首先安装

sudo apt-get install qt5-default
sudo apt install libqt5serialport5
sudo apt install libqt5serialport5-dev

还是不行,
又看完这个,https://blog.csdn.net/jecychendf/article/details/139549552,发现serialbus没有lib、include、mkspecs,按这个说法操作,然后重新运行./configure,这步也过了。
在这里插入图片描述
然后,make -j4
sudo make install
结果又来了新问题,一步一个坎。 在这里插入图片描述
删掉qtlocation 模块,然后再执行 ./configure,还是出错。
于是在 ./configure 参数中添加了 -skip qtlocation,然后再sudo make -j4,sudo make install,这里必须sudo make -j4,否则又有错误。
去QtEmbedded-9.3.0-arm文件夹下查看,终于编译完了,并将bin、lib加入环境变量。

最后为qt-everywhere-src-5.15.2安装安装并配置qtcreator,
执行命令:sudo apt-get install qtcreator
后续通过命令行qtcreator即可打开qtcreator,配置编译器、kit、qt版本等。然后新建一个04_can工程文件,选择rk3568编译生成可执行文件,用file查看,生成适用于arm下的可执行文件。

在这里插入图片描述
至此,完成了这个编译过程。


原文地址:https://blog.csdn.net/petertang1975/article/details/143070330

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!