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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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 \ на месте: либо удалите строку полностью, либо переместите ее за пределы команды и закомментируйте там.

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