飞凌OK3568开发板QT应用程序编译流程
开发环境:ubuntu20.04(主机)、飞凌OK3568开发板
一般在linux系统下开发用于ARM开发板的QT应用程序时,直接在主机上开发然后进行交叉编译即可,但有时候ARM开发板的厂家提供的SDK中可能没有适配QT相关的环境,此时需要借助ARM开发板的根文件系统来进行编译,或者需要将QT程序导入到开发板上进行编译。
一、在根文件系统中安装QT编译时需要的相关库文件
1、首先在VM虚拟机中安装qemu相关环境
sudo apt-get install qemu-user-static
2、将Ubuntu20.04源码目录下OK3568-linux-source/ubuntu-20.04-release/ubuntu.img文件扩容后挂载
sudo fsck.ext3 -f ubuntu.img //扩容到8G
sudo resize2fs ubuntu.img 2000000
3、创建target挂载目录,将扩容后的ubuntu.img文件挂载到target目录下
mkdir target
sudo mount ubuntu.img target/
cd target
4、拷贝主机端的配置,因为后续安装软件需要使用网络
sudo cp /usr/bin/qemu-arm-static usr/bin/
sudo cp -b /etc/resolv.conf etc/resolv.conf
sudo vim etc/apt/source.list
5、添加以下内容:
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
6、创建挂载脚本
cd ..
touch mount.sh
vim mount.sh
7、脚本中添加以下内容:
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
8、保存退出,添加可执行权限
sudo chmod +x mount.sh
9、使用脚本挂载
sudo ./mount.sh -m target/
到此,成功将ubuntu.img挂载到qemu上,虚拟机操作用户应该变为root@ubuntu:/# ,此时执行apt安装软件等操作会保留在ubuntu.img文件中
10、修改根文件系统镜像、安装QT串口相关库,有的库根文件系统镜像中已经安装过了,这里只需要安装串口库
sudo apt-get install libqt5serialport5-dev libqt5serialport5
11、退出
exit
12、取消挂载
sudo ./mount.sh -u target/
sudo umount target/
安装完QT相关的库文件后就可以重新挂载根文件系统,然后进行编译QT应用程序。
二、编译QT应用程序
13、下载安装相关工具
sudo apt update && sudo apt install qemu-user-static
14、挂载Ubuntu20.04源码目录下OK3568-linux-source/ubuntu-20.04-release/ubuntu.img文件
cd ~/3568/OK3568-linux-source/ubuntu-20.04-release
mkdir ubuntufs
sudo mount ubuntu.img ubuntufs
15、拷贝QT应用程序的源码到ubuntufs中
sudo cp -r QT应用程序源码路径 ubuntufs/home/forlinx
16、进入ubuntu虚拟环境
cd ubuntufs/
sudo mount -t proc /proc proc/
sudo mount -t sysfs /sys sys/
sudo mount -o bind /dev dev/
sudo mount -o bind /dev/pts dev/pts
sudo mount -o bind /run run/
sudo chroot . /usr/bin/qemu-aarch64-static /bin/bash
此时,虚拟机操作用户应该变为root@ubuntu:/#
17、编译QT应用程序
cd /home/forlinx
cd 拷贝过来的QT应用程序源码所在目录
qmake
make
经过以上流程,正常情况下QT应用程序已经被编译出来了。
18、退出
exit
19、将编译出的ARM架构可执行文件导入到开发板运行即可。
20、取消挂载
cd ..
sudo umount ubuntufs/proc
sudo umount ubuntufs/sys
sudo umount ubuntufs/dev/pts
sudo umount ubuntufs/dev
sudo umount ubuntufs/run
sudo umount ubuntufs