近期,我的师弟咨询我关于Arm64架构的国产CPU+国产OS开发工具链问题。他们公司因为接手了一个国企的单子,需要在这类环境下开发程序。说实在的我也没有用过这个平台,但是基于常识,推测只要基于C++和Qt,应该问题不大。
1. 用MSYS2 Qemu在 windows 下模拟ARM
我没有国产Arm64架构的CPU计算机,又不想因为这个托请,自己去买一台,只能使用跨架构的模拟器 qemu 了。第一反应就是用pacman -Ss 查了一下,果然,qemu在msys2就有。
pacman -S mingw-w64-ucrt-x86_64-qemu
而后,去某国产系统官网下载iso安装包。这里感慨一下,这个国产系统为了适配各类硬件生产商,在Debain结构的官网镜像里,可以找到近百个不同的文件夹。笔者先是下载标准版桌面系统,发现包并不一致,g++都无法安装。后来,从众多的OEM版本中,找到了朋友使用的品牌的OEM镜像,才正确安装了g++。这里假设下载iso为 install.iso,则在msys2 ucrt64环境下,创建硬盘:
qemu-img create disk.qcow2 -f qcow2 128G
开始安装前,还要在下面的网址下载 UEFI的镜像:
wget https://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd
随后启动安装:
qemu-system-aarch64.exe -m 16384
-cpu cortex-a76 -smp 2,sockets=2,cores=1 -M virt
-bios QEMU_EFI.fd -device VGA -device nec-usb-xhci
-device usb-mouse -device usb-kbd -drive if=none,file=disk.qcow2,id=hd0
-device virtio-blk-device,drive=hd0
-drive if=none,file=install.iso,id=cdrom,media=cdrom
-device virtio-scsi-device -device scsi-cd,drive=cdrom -audio driver=sdl,model=ac97
这里要有心理准备,安装非常慢,这是因为windows下模拟arm,机器码都是要经过转译,快不了。
2. 在系统中安装需要的包
一旦安装完成,则可以随时使用命令启动:
qemu-system-aarch64.exe -m 16384-cpu cortex-a76 -smp 4,sockets=4,cores=1 -M virt-bios QEMU_EFI.fd -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=disk.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -device virtio-scsi-device -audio driver=sdl,model=ac97-device virtio-gpu-pci,xres=1920,yres=1080
启动后,使用apt更新并安装软件。
sudo apt install
libqwt-qt5-dev qt5keychain-dev libqt5x11extras5-dev
libqt5webview5-dev libqt5websockets5-dev
libqt5webengine5 libqt5webchannel5-dev
libqt5virtualkeyboard5-dev libqt5texttospeech5-dev
libqt5svg5-dev libqt5sql5-tds libqt5sql5-psql
libqt5sql5-odbc libqt5sql5-mysql libqt5sql5-ibase
libqt5serialport5-dev libqt5serialbus5-plugins
libqt5serialbus5-dev libqt5sensors5-dev libqt5remoteobjects5-dev
libqt5positioning5-plugins libqt5networkauth5-dev
libqt5location5-plugins libqt5gstreamer-dev libqt5gamepad5-dev
libqt5datavisualization5-dev libqt5bluetooth5
libqt5-ukui-style-dev qt5-style-plugins
qtmultimedia5-examples qtwebengine5-examples
qtbase5-examples qtcharts5-examples qtdatavisualization5-examples
qtdeclarative5-dev qtlocation5-dev qtmultimedia5-dev
qtmultimedia5-examples qtquickcontrols2-5-dev
qtpositioning5-dev qttools5-dev qtwebengine5-dev nano geany mc
国产系统的包基本就是debain的包,但是软件版本比较旧,比如Qt还停留在 5.12 版本。
3. 测试情况
由于qemu实在太慢了,下面的测试主要是查看包的完整性,启动软件玩一玩,没有做深度的测试。
(1)软件无线电
GNU-Radio\ GQRX\ Soapy 的包是完整的。libuhd为 3.15版本。
(2)科学计算
Octave 的 pkg 是完整的。Python的支持是完整的。
(3)数据库
PostgreSQL可用。
(4)桌面编程
Qt Creator,Qt 5.12可用。
(5)服务器
apache2可用
通过包情况分析,该国产系统应该是基于debain 进行消化吸收和适配的。但是软件的版本比较老,落后debain3年左右。内核是5.4版的。国产芯片、国产OS ,或者说更合适的说法是自主可控OS,经历了二十年的发展(还记得红旗、永中吗?)着实不易。作为Native C++/Qt开发者,国产平台的完整性还是可以的,就是版本迭代不够快。处于后发的状态,生态的建立是非常难的。更何况我们还没有测试GPU。新年之际,衷心祝福国产自主可控芯片和基础软件能够披荆斩棘,茁壮成长。