Re: kexec and frame buffer

Eric W. Biederman
2005-08-04T18:47:05Z

Luca Falavigna <dktrkranz@gmail.com> writes:

> I made three experiments regarding kexec with frame buffer support (vesafb). For
> each of them I gathered dmesg messages from original and relocated kernel, in
> order to easily compare them later on. These tests were run on a virtual machine
> in order to provide the same environment for each experiment.
>
> Here are my tests and related results:
>
>
>
> 1) Frame buffer not enabled
>
> Original kernel command line: root=/dev/hda1 ro
> Relocated kernel command line: root=/dev/hda1 ro
>
> Everything went well, as supposed to be. I was able to read boot messages and to
> see login prompts.
>
>
> 2) Frame buffer enabled in the relocated kernel
>
> Original kernel command line: root=/dev/hda1 ro
> Relocated kernel command line: root=/dev/hda1 ro vga=791
>
> This time I was able to read boot messages and so on, but I couldn't be able to
> load vesafb in the relocated kernel. dmesg showed nothing about vesafb.
>
>
> 3) Frame buffer enabled in the original kernel
>
> Original kernel command line: root=/dev/hda1 ro vga=791
> Relocated kernel command line: root=/dev/hda1 ro {vga=791,}
>
> This time I wasn't able to read boot messages in the relocated kernel, whether
> vga parameter was set or not. I looked at dmesg in order to get some useful
> informations:
>
> Linux version 2.6.13-rc5 (dktrkranz@gandalf) (gcc version 3.3.4 (Debian
> 1:3.3.4-13)) #3 Wed Aug 3 13:39:11 UTC 2005
> [...]
> -Console: colour dummy device 80x25
> +Console: colour VGA+ 80x25
> [...]
> -vesafb: framebuffer at 0xf0000000, mapped to 0xc2880000, using 3072k, total
> 16384k
> -vesafb: mode is 1024x768x16, linelength=2048, pages=0
> -vesafb: protected mode interface info at 00ff:44f0
> -vesafb: scrolling: redraw
> -vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0
> -mtrr: your processor doesn't support write-combining
> -Console: switching to colour frame buffer device 128x48
> -fb0: VESA VGA frame buffer device
> [...]
>
> It seems relocated kernel doesn't (or can't) load vesafb. Is frame buffer
> supported in kexec or there is some work-in-progress?

So without doing passing --real-mode the vga= parameter currently
cannot work. The vga= parameter is processed by vga.S which
make BIOS calls and we bypass all of the BIOS calls.

So you can try with the --real-mode option and you have
a chance of the code working. Or you can figure out which
information video.S passes to the kernel figure out how
to get that same information out of a running kernel
and then /sbin/kexec can be tweaked to pass the current
video mode. Changing frame buffer modes shouldn't work
but you should at least be able to preserve the existing
ones.

Eric