最近需要在 X86_64 的 Windows 10 的机器上安装 arm64 指令集的银河麒麟 v10 操作系统,因此研究一下 QEMU 的使用方法。
简介
QEMU 是一款开源、跨平台的机器模拟器与虚拟机工具,核心两大能力:硬件模拟(全系统仿真) 和 用户态程序翻译,不需要依赖硬件虚拟化也能运行。
安装
Windows 安装
- 下载二进制安装包:https://qemu.weilnetz.de/w64/ ,下载
qemu‑w64‑setup‑xxxx.exe安装程序 - 安装,记住安装路径,默认:
C:\Program Files\qemu - 把这个目录加到系统 PATH 环境变量(必须,否则 cmd 找不到 qemu‑xxx.exe)
- 关闭旧 cmd/PowerShell,新开终端验证
1 | qemu-system-aarch64.exe --version |
Windows 模拟 arm64:需要额外下载
QEMU_EFI.fdUEFI 固件文件。
使用
准备文件
- 下载** ARM64 UEFI 固件 QEMU_EFI.fd(edk2‑aarch64‑code.fd)**,ARM 虚拟机没有 BIOS,靠 EFI 固件引导。
- 下载 ARM64 系统 ISO 镜像(Ubuntu‑ARM64 / 银河麒麟 ARM64 等)
- 创建虚拟磁盘(cmd 执行)
1 | qemu-img create -f qcow2 kylin_arm64_disk.qcow2 60G |
安装系统
安装 银河麒麟V10服务器版
把下面保存为 install.bat,修改路径为你本机真实路径:
1 | @echo off |
参数说明:
-M virt:QEMU 标准 ARM 虚拟机板卡-cpu cortex‑a72:模拟 ARMv8‑A CPU;也可以写max-accel tcg,thread=multi:软件多线程翻译,x86 Windows 唯一可用加速选项virtio-win-nic user:NAT 网络,虚拟机可访问外网-bios:指定 aarch64 EFI 固件,**缺少直接黑屏无法启动
安装完成后,把命令里的 cdrom 那一行删掉,就是正常启动虚拟机脚本。
安装 银河麒麟V10桌面版
把下面保存为 install.bat,修改路径为你本机真实路径:
1 | @echo off |
参数说明:
-M virt:QEMU 标准 ARM 虚拟机板卡-cpu cortex‑a72:模拟 ARMv8‑A CPU;也可以写max-accel tcg,thread=multi:软件多线程翻译,x86 Windows 唯一可用加速选项virtio-win-nic user:NAT 网络,虚拟机可访问外网-bios:指定 aarch64 EFI 固件,**缺少直接黑屏无法启动
安装完成后,把命令里的 cdrom 那一行删掉,就是正常启动虚拟机脚本。
启动系统
启动银河麒麟V10桌面版
把下面保存为 start_gui.bat,修改路径为你本机真实路径:
1 | @echo off |
参数说明:
- 与安装脚本相比,主要删除了 cdrom 那一行
- -device virtio-gpu-pci,安装时使用的是 virtio-gpu,两者区别是: 底层 GPU 逻辑完全一样,只是总线类型不同。由于场景为
-machine virt(aarch64 virt 板子),推荐用 virtio-gpu-pci,麒麟 V10 ARM64 对 PCI 设备驱动识别更稳。 - -netdev user,id=net0,hostfwd=tcp::2222-:22,宿主机的 2222 端口映射虚拟机ssh 22 端口。
- -device e1000,netdev=net0, e1000 是模拟传统网卡,稳定性更好,避开部分 QEMU 版本 virtio-net + user netdev 的端口转发异常。
进入桌面后,设置默认启动目标:多用户字符模式,然后把下面保存为 start_nogui.bat,以便下次直接进入:
1 | @echo off |
启动银河麒麟V10服务器版
把下面保存为 start.bat,修改路径为你本机真实路径:
1 | @echo off |
参数说明:
- 与安装脚本相比,主要删除了 cdrom 那一行
- -device virtio-gpu-pci,安装时使用的是 virtio-gpu,两者区别是: 底层 GPU 逻辑完全一样,只是总线类型不同。由于场景为
-machine virt(aarch64 virt 板子),推荐用 virtio-gpu-pci,麒麟 V10 ARM64 对 PCI 设备驱动识别更稳。 - -netdev user,id=net0,hostfwd=tcp::2222-:22,宿主机的 2222 端口映射虚拟机ssh 22 端口。
- -device e1000,netdev=net0, e1000 是模拟传统网卡,稳定性更好,避开部分 QEMU 版本 virtio-net + user netdev 的端口转发异常。
SSH访问
银河麒麟V10服务器版设置
- 确认 ssh 服务是否就绪
1 | # 1. 查看sshd状态 |
- 解禁 root 直接 ssh 登录
1 | # 虚拟机内修改ssh配置允许root登录(测试用) |
生产环境不建议 root 直接 ssh;你可以新建普通用户登录。
银河麒麟V10桌面版设置
- 确认 ssh 服务是否就绪
1 | # 1. 查看sshd状态 |
- ssh 访问无法执行可执行程序的问题
原因是内核启动参数:security=kysec。
KYSEC 是银河麒麟 V10 内置安全模块,执行控制(exec control)开启强制模式时,只允许系统自带、带有 kysec 安全标记的 ELF 程序运行。
自编译的hello、上传的pi属于外来二进制,没有 kysec 安全标记,execve 直接返回 EACCES,bash 提示权限不够,和你现象完全吻合
1 | # 查看**当前正在生效**的内核启动参数 |
问题记录
虚拟机分辨率调整
启动麒麟v10桌面版系统,分辨率太低,只有640*480的解决方法:
- 打开终端,输入命令
1 | # 打开终端,查看显示器名称 |
虚拟机启动太慢
1 | # 设置默认启动目标:多用户字符模式 |
参考链接
- qemu,by qemu.
- Running QEMU VMs on ARM64: UEFI Requirements,by Nikita Vakula.
- windows qemu 安装 arm 虚拟机,by 三希.
- 安装与配置麒麟V10操作系统,by huawei.