qemu-system-x86_64 没有可启动设备。 ARM M2 处理器。 mit6.858

问题描述 投票:0回答:1

我正在学习mit6.858。在Lab1中,我需要使用qemu(自制程序安装的7.2.0版本)在我的M2 Mac上设置实验室环境。

我按照实验室提示的说明并使用以下 shell 脚本运行 课程 VM 映像

#!/bin/bash

if ! command -v qemu-system-x86_64 > /dev/null; then
    echo "You do not have QEMU installed."
    echo "If you are on a Linux system, install QEMU and try again."
    echo "Otherwise, follow the lab instructions for your OS instead of using this script."
    exit
fi

# can we use the -nic option?
version=$(qemu-system-x86_64 --version \
    | grep 'QEMU emulator version' \
    | sed 's/QEMU emulator version \([0-9]\)\.\([0-9]\).*/\1.\2/')
major=$(echo "$version" | cut -d. -f1)
minor=$(echo "$version" | cut -d. -f2)

net=()
if (( major > 2 || major == 2 && minor >= 12 )); then
    net=("-nic" "user,ipv6=off,model=virtio,hostfwd=tcp:127.0.0.1:2222-:2222,hostfwd=tcp:127.0.0.1:8080-:8080,hostfwd=tcp:127.0.0.1:8888-:8888")
else
    net=("-netdev" "user,id=n1,ipv6=off,hostfwd=tcp:127.0.0.1:2222-:2222,hostfwd=tcp:127.0.0.1:8080-:8080,hostfwd=tcp:127.0.0.1:8888-:8888" "-device" "virtio-net,netdev=n1")
fi

qemu-system-x86_64 \
    -m 2048 \
    -nographic -serial mon:stdio \
    "$@" \
    # -enable-kvm \
    "${net[@]}" \
    6.858-x86_64-v22.vmdk

但是我得到了这个输出:

SeaBIOS (version rel-1.16.1-0-g3208b098f51a-prebuilt.qemu.org)


iPXE (http://ipxe.org) 00:03.0 CA00 PCI2.10 PnP PMM+7EFD11A0+7EF311A0 CA00
                                                                               


Booting from Hard Disk...
Boot failed: could not read the boot disk

Booting from Floppy...
Boot failed: could not read the boot disk

Booting from DVD/CD...
Boot failed: Could not read from CDROM (code 0003)
Booting from ROM...
iPXE (PCI 00:03.0) starting execution...ok
iPXE initialising devices...ok



iPXE 1.20.1+ (g4bd0) -- Open Source Network Boot Firmware -- http://ipxe.org
Features: DNS HTTP iSCSI TFTP AoE ELF MBOOT PXE bzImage Menu PXEXT

net0: 52:54:00:12:34:56 using 82540em on 0000:00:03.0 (open)
  [Link:up, TX:0 TXE:0 RX:0 RXE:0]
Configuring (net0 52:54:00:12:34:56)...... ok
net0: 10.0.2.15/255.255.255.0 gw 10.0.2.2
Nothing to boot: No such file or directory (http://ipxe.org/2d03e13b)
No more network devices

No bootable device.

当我输入

ctrlA+X
退出时,我得到了另一行输出。

QEMU: Terminated
./6.858-x86_64-v22.sh: line 30: -nic: command not found

我的自制软件安装是正确的。 我想知道如何在 M2 mac 上正确启动课程虚拟机。

bash macos arm qemu vmdk
1个回答
0
投票

线索

您在问题中没有明确提及的一件事是您修改了脚本,试图注释掉这一行:

    # -enable-kvm \

(删除该标志的原因是 kvm 在 macOS 主机上不可用,而当使用二进制转换在 arm64 主机 CPU 上运行 x86-64 VM 时,替代方案 hvf 不可用。)

问题的另一个线索是这个错误:

./6.858-x86_64-v22.sh: line 30: -nic: command not found

这里发生的事情是,原始脚本中每行末尾的反斜杠 (

\
) 将多行块变成单行:

qemu-system-x86_64 \
    -m 2048 \
    -nographic -serial mon:stdio \
    "$@" \
    -enable-kvm \
    "${net[@]}" \
    6.858-x86_64-v22.vmdk

不幸的是,当用

#
注释一行时,bash 会忽略该行末尾的任何反斜杠 - 这会中断并分割多行命令。

这意味着您的网络和磁盘映像命令行选项未进入 qemu 命令行,这又是它找不到虚拟磁盘映像的原因。

-nic
错误来自于将以下命令视为新命令:

    "${net[@]}" \
    6.858-x86_64-v22.vmdk

解决方案:

不要在适当的位置注释掉标志

-enable-kvm \
:要么完全删除该行,要么将其移出命令并在那里注释掉。

© www.soinside.com 2019 - 2024. All rights reserved.