1、下载目标armhf的img镜像,我选的是firefly的rk3288的rootfs镜像:
rk3288_ubuntu_18.04_armhf_ext4_v2.04_20201125-1538_DESKTOP.img
2、修改该镜像文件大小(方便后面编译操作)
apt install qemu
qemu-img resize rk3288_ubuntu_18.04_armhf_ext4_v2.04_20201125-1538_DESKTOP.img +20G
e2fsck -f rk3288_ubuntu_18.04_armhf_ext4_v2.04_20201125-1538_DESKTOP.img
resize2fs rk3288_ubuntu_18.04_armhf_ext4_v2.04_20201125-1538_DESKTOP.img
3、挂载镜像
mkdir rootfs
mount rk3288_ubuntu_18.04_armhf_ext4_v2.04_20201125-1538_DESKTOP.img rootfs/
4、安装环境
sudo apt-get install qemu-user-static -y
cp /usr/bin/qemu-arm-static rootfs/usr/bin/
echo 'nameserver 114.114.114.114' >> rootfs/etc/resolv.conf
echo 'nameserver 8.8.8.8' >> rootfs/etc/resolv.conf
echo 'DNS=114.114.114.114 8.8.8.8' >> rootfs/etc/systemd/resolved.conf
5、chroot切换到rootfs,推荐使用脚本 mount.sh
#!/bin/bash
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 mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
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
6、解压源码到rootfs
tar -xf /opt/qt-everywhere-opensource-src-5.15.14.tar.xz -C rootfs/opt/
7、执行mount.sh切换到镜像内
bash ./mount.sh -m rootfs/
8、安装环境
mkdir /tmp
chmod 777 /tmp
apt update
apt-get -y install libgl1-mesa-dev libglu1-mesa-dev
apt-get -y install libxkbcommon-x11-dev
apt-get -y install libxkbcommon-x11-dev
apt-get -y install libxcb-xinerama0-dev
apt-get -y install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
apt-get -y install build-essential
apt-get -y install libgl1-mesa-dev
apt-get -y install libglu1-mesa-dev
apt-get -y install libegl1-mesa-dev
apt-get -y install freeglut3-dev
apt-get -y install flex bison gperf libicu-dev libxslt-dev ruby
apt-get -y install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdbus-1-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison
apt-get -y install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
apt-get -y install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
apt-get -y install libclang-6.0-dev llvm-6.0
apt-get -y install bluez
apt-get -y install libbluetooth-dev
apt-get -y install nodejs
apt-get -y install libxcb*
apt-get -y install default-libmysqld-dev default-libmysqlclient-dev
apt-get -y install libsqlite*
apt-get -y install libxkbfile*
9、编译
cd /opt/qt-everywhere-src-5.15.14/
mkdir -p /opt/Qt/5.15.14_armhf
./configure -prefix /opt/Qt/5.15.14_armhf -release -opensource -confirm-license -nomake examples -nomake tests -recheck-all
make -j64 && make install
echo $?
sync
10、ctrl+d退出chroot,然后执行取消挂载命令
bash mount.sh -u rootfs/
11、压缩5.15.14_armhf 打包后的文件
tar -jcvf qt5.15.14_armhf_all.tar.bz rootfs/opt/Qt/5.15.14_armhf/
12、卸载img镜像挂载
umount rootfs