飛凌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