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

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

相关推荐
韦德斯10 小时前
嵌入式Linux的RTC读写操作应用
linux·运维·c语言·arm开发·实时音视频
byte轻骑兵11 小时前
嵌入式 ARM Linux 系统构成全解:从硬件到应用层层剖析
linux·arm开发·arm·嵌入式开发
思尔芯S2C14 小时前
面向未来的智能视觉参考设计与汽车架构,思尔芯提供基于Arm技术的创新方案
arm开发·架构·汽车·iot·fpga原型验证·prototyping·智慧视觉
Eternal-Student1 天前
【docker了解】如何将x86镜像转换为适用于Jetson的ARM镜像
arm开发·docker·容器
不怕犯错,就怕不做1 天前
修复kernel编译栈帧大小异常问题error: the frame size of 1928 bytes is larger than 1024 bytes
linux·arm开发·驱动开发
憧憬一下3 天前
UART硬件介绍
arm开发·嵌入式硬件·串口·嵌入式·linux驱动开发
Petal9909123 天前
UEFI学习笔记(十八):ARM电源管理之PSCI和SCMI概述
arm开发·笔记·学习·uefi
古月居GYH3 天前
一文了解ARM内部架构
arm开发·架构
白书宇4 天前
13.100ASK_T113-PRO RTC实验
linux·arm开发·驱动开发·嵌入式硬件·物联网·硬件工程
简简单单一天吃六顿4 天前
rootfs根文件系统在Linux下制作动态库
linux·服务器·arm开发·iot