Добрый день. У меня есть задача запуска 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
На этом фрагменте оно зацикливается.
а можно увидеть сам проблемный БИОС
... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки
Да, конечно, это гигабитовский биос с официального сайта:
download.gigabyte.ru/bios/motherboard_bios_ga-q35m-s2_f7.exe
Распаковываем и указываем Q35ms2.F7 в качестве бинарника BIOS.
Отправить комментарий