尽管配置过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 是成功的,不知是何原因。无奈停摆。
因为前边安装了 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
还是不行,
然后,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下的可执行文件。
至此,完成了这个编译过程。