BIOS на виртуальной машине

Добрый день. У меня есть задача запуска BIOS от реальной материнской платы на виртуальной машине. В качестве машины сейчас используется QEMU с поддержкой Q35 и BIOS для материнской платы с соответствующим чипсетом. Появилось несколько вопросов. Приходилось ли кому-нибудь сталкиваться с чем-то подобным?

тема конечно интересная - сам этим не занимался, но догадываюсь, что с первого шага (или до него?) надо "подложить" БИОС по правильным адресам, а вот какие правильные - 0хFFFFFFFF или FFFF:0000 , это вопрос ... раз уж вспомнили о поддержке Q35 , опять же БИОС в дескрипторном режиме или в "голом", опять же БИОС в УЕФИ-шный ли, и чей АМИ/АВАРД/Феникс и как там (в QEMU) с эмуляцией ЕС и SIO(MIO?), ведь настоящий биос редко вылизывается под абстрактную мать, ну типа - нет SIO и плевать, побежим дальше не обращая внимания, однозначно "зависнет"

... с поддержкой Q35 - ето замечательно - "но, что конкретно ты имела ввиду" (С)

PS:жаль Q35 - неудобная мне вестчь, а то бы сам погонял, а Q4x/5x/7x не поддерживаются?

... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки

С версии 1,3 в QEMU ввели поддержку Q35, т.е в качестве виртуальной машины можно указать нечто, основанное на Q35, а не на i440-м как было раньше. Основные нововведения это PCI-E, ICH9. Нас тоже интересуют более свежие чипсеты, но для начала надо понять как работать с тем что есть. BIOS сейчас не UEFI. Бинарник биоса можно указать вместо seabios который идет с самим QEMU. Виртуальная машина прыгает куда нужно, но судя по всему, где-то на стадии опроса IO-портов ломается. Вот и пытаемся понять что к чему.
Пример одного из зависаний (лог из GDB):

0x00000c19 in ?? ()
1: x/i $cs*16+$eip
0xf0c19: add -0x7c9a,%ax
(gdb)
Watchpoint 1: $eax

Old value = 1979000527
New value = -664136
Watchpoint 8: $eip

Old value = (void (*)()) 0xc19


New value = (void (*)()) 0xc1d
Watchpoint 9: $eflags

Old value = [ PF SF ]
New value = [ PF AF SF ]
0x00000c1d in ?? ()
1: x/i $cs*16+$eip
0xf0c1d: add $0x4,%si
(gdb)
Watchpoint 6: $esi

Old value = -294404
New value = -294400
Watchpoint 8: $eip

Old value = (void (*)()) 0xc1d
New value = (void (*)()) 0xc21
0x00000c21 in ?? ()
1: x/i $cs*16+$eip
0xf0c21: loopw 0xf0c19

На этом фрагменте оно зацикливается.

а можно увидеть сам проблемный БИОС roll

... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки

Да, конечно, это гигабитовский биос с официального сайта:
download.gigabyte.ru/bios/motherboard_bios_ga-q35m-s2_f7.exe


Распаковываем и указываем Q35ms2.F7 в качестве бинарника BIOS.

ВложениеРазмер
q35ms2.f7.zip 500.81 КБ

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей