写在前面
苦辣酸甜时光八载,春夏秋冬志此一生
Qt简介:
Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
QEMU简介:
QEMU(Quick Emulator)是一个开源的虚拟机监视器和模拟器,它可以模拟多种硬件平台,包括处理器架构和设备。通过QEMU,您可以在不同的硬件平台上运行不同的操作系统和应用程序。
QEMU支持的硬件平台非常广泛,包括x86、ARM、MIPS、PowerPC等。您可以使用QEMU模拟运行各种操作系统,如Linux、Windows、Android等。此外,QEMU还支持模拟各种设备,如网络接口卡、磁盘驱动器、USB设备等。
环境:
PC系统:Ubutu20.04(x86_64架构) <本机>
Qt版本:Qt5.12.8(GCC 9.3.0,64bit) <本机>
Qt Creator 版本:4.11.0 <本机>
交叉编译器:gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu <本机>
国产系统:Kylin Linux Advanced Server release V10(4.19.90-25.10.v2101.ky10.aarch64) 部署环境<即arm64架构>
对应版本的ubuntu-base镜像:ubuntu-base-16.04.6-base-arm64
GCC:v8.3.0 部署环境<即arm64架构>
最近由于项目需要做国产系统适配,软件需要适配不同架构CPU!同时又随时需要将x86_64架构下交叉编译的程序部署在ARM64环境进行运行验证,为了便捷开发过程,故在本机x86_64架构下采用QEMU 来模拟出ARM64的开发环境!这样就可以临时脱离ARM64硬件实物,方便调试!
在探索过程也是出现了星星点点的未知错误,摸黑探路,绕了许多弯路。基于此特将经验寄予此文,望更多志同道合的朋友在这条探索的路上少走弯路,尽入主题!
1. 查看系统架构相关指令及ARM64交叉编译器环境搭建
详见笔者Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程进行配置;
2. 安装QEMU
安装方式有两种:指令安装和源码编译安装,选其中一种即可
1)指令安装:
指令安装自动适配本机合适版本,无需指定较为方便!
sudo apt-get install qemu qemu-user-static binfmt-support debootstrap
这种方式安装的QEMU版本一般不是最新的,在Ubuntu20.04下安装的QEMU版本为4.2.1,如果需要更新的版本的话,需要采用下一种方式。
另一种就是使用QEMU源码进行编译安装,好处是可以安装任意版本的QEMU,下文中会详细描述安装步骤以及安装过程中遇到问题的解决办法。
2)源码编译安装:
注1
: 从QEMU官网下载指定版本编译器;
注2
: 从GitHub下载指定版本编译器;
注3
:从GitLab下载指定版本编译器;
下载相应版本的源码,解压安装。或者也可以使用以下指令<笔者采用该方法>
:
特别提示: 源码编译安装须先安装ninja
,否则会报错
git clone https://github.com/ninja-build/ninja.git && cd ninja #下载源码并打开源码目录
./configure.py --bootstrap #执行配置文件
sudo cp ninja /usr/bin/ #复制ninja执行文件到系统
ninja --version #查看安装版本,出现版本即安装成功
安装其它依赖:
sudo apt-get install flex bison
①官网安装 下载太慢了!!!~~~!!!
wget https://download.qemu.org/qemu-8.2.0.tar.xz #下载源码
tar xvJf qemu-8.2.0.tar.xz # 解压
mkdir build && cd build # 在下载目录新建文件夹build(这是必须的,因为configure命令必须在build文件夹下执行)
# 以下均在/build目录下
./../qemu-8.2.0/configure -prefix ~/path/test/qemu-install #执行配置文件,可参看上一个教程
make # 编译源码
make install # 安装
②GitLab安装
mkdir -p ~/path/test && cd ~/path/test #创建qemu目录
git clone https://gitlab.com/qemu-project/qemu.git #下载源码
cd qemu && ls # 进入下载目录并查看目录详情
git submodule init # 初始化子模块
git submodule update --recursive #更新子模块与主仓库中的子模块代码同步
git branch #查看当前分支
./configure --help #查看配置帮助文件,可参看上一个教程
cd ../ && mkdir qemu-build && mkdir qemu-install #在~/path/test下创建编译和安装目录
cd qemu-build/ #进入编译目录
./../qemu/configure -prefix ~/path/test/qemu-install #执行配置文件,可参看上一个教程
make -j $(nproc) 2>&1 | tee build.log #执行make编译,等待十几分钟...
make install #执行安装
执行配置通过
然后在环境变量里 /etc/profile <笔者在此文件添加>或 ~/.bashrc 添加全局变量 <注意添加自己正确路径>并source 可参看笔者上一个教程
$PATH:后面路径为qemu/bin的安装路径
sudo vim /etc/profile
export PATH=$PATH:~/path/test/qemu-install/bin #可参看笔者上一个教程
查看配置是否成功:输入qemu 后按TAB是否出现提示(有对应版本即表示配置成功),查看qemu版本信息:
qemu-aarch64 --version
3. 配置arm64(aarch64)的运行环境
我们需要准备aarch64(即arm64)的文件系统rootfs
1)下载arm64(aarch64)对应版本的base镜像:
从Ubuntu官网下载对应版本的base镜像,笔者下载的ubuntu-base-16.04.6-base-arm64;
2)构建编译环境准备:
mkdir -p ~/path/test/arm64rootfs && cd ~/path/test/arm64rootfs #创建并打开arm64rootfs目录
wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.6/release/ubuntu-base-16.04.6-base-arm64.tar.gz #下载镜像,也可直接在网页下载
sudo tar -xpf ubuntu-base-16.04.6-base-arm64.tar.gz -C ~/path/test/arm64rootfs #解压
3)注册aarch64的运行环境:
update-binfmts --display #查看当前x86 Ubuntu上的注册情况
sudo update-binfmts --enable qemu-aarch64 #注册aarch64的运行环境
为了能在x86 Ubuntu上chroot到~/path/test/arm64rootfs
并执行aarch64的程序,还需要将 qemu-aarch64-static 拷贝到 ~/path/test/arm64rootfs/usr/bin/
;
sudo cp -av ~/path/test/qemu-install/bin/qemu-aarch64 ~/path/test/arm64rootfs/usr/bin/
配置arrch64 Ubuntu的网关:<其它硬件配置按需进行>
sudo cp /etc/resolv.conf ~/path/test/arm64rootfs/etc/resolv.conf
chroot到aarch64 Ubuntu的rootfs:
sudo chroot ~/path/test/arm64rootfs
下面的操作好像没啥用,可忽略
配置root用户密码:passwd root
添加用户以及设置密码:
useradd -G sudo -m -s /bin/bash 用户名 passwd 用户名
4. 验证arm64(aarch64)的运行环境
可将上个教程Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程编译后得到的ARM aarch64架构可执行文件复制到该文件目录下运行验证。笔者还验证了依赖自己编译的aarch64动态链接库的程序也是OK的
过程中有些操作详情笔者略过,可参考笔者上个教程!
Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程
笔者还参考了该片文章x86 Ubuntu上建立aarch64/arm64 Ubuntu的交叉编译链
至此,恭喜您! ARM64(aarch64)的模拟开发环境已成功配置,可以开始使用了!!!
感谢阅读,我是汇创慧玩,希望文章能够解决您的问题。
事为之,须极致!