Qemu-system-x86_64 Нет загрузочного устройства. Процессор ARM M2. мит6.858

Я изучаю mit6.858. В Lab1 мне нужно настроить лабораторную среду на моем M2 Mac с помощью qemu (версия 7.2.0, установленная homebrew).

Я следую инструкциям лабораторных подсказок и запускаю курс VM Image с этими сценариями оболочки:

#!/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

Моя доморощенная установка правильная. Я хотел бы знать, как правильно запустить виртуальную машину курса на Mac M2.

Кроме того, этот скрипт, вероятно, должен избегать бесполезного grep

tripleee 11.01.2023 13:03

Привет. Я попытался удалить grep $ qemu-system-x86_64 --version | sed 's/QEMU emulator version \([0-9]\)\.\([0-9]\).*/\1.\2/' и получить вывод с дополнительной строкой Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers Поэтому я думаю, что grep нельзя опускать. @tripleee

Sugar-Coder 12.01.2023 02:17
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
1
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Таким образом, на первый взгляд это выглядело не по теме, поскольку не являлось вопросом программирования как таковым (запуск Qemu — это скорее вопрос superuser.com или serverfault.com, или, возможно, apple.stackexchange.com, поскольку мы говорим о запуске Qemu на macOS ), но при более внимательном рассмотрении ваша проблема выглядит как bash скриптовая, что снова делает ее актуальной!

Подсказки

Одна вещь, которую вы явно не упомянули в своем вопросе, это то, что вы изменили скрипт, пытаясь закомментировать эту строку:

    # -enable-kvm \

(Причина удаления этого флага заключается в том, что kvm недоступен на хостах macOS, а альтернатива, hvf, недоступна при использовании двоичной трансляции для запуска виртуальной машины x86-64 на хост-процессоре arm64.)

Еще одним ключом к проблеме является эта ошибка:

./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 \ на месте: либо удалите строку полностью, либо переместите ее за пределы команды и закомментируйте там.

Другие вопросы по теме