Запуск чужеродного BIOS в qemu

Feb 17, 2023 12:41

Я пообещал, что буду делать заметки на полях по этому проекту.

При попытке запустить ROM BASIC на 386 плате, я понял что сам ROM успешно подхватился, и куда-то случился переход, но всё остальное почему-то не работало.
При этом в qemu с SeaBIOS всё работало отлично. Было понятно, что проблема в инициализации BIOS, передача управлению кода и т.п. Идей, как отладить это на аппаратной платформе у меня не было. Даже подключая логический анализатор, я всё равно не мог добиться выполнения по шагам.

Стало понятно, что надо брать родной BIOS материнской платы. Изначально планировал просто считать биос программатором. Благо, это обычная ПЗУ в DIP.



Материнская плата

Но, потом подумал, что может найду сразу готовый бинарник. И решил погуглить по материнке, и да, он таки есть. Вот что удалось найти по этой мамке. У меня установлен BIOS AMI, его и буду пробовать.

Сторонний BIOS в qemu завести можно просто, одной командой. Работать он, правда, не будет.

qemu-system-i386 -machine pc -bios SER386AD3.BIN -vga cirrus



Сначала я думал, что делаю что-то не так. Написал вопрос на stackoverflow, qna.habr и у себя в телеге. Самое ироничное, что помогли мне в русском сегменте интернета, а на стеке достаточно грубо ответили и минусов напихали.

В общем, причина сильно хитрее, чем кажется на первый взгляд. Я попробовал BIOS другой материнской платы, и мне даже он вывел что-то на экран, но потом тоже наглухо завис - нужна аппаратная поддержка для запуска BIOS.



qemu позволяет подключаться по gdb к целевой машине, для этого нужно запускать с опциями "-s -S", а после в gdb выполнить команду: "target remote localhost:1234". Достаточно подробно всё разжёвывал на вебинаре, можете посмотреть запись.



В общем, запуск BIOS скорее всего потребует изменения кода qemu, либо добавления различных хаков в сам код BIOS. Пошагово ходить в 64 кБ ассемблеровского кода - очень сомнительное удовольствие. Но, это крутейший ребус, и каких-то готовых рецептов мне нагуглить не удалось.

assembler, qemu, bios, habr

Previous post Next post
Up