2017-01-31 15 views
0

Я пытаюсь подражать плате Arietta G25 с использованием QEMU, но у меня есть некоторые трудности.Эмуляция платы Arietta G25 с QEMU

Я начал с компиляции Linux с исправлениями для поддержки Arietta, как описано here. Затем я просмотрел список поддерживаемых машин с qemu-system-arm -M help и заметил, что, хотя плата Arietta не указана, появилась опция для versatileab и versatilepb, которые имеют тот же процессор, что и Arietta.

Внутри директории ядра arch/arm/boot, я запустил команду

QEMU_AUDIO_DRV=none \ 
qemu-system-arm -M versatilepb \ 
       -m 256M \ 
       -kernel zImage \ 
       -dtb dts/acme-arietta.dtb \ 
       -nographic \ 
       -append "console=ttyAMA0" 

Я ожидал увидеть загрузку ядра и сразу паниковать из-за отсутствия корневой файловой системы. Тем не менее, ни один текст не показывался на моей консоли.

Я попытался сыграть с аргументами в консоли (например, используя ttyS0, добавив ставки и т. Д.), Но это не сработало.

ответ

2

Это очень распространенная точка смятения для людей, пришедших во встроенный мир ARM, которые привыкли к x86. Для x86, по существу, каждый бит аппаратного обеспечения, который вы покупаете, будет выглядеть как обычный ПК - память, последовательный порт и т. Д. Все будут в одном месте и будут доступны одинаково. Поэтому гостевая программа, как правило, работает только в любой из этих систем.

ARM очень отличается. Различные встроенные платы и SoC будут иметь разные устройства и помещать их по разным адресам. Программное обеспечение, запущенное на них, должно быть построено для работы с этими устройствами, и попытка запустить программное обеспечение низкого уровня (например, ядро ​​или загрузчик или изображение прошивки) на неправильном устройстве не будет работать. Что здесь происходит, так это то, что вы сказали: «Загрузите ядро, созданное для Arietta, и скажите, что UART - это то, где живет UART от Arietta», но вы запускаете его на куске эмулируемого оборудования (versatilepb), который очень другой. Ядро попытается поговорить с оборудованием, которое не существует, и просто сработает. Он ничего не может напечатать, потому что он не знает, где находится универсальный UART.

Добавление поддержки эмуляции новой модели платы в QEMU не является тривиальным процессом (подумайте об этом как о том же объеме работы, как добавление поддержки этой платы в ядро ​​Linux), так как вам нужно написать модели устройств для всего оборудования, которое находится на этой плате, и которое пытается использовать гостевое ядро.

 Смежные вопросы

  • Нет связанных вопросов^_^