Qemu загружает сырой образ ядра (не ELF) - PullRequest
1 голос
/ 11 октября 2019

Есть ли способ убедить qemu (qemu-system-mipsel v4.1.0, если это имеет значение) загрузить двоичный (не-эльфийский) образ, созданный для (древнего) u-boot?

Iпробовал и мой uImage, и vmlinux.bin, но я всегда получаю «Изображение не ELF»

Полная командная строка:

qemu-system-mipsel -M malta -kernel output/images/vmlinux.bin -serial stdio -drive file=output/images/rootfs.ext2,format=raw -append "rootwait root=/dev/hda" -net nic,model=pcnet -net user

Ошибка:

qemu-system-mipsel: could not load kernel 'output/images/vmlinux.bin': The image is not ELF

... что абсолютно верно! Это изображение (на самом деле его uImage) прекрасно работает на реальной цели (очень похоже на Мальту, но это не имеет значения; сбойное ядро ​​было бы совершенно другой проблемой), используя (в u-boot) что-то вроде:

usb reset; fatload usb 0 85000000 uImage; fatload usb 0 86000000 initram.cpio.xz; setenv bootargs rd_start=0x86000000 rd_size=15000000 USE=usb; bootm 85000000

Как уже говорилось: моя проблема в том, что qemu даже не пытается загрузить изображение, а не в том, что оно не работает во время выполнения.

Что такоеправильное заклинание для использования?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Возможно, вам придется использовать флаг -bios для предоставления образа U-boot, а затем самостоятельно настроить среду для передачи обслуживания ядру. Насколько я понимаю, QEMU требует, чтобы изображения в формате ELF предоставлялись для флага -kernel, предположительно (сильный акцент на этом слове), потому что данные, содержащиеся в заголовках ELF, необходимы для настройки среды вместо настоящего загрузчика (так каквы фактически обходите этот этап загрузки и сразу переходите к выполнению ядра). -bios не имеет этих требований, так как вы, вероятно, не увидите двоичный файл первого этапа с использованием заголовков ELF.

Если вам известна точка входа в образ ядра, которая, как вам кажется, основана на этой команде uboot, вы можете использовать флаг -bios вместе с -device loader,addr=[entry point],cpu-num=0. Однако, если на вашем оборудовании происходит какая-либо MMU, TLB или другая специфичная для арки адресация, у вас могут возникнуть проблемы с этим.

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

0 голосов
/ 12 октября 2019

Вы должны собрать U-Boot для QEMU MIPS и передать его в качестве ядра qemu-system-mips. Вы можете использовать параметр QEMU tftp, чтобы сделать каталог, содержащий uImage, доступным для U-Boot.

Используйте команду U-Boot tftp для загрузки образа ядра и команду bootm для запуска ядра.

...