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下的可执行文件。

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

相关推荐
CinzWS12 小时前
A53 FPGA原型验证:从RTL到可运行系统的挑战
arm开发·嵌入式·芯片验证·原型验证·a53
AI服务老曹12 小时前
深度解析:支持 GB28181/RTSP 及异构计算(X86/ARM+GPU/NPU)的 AI 视频管理平台架构方案(附源码交付与 Docker 部署)
arm开发·人工智能·音视频
2302_8138062212 小时前
基础环境篇 – 交叉编译环境搭建与NFS服务配置
arm开发
极创信息12 小时前
信创领域五种主流CPU架构(X86 / ARM / RISC-V / MIPS / LoongArch)
java·arm开发·数据库·spring boot·mysql·软件工程·risc-v
AI服务老曹13 小时前
节省95%开发成本:支持X86/ARM与GPU/NPU异构部署的AI视频云网关架构深度解析
arm开发·人工智能·音视频
徐某人..1 天前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm
2035去旅行1 天前
嵌入式开发,如何选择C标准库
linux·arm开发
进击的小头1 天前
20_第20篇:嵌入式外设驱动开发基础:寄存器级开发与库函数开发对比实战
arm开发·驱动开发·单片机
AI服务老曹1 天前
架构实战:如何构建支持X86/ARM及异构GPU/NPU的跨平台企业级AI视频管理系统?
arm开发·人工智能·架构
ai产品老杨1 天前
【架构深研】如何构建兼容X86/ARM与异构算力的AI视频中台?基于GB28181与边缘计算的源码交付实践
arm开发·人工智能·架构