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

尽管配置过rk3288,觉得rk3568也不会有啥问题,但还是掉坑了。

一、安装依赖库

安装完ubuntu后,先进行升级

c 复制代码
sudo apt update
sudo apt upgrade

然后安装依赖库

c 复制代码
$ 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

c 复制代码
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源码的如下目录并新建文件夹,例如

c 复制代码
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)
c 复制代码
**再打开 qplatformdefs.h进行编辑** 
#include "../linux-g++/qplatformdefs.h"

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

c 复制代码
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。

c 复制代码
./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在源码里都有,但是还是有问题。

首先安装

c 复制代码
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下的可执行文件。

至此,完成了这个编译过程。

相关推荐
生涯にわたる学び2 小时前
自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
arm开发
李小白202002027 小时前
windows 10系统安装arm虚拟机
arm开发
亿道电子Emdoor2 天前
【ARM】PACK包管理
arm开发
wypywyp3 天前
基于arm芯片的驱动开发——温湿度传感器dht11
arm开发·驱动开发
亿道电子Emdoor3 天前
【ARM】MDK如何实现使用Hex文件完成程序烧录
arm开发·stm32·单片机
彻骨寒风3 天前
在麒麟 ARM (aarch64)安装OpenJDK11和elasticsearchkibana
运维·arm开发·jenkins
2301_1472583694 天前
ARM - GPIO 标准库开发
arm开发
Yeats_Liao4 天前
X86、X64 与 ARM:架构的剖析与比较
arm开发·架构
ShiMetaPi5 天前
【GM3568JHF】FPGA+ARM异构开发板 使用指南:显示与触摸
arm开发·嵌入式硬件·fpga开发·rk3568
亿道电子Emdoor5 天前
【ARM】MDK出现:Unable to find ARM libraries
arm开发·stm32·单片机