5

使用QEMU配置一台ARMHF虚拟机

 3 years ago
source link: https://blog.sbw.so/u/use-qemu-create-virtual-machine-armhf.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用QEMU配置一台ARMHF虚拟机

来源: sbw Blog | 浏览: 1886 | 评论: 1 发表时间: 2020-03-21

最近进军了ARM平台编译后端的工作,平时都是用公司的PLC硬件进行测试,无奈成品上除了必需的几个工具之外,像GDB这像的调试软件都没法部署。由于之前搞路由器的时候配过MIPS系统的虚拟机,于是就想着也配台ARM虚拟机来做测试用。

为了尽可能的和目标平台保持一致,我选的是带硬浮点的armhf版本。目标机器是Cortex-A8处理器,而查看了QEMU发现竟然virt machine没有A8支持。不过好在我只需要到基础的ARM指令,也不需要其它硬件,直接用默认cpu——Cortex-A15,这个环境足够测试使用了。

发行版还是选用架构支持众多的Debian版本(Buster),使用它的Netboot进行安装。从这里下载内核vmlinuz和初始映像initrd.gz。

先使用qemu-img创建虚拟磁盘文件:

qemu-img create -f qcow2 debian-armhf.img 10G

和安装mips不同的是,我发现ARM版本带的驱动似乎很少,要么是安装过程中网卡不认,要么就是硬盘不认。坑的是Debian会先下载基础组件,下载半天最后到了硬盘分区的时候才说磁盘找不到,又得退出重新来。最后试出用以下虚拟组合可以顺利安装(具体参数的作用可以参考文档,或者是上一篇安装mips虚拟机的文章):

qemu-system-arm -kernel vmlinuz -initrd initrd.gz -append "root=/dev/ram" -no-reboot -nographic -m 1024 -M virt -netdev user,id=vmnic -device virtio-net-device,netdev=vmnic -drive if=none,file=debian-armhf.img,id=hd0 -device virtio-blk-device,drive=hd0

install armhf on qemu

跟着installer一步步走下去,记得最后不要安装grub。反正也装不上,之后还是需要把内核和内存映像拷出来,用指定内核的方式进行boot。过程中如果网络很慢的话,可以在Host中配置一个HTTP代理给installer用。

安装完成后,就需要从磁盘文件中拷出新的内核和内存映像了,可以参考我之前安装Mips虚拟机的教程,使用qemu-nbd挂载虚拟磁盘。

这样就可以正式启动虚拟机了:

qemu-system-arm -kernel vmlinuz-4.19.0-8-armmp-lpae -initrd initrd.img-4.19.0-8-armmp-lpae -append "root=/dev/vda2" -no-reboot -nographic -m 1024 -M virt -netdev user,id=vmnic -device virtio-net-device,netdev=vmnic -drive if=none,file=debian-armhf.img,id=hd0 -device virtio-blk-device,drive=hd0

注意想比之前安装过程的命令,这里换了从虚拟磁盘中新拷出来的内核和映像文件,root目录也要切换到新的位置,这取决于你在安装过程中的磁盘分区情况。

debian 10 buster armhf

Windows Tips

本来在家测试一切都很顺利,可是当我在公司使用Windows7时就麻烦了,qemu-nbd在Windows上用不成,这下没办法简单的把内核和映像拷出来了。无奈又使用VirtualBox安装了一台虚拟Linux,把原来的qcow2格式的虚拟磁盘使用qemu-img工具转换成VirtualBox支持的格式,同时挂在新虚拟机上,这才把新的内核取出来。

我在安装完成后还备份了安装好的虚拟磁盘文件以及内核和映像文件,想要跳过安装过程直接运行的可以联系我获取。

amv7l Cortex-A15 virtual linux


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK