QEMU Updates

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

 



Quick update: Hardcoding works just fine. QEMU now boots without any  
intervention.

Best,
-D

On Apr 27, 2009, at 9:39 AM, David Albert wrote:

> Grrr, I sent this last night, but it didn't go through because of the
> attached image.
>
> Here's the link to the image I wanted to send: http://dave.is/bootinglinux.png
>
> ---
>
> Hey All,
>
> Here's an update on the progress I've made. I now have QEMU booting on
> the emulated device with graphical output on SDL. The image is
> distorted, most likely some problem with the resolution passed into
> the kernel. The catch is that I still can't accomplish this without
> using gdb to change a function parameter at runtime.
>
> What happens without this intervention is that qemu_console_resize()
> gets called with a width of 640. Because the emulator (and the device)
> have a screen width of 320, SDL dies a quick death after trying to set
> the frame buffer to an unsupported mode. In gdb, breaking on
> qemu_console_resize and setting width=320 is enough to make qemu boot.
> I have been unable to direct keyboard input at the emulated system,
> but that is a battle for another day.
>
> Unlike in graphics_console_init, It does not seem that width is
> hardcoded to 640. One would think it would be easy enough to find out
> where qemu_console_resize is getting called from, but all gdb will
> give me as a backtrace is the following:
>
> #0  qemu_console_resize (ds=0x88e008, width=640, height=480) at
> console.c:1424
> #1  0x00147cec in __stl_mmu (addr=3363889180, val=6185, mmu_idx=0)
>    at ../softmmu_template.h:214
> #2  0x01303708 in ?? ()
>
> Using grep and some well placed printf()s, I've narrowed down my
> search to pl110_resize in pl110.c. which is called from pl110_write().
> The PL110 is a color LCD controller.  This seems to agree with the
> info I can get from gdb. Frame 1 points to this at line 214 of
> softmmu_template.h:
>
> io_mem_write[index][SHIFT](io_mem_opaque[index], physaddr, val);
>
> in a function called glue().
>
> I believe the function pointer to pl110_resize is stored in
> io_mem_write with the call cpu_register_io_memory() from pl110_init().
>
> What this all looks like is a call to mmapped IO to manipulate the
> screen. If you look at the call to pl110_write, val is used to set the
> width and height (but not at the same time) for pl110_resize. val is
> of course passed into glue() in soft_mmu.h and I cannot find out where
> glue is being called from. glue() is also an inline function, which
> might affect gdb in ways I don't fully know about. If any of you guys
> have a deeper understanding of either qemu or gdb than I do, perhaps
> you can point me in the right direction.
>
> Best,
> -David
>
> _______________________________________________
> Android-virt mailing list
> Android-virt at lists.cs.columbia.edu
> https://lists.cs.columbia.edu/cucslists/listinfo/android-virt
>



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux