qemu模拟arm64一直卡住不动

本文解决了一个在Ubuntu16.04系统上使用QEMU模拟ARM64时,模拟器卡住不动的问题。通过更新QEMU版本至3.0并修正内核编译方法,成功启动了模拟器并输出了正常日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

运行qemu-system-aarch64后一直卡在那里不动,终端无信息输出

PC机:Ubuntu 16.04系统
Kernel镜像:下载Kernel 4.9.4源码,自行编译arm64镜像
qemu-system-aarch64版本:Ubuntu系统自带,应为2.5版本
运行命令:qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel arch/arm64/boot/Image --append “rdinit=/linuxrc console=ttyAMA0”
大部分操作参考《奔跑吧Linux内核》,之前有尝试运行32位arm虚拟机,可以成功运行。

做过的尝试

起初怀疑命令行参数有问题,有尝试过修改ram大小,cpu型号等,都没有效果。
后来把kernel 4.9.4改成4.0,下载源码编译后还是有问题;然后就直接使用奔跑吧的github上的4.0,还是有问题。
在微信群里求教,也没有得到有用的答复。
最后怀疑是笔记本配置太低,带不起来,这个问题就此搁置了一段时间。
这个问题最麻烦的是没有输出,也不知道该如何调试。

解决方法

发现编译内核方法有问题

今天心血来潮,换了个配置较高的台式机,重装个ubuntu 16.04系统,想再跑一跑,看是否真和电脑配置有关系。实验下来,发现也不行。所以,和电脑配置没有关系。
在实验过程中,发现网上有人说一种编译方法,和我之前的操作不太一样,引起了我的关注。使用这个方法在4.0内核上就可以运行了。
我之前的编译内核方法:
1.下载内核源码(https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/)
2.解压tar.gz文件
3.把编译好的64位busybox拷贝到代码中,也就是把_install_arm64目录拷贝到代码根目录下
4.创建文件节点
$ cd _install_arm64/dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3
5. 配置环境变量
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
6. make menuconfig (照书中所述,把_install_arm64配置到Initramfs source file中)
7. make -j4
新的编译方式中,我会在6之前先执行make defconfig,然后再make menuconfig
(请原谅一个新手吧:连linux如何编译也没有搞清楚)
虽然只增加了make defconfig,我发现两点变化:一是编译时间特别短,5分钟基本就已经编译完成,而我之前要编译半小时以上;对于kernel 4.0,qemu可以运行起来了,不过kernel 4.9还是会卡在那里不动。

更新qemu到3.0解决问题

既然发现问题与kernel版本有关,我又试了几个版本,发现kernel 4.4也可以,4.6就不行。这么无头绪地试了试。后来突然想到会不会和qemu有关,所以去官网上下载、编译和安装最新的3.0版本,果然解决问题。
下载网页:https://www.qemu.org/download/
解压后的编译命令:
$ ./configure --target-list=aarch64-softmmu
$ make
$ sudo make install
其中,configure时遇到了这个错误
ERROR: glib-2.40 gthread-2.0 is required to compile QEMU
解决方法:
$ sudo apt-get install libglib2.0-dev
重新运行又遇到这个错误
ERROR: pixman >= 0.21.8 not present.
Please install the pixman devel package.
解决方法:
$ sudo apt-get install libpixman-1-dev

make完成后,会生成bin文件,可以看下新的版本号
$ ./aarch64-softmmu/qemu-system-aarch64 --version
QEMU emulator version 3.0.0
Copyright © 2003-2017 Fabrice Bellard and the QEMU Project developers

sudo make install之后,需要重新打开个终端,就能看到版本已经是3.0。
./qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel arch/arm64/boot/Image --append “rdinit=/linuxrc console=ttyAMA0”

其它

在老版本的kernel中,碰到输出的日志前面没有时间信息的问题,是因为默认没有打开一个配置:
Kernel hacking —>
printk and dmesg options —>
Show timing information on printks

额,最后贴你行成功运行后输出的日志吧。
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.9.4 (yutao@yutao) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) ) #1 SMP PREEMPT Wed Oct 3 23:06:09 CST 2018
[ 0.000000] Boot CPU: AArch64 Processor [411fd070]
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 16 MiB at 0x00000000bf000000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv0.2 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] percpu: Embedded 21 pages/cpu @ffff80007efbf000 s47896 r8192 d29928 u86016
[ 0.000000] Detected PIPT I-cache on CPU0
[ 0.000000] CPU features: enabling workaround for ARM erratum 832075
[ 0.000000] CPU features: enabling workaround for ARM erratum 834220
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 516096
[ 0.000000] Kernel command line: rdinit=/linuxrc console=ttyAMA0
[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
[ 0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.000000] Memory: 2028240K/2097152K available (8380K kernel code, 858K rwdata, 3644K rodata, 2112K init, 280K bss, 52528K reserved, 16384K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
[ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
[ 0.000000] .text : 0xffff000008080000 - 0xffff0000088b0000 ( 8384 KB)
[ 0.000000] .rodata : 0xffff0000088b0000 - 0xffff000008c50000 ( 3712 KB)
[ 0.000000] .init : 0xffff000008c50000 - 0xffff000008e60000 ( 2112 KB)
[ 0.000000] .data : 0xffff000008e60000 - 0xffff000008f36a00 ( 859 KB)
[ 0.000000] .bss : 0xffff000008f36a00 - 0xffff000008f7cc3c ( 281 KB)
[ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
[ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
[ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
[ 0.000000] 0xffff7e0000000000 - 0xffff7e0002000000 ( 32 MB actual)
[ 0.000000] memory : 0xffff800000000000 - 0xffff800080000000 ( 2048 MB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1

<think>好的,我现在需要帮助用户了解如何在虚拟机上安装ARM版本的麒麟系统。首先,我需要明确用户的需求。他们可能想在自己的电脑上运行ARM架构的麒麟系统,但他们的主机可能是x86架构的。这时候虚拟机可能无法直接模拟ARM环境,需要考虑使用支持ARM虚拟化的软件,比如QEMU。 接下来,我应该分步骤来介绍安装过程。首先,准备工作是必要的。用户需要下载麒麟系统的ARM镜像,确保是适用于ARM架构的版本。然后,安装QEMU和其他必要的工具,比如在Ubuntu上使用apt-get安装qemu-system-arm。这一步可能需要管理员权限,所以用户需要注意权限问题。 然后,创建虚拟磁盘。使用qemu-img创建qcow2格式的虚拟磁盘,这种格式比较节省空间,适合作为虚拟机硬盘。接下来,启动QEMU进行安装。这里需要指定ARM的机器类型,比如vexpress-a9,分配内存和CPU核心。用户需要注意,不同的机器类型可能需要不同的内核文件,如果麒麟系统需要特定的内核,可能需要额外下载。 安装完成后,再次启动虚拟机。这时候用户可能会遇到无法引导的问题,可能需要检查内核和镜像是否正确。另外,性能问题也是需要考虑的,QEMU模拟ARM的速度可能较慢,用户需要有一定的心理准备或者寻找加速方法,比如使用KVM,但KVM在x86主机上可能不支持ARM虚拟化,这点需要说明清楚。 此外,用户可能需要配置网络和图形界面。如果麒麟系统没有自带,可能需要手动安装相关驱动和工具。还有,共享文件夹和外部设备的使用,可能需要额外的配置步骤,这部分如果用户需要的话可以进一步展开。 在注意事项里,要强调镜像架构的正确性,性能问题,以及内核兼容性。特别是不同版本的QEMU可能会有不同的配置参数,用户需要根据实际情况调整命令。另外,如果用户遇到启动失败,可能需要检查日志,调整机器类型或者内核参数。 最后,建议用户如果只是想体验麒麟系统,可以考虑使用官方提供的虚拟机镜像,或者使用支持ARM的云服务。这样可能更简便,避免复杂的配置过程。 总结整个流程,需要确保步骤清晰,命令准确,同时提醒用户可能遇到的问题和解决办法。保持回答的结构化,分点说明,让用户能够一步步跟随操作。同时,语言要简洁明了,避免使用过于专业的术语,必要时进行解释,比如qcow2格式的优点,QEMU的作用等。这样用户即使对虚拟化不熟悉,也能理解每一步的目的和操作方法。</think>### 虚拟机安装 ARM 版麒麟系统分步指南 #### 一、准备工作 1. **系统镜像获取** - 访问[麒麟系统官网](https://www.kylinos.cn/)下载 **ARM 架构** 的 ISO 镜像(如 `Kylin-Desktop-V10-SP1-ARM.iso`)。 - 若官网未提供 ARM 版,需联系官方或寻找可信第三方资源。 2. **虚拟机软件选择** - **QEMU**(推荐):支持跨架构模拟(x86 主机运行 ARM 虚拟机)。 - Ubuntu/Debian 安装命令: ```bash sudo apt-get install qemu-system-arm virt-manager ``` - **VMware/VirtualBox**:仅支持同架构虚拟化(无法直接运行 ARM 镜像)。 3. **依赖工具检查** - 确保已安装 `qemu-efi-aarch64`(ARM 虚拟机的 UEFI 固件): ```bash sudo apt-get install qemu-efi-aarch64 ``` --- #### 二、创建虚拟磁盘 1. **生成虚拟硬盘** 使用 `qemu-img` 创建动态分配大小的虚拟磁盘(推荐 `qcow2` 格式): ```bash qemu-img create -f qcow2 kylin_arm_disk.qcow2 20G ``` --- #### 三、启动 QEMU 安装系统 1. **基础命令模板** ```bash qemu-system-aarch64 \ -M virt \ # 使用通用 ARM 虚拟机类型 "virt" -cpu cortex-a72 \ # 模拟 ARM Cortex-A72 CPU -smp 4 \ # 分配 4 核 CPU -m 4G \ # 分配 4GB 内存 -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ # 指定 UEFI 固件 -device virtio-gpu-pci \ # 启用虚拟 GPU 加速 -device qemu-xhci \ # USB 3.0 控制器 -device usb-kbd \ # 虚拟键盘 -device usb-mouse \ # 虚拟鼠标 -drive file=kylin_arm_disk.qcow2,if=virtio \ # 挂载虚拟硬盘 -cdrom Kylin-Desktop-V10-SP1-ARM.iso \ # 挂载安装镜像 -boot menu=on # 启动时显示引导菜单 ``` 2. **安装过程** - 启动后按 `Esc` 进入引导菜单,选择从光盘启动。 - 按照图形界面完成分区、用户设置等步骤(与物理机安装一致)。 --- #### 四、首次启动配置 1. **启动已安装的系统** 移除 `-cdrom` 参数并执行: ```bash qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 4 -m 4G \ -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ -device virtio-gpu-pci -device qemu-xhci \ -device usb-kbd -device usb-mouse \ -drive file=kylin_arm_disk.qcow2,if=virtio \ -boot menu=on ``` 2. **性能优化(可选)** - 启用 KVM 加速(需主机 CPU 支持虚拟化): ```bash -enable-kvm -machine virt,gic-version=3 ``` - 添加虚拟网络: ```bash -netdev user,id=net0 -device virtio-net-device,netdev=net0 ``` --- #### 五、常见问题解决 1. **错误:`UEFI interactive shell` 卡住** - 原因:UEFI 未正确检测到引导文件。 - 解决:手动指定内核路径: ```bash -kernel /path/to/vmlinuz \ -initrd /path/to/initrd.img \ -append "root=/dev/vda1" ``` 2. **图形界面卡顿** - 尝试切换显示协议: ```bash -vga none -device virtio-gpu-pci ``` 3. **网络不可用** - 检查是否启用网卡设备,或改用 NAT 模式: ```bash -netdev user,id=eth0 -device virtio-net-device,netdev=eth0 ``` --- #### 六、替代方案(无需手动配置) 1. **使用预构建镜像** 搜索 `Kylin ARM QEMU prebuilt image`,直接下载并运行: ```bash qemu-system-aarch64 -M virt -cpu cortex-a72 -m 4G \ -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ -drive file=Kylin_ARM_Prebuilt.qcow2,format=qcow2 ``` 2. **云服务体验** - 部分云平台(如 AWS Graviton 实例)提供 ARM 虚拟机,可直接部署麒麟系统。 --- ### 关键注意事项 - **架构一致性**:严格确保镜像为 **ARMv8/AArch64** 版本。 - **性能限制**:QEMU 纯软件模拟速度较慢,建议分配至少 4GB 内存。 - **硬件兼容性**:麒麟系统对 ARM 芯片支持有限,优先选择 `virt` 通用机型。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值