Hey Michal,

(1) The IBM-PC compatible build of the kernel currently uses the ​serial via the IO port interface. To use the VGA buffer, you'd have to do the work of getting the VGA alphanumeric-mode buffer mapped in at boot, and then write the code to print to the buffer.

(1a) I'd recommend doing this in userspace as part of your root task though, since there's no real advantage (that I can glean) to adding a VGA framebuffer driver to the kernel, unless you have no machines with serial ports, which is probably why you're trying to do this, I'd guess.

(2) Serializing access to hardware between the kernel and other entities is a difficult problem if you also need to preserve trustworthiness proprerties of the kernel. If you use a shared lock between the kernel and userspace for example, you open up a very obvious DoS attack against the kernel.

(3) It is possible, but you'd have to do a the plumbing yourself, yes. Consider doing this in your root task or as part of your userspace environment on top of seL4.

(4) It looks like you'd have to implement both putConsoleChar and putDebugChar, although they do exactly the same thing

(5) Yes, the VGA function is exposed at the same address on all IBM-PC compatibles, no worries

--Hope I helped,

-- 
Kofi Doku Atuah
Kernel engineer
DATA61 | CSIRO


From: Devel <devel-bounces@sel4.systems> on behalf of Michal Podhradsky <mpodhradsky@galois.com>
Sent: 29 July 2017 07:42
To: devel@sel4.systems
Subject: [seL4] VGA buffer as stdout
 
Hello,

I have a question about standard output. I have a camkes component than can write into text-mode VGA buffer (basically it follows this simple example http://wiki.osdev.org/Bare_Bones#Writing_a_kernel_in_C ) but I would like to be able to redirect the kernel messages during startup to be printed on screen using VGA buffer.

Once another component (either Linux in a VM, or some other camkes app) will initialize, it will be able to take control over the screen output (and for example show login window etc). 

My questions is - is this possible with seL4? And if so, what would it entail? 

I guess in the minimal version, I would have to provide a different implementation of seL4_DebugPutChar, is that correct? 

The VGA standard seems to define the buffer to be at 0xB8000, so it should be consistent between x86 platforms.


Regards
Michal