Как запустить u-boot на QEMU (raspi2)? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь запустить u-boot на QEMU. Но при запуске QEMU он ничего не дает, так почему это не работает и как отлаживать, чтобы выяснить причину?

Это я пробовал:

  1. Установить Ubuntu 18.04 WSL2 на Windows.

  2. Скомпилируйте u-boot для Raspi2

    sudo apt install make gcc bison flex
    sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi
    export CROSS_COMPILE=arm-none-eabi-
    export ARCH=arm
    make rpi_2_defconfig all
    
  3. Запустите QEMU

    qemu-system-arm -M raspi2 -nographic -kernel ./u-boot/u-boot.bin

    А также попробовал QEMU на стороне Windows, и результат тот же.

    PS C:\WINDOWS\system32> qemu-system-arm.exe -M raspi2 --nographic -kernel E:\u-boot\u-boot.bin

Тогда QEMU не сделал не выдает, даже я пытался ctrl+c не может остановить процесс enter image description here

1 Ответ

2 голосов
/ 16 января 2020

К сожалению, это несовместимость между тем, как u-boot ожидает запуска на Raspberry Pi, и способами запуска двоичных файлов, которые QEMU поддерживает для этой платы.

QEMU поддерживает два способа запуска гостевого кода на руке в целом:

  1. Linux ядра; они загружаются с любым ожидаемым протоколом загрузки для ядра на этой плате. Для raspi это будет «запустить основной процессор, но положить вторичные в перо в ожидании на mbox». По сути, QEMU эмулирует минимальное количество микропрограммы, достаточное для загрузки Linux.

  2. Не Linux ядер; они загружаются так, как если бы они выполнялись в первую очередь на необработанном оборудовании, то есть все процессоры начинают выполняться одновременно, и задача гостевого кода - обеспечить любое добавление дополнительных процессоров, которые он хочет выполнить. То есть ваш гостевой код должен выполнять работу прошивки здесь, потому что это фактически прошивка.

Мы предполагаем, что вы ядро ​​Linux, если вы необработанное изображение или подходящее изображение. Если вы изображение ELF, мы предполагаем, что вы не ядро ​​Linux. (Это не совсем идеально, но мы в какой-то степени обременены им из-за обратной совместимости.)

На платах Raspberry Pi вероятнее всего будет запущен двоичный файл u-boot «как будто прошивка запустила его», что не совсем то же самое, что любой из двух вариантов, поддерживаемых QEMU. Это несоответствие может привести к сбою при загрузке (обычно из-за того, что он не ожидает поведения «все процессоры запускаются одновременно»).

Исправление потребует внесения любых изменений в загрузку при загрузке, чтобы оно могло обрабатывать запуск способ, которым QEMU запускает его или меняет на QEMU для поддержки большей эмуляции прошивки этой платы (которую восходящий QEMU будет неохотно принимать).

Альтернативный подход, если нет необходимости использовать плату распи в В частности, следует использовать другую плату, такую ​​как плата «virt», которую u-boot обрабатывает так, чтобы она могла загружаться в QEMU. (Плата «virt» также имеет лучшую поддержку устройств; например, она может работать с сетевыми устройствами и USB-устройствами, чего в настоящее время нет у «raspi» и «raspi2».)

...