qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Where is vga-rom mapped in guest system memory?


From: Jaeyong Yoo
Subject: Re: [Qemu-devel] Where is vga-rom mapped in guest system memory?
Date: Wed, 14 May 2014 13:01:01 +0900

> -----Original Message-----
> From: address@hidden [mailto:qemu-
> address@hidden On Behalf Of Laszlo
> Ersek
> Sent: Tuesday, May 13, 2014 10:55 PM
> To: address@hidden; address@hidden
> Subject: Re: [Qemu-devel] Where is vga-rom mapped in guest system memory?
> 
> On 05/13/14 14:58, Jaeyong Yoo wrote:
> > Hello qemu!
> >
> >
> >
> > I am currently writing a vga device emulator and need to debug vga-bios.
> >
> > What I want is to set break-point on the entry of vga-bios and for
> > this,
> >
> > I'm reading qemu source around pci device and rom-related memory
> > regions
> >
> > to find out where should I set break point. And, sadly, got stuck.
> >
> >
> >
> > Could you give me any advice about the memory-mapped address of
> > vga-rom or
> >
> > any pointers?
> 
> Some.
> 
> The vgabios binary is loaded from the file identified by the "romfile"
> property of the VGA card that you select. For example,
> 
>   -device qxl-vga,romfile=...
> 
> or
> 
>   -vga qxl \
>   -global qxl-vga.romfile=...
> 
> Of course the property has a default value for each VGA card. See the
> 
>   k->romfile = ...
> 
> assignments in:
> - cirrus_vga_class_init() -- vgabios-cirrus.bin
> - qxl_primary_class_init() -- vgabios-qxl.bin
> - vga_class_init() -- vgabios-stdvga.bin
> 
> I think the oprom is loaded in
> 
> pci_qdev_init() [hw/pci/pci.c]
>   pci_add_option_rom()
> 
> The vgabios oprom is shadowed from ROM (pci address space) to RAM by the
> SeaBIOS initialization code, and then POSTed:
> 
> handle_post() [src/post.c]
>   make_bios_writable() [src/fw/shadow.c]
>     make_bios_writable_intel()
>       __make_bios_writable_intel() -- shadows vgabios in C segment too
>   dopost() [src/post.c]
>     maininit()
>       vgarom_setup() [src/optionroms.c]
>         init_pcirom()
>           init_optionrom()
>             callrom()
>               __callrom()
>                 _rom_header_entry [vgasrc/vgaentry.S]
>                   vga_post() [vgasrc/vgainit.c]
> 
> You can instrument vga_post() in the SeaBIOS source [vgasrc/vgainit.c],
> rebuild the vgabios binary, and load this binary with the video card's
> romfile=... property on the qemu command line.

Thanks for the answer. It is the exact code-path that I was looking for :-)

I have one follow-up question.
It looks like seabios (bios.bin) includes the vgabios (such as vga_post
functions). And this bios.bin is not loaded as vgabios-stdvga.bin (the
one that you mentioned in vga_class_init). I'm not clearly understanding
the difference between vgabios inside bios.bin and vgabios-stdvga.bin.
Could you tell me the difference?

Additionally, currently, what I'm trying to do is to port the VirtualBox's
graphics stack to qemu and I'm expecting to use VirtualBox's vgabios. In this
case, do I have to modify something in seabios? I thought all I need to do is
to set romfile as the path to the VirtualBox vgabios, and now I'm not sure...


Best regards,
Jaeyong




reply via email to

[Prev in Thread] Current Thread [Next in Thread]