seoul: support headless mode

+ run kernelbuild in headless mode, output dumped via serial output
This commit is contained in:
Alexander Boettcher 2013-08-21 12:01:00 +02:00 committed by Norman Feske
parent 6d5a66d8e7
commit 6dd6525b48
7 changed files with 30 additions and 15 deletions

View File

@ -19,6 +19,7 @@ set use_nic_bridge 0
set use_usb 0
set use_framebuffer 1
set use_fancy_stuff 0
set memory_vmm_vm "128M"

View File

@ -17,6 +17,7 @@ set use_nic_bridge 0
set use_usb 0
set use_framebuffer 1
set use_fancy_stuff 0
set memory_vmm_vm "128M"

View File

@ -20,6 +20,7 @@ set use_nic_bridge 1
set use_usb 0
set use_framebuffer 1
set use_fancy_stuff 1
set memory_init "288M"

View File

@ -24,6 +24,7 @@ set use_nic_bridge 0
set use_usb 0
set use_framebuffer 0
set use_fancy_stuff 0
set memory_vmm_vm "950M"

View File

@ -17,6 +17,7 @@ set use_nic_bridge 0
set use_usb 0
set use_framebuffer 1
set use_fancy_stuff 0
set memory_vmm_vm "128M"

View File

@ -21,9 +21,10 @@ set build_components {
vancouver
drivers/pci
drivers/input
drivers/framebuffer
}
if {$use_fancy_stuff} { set use_framebuffer 1 }
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if $use_usb build_components drivers/usb
@ -31,6 +32,7 @@ lappend_if $use_block_ide build_components drivers/atapi
lappend_if $use_block_sata build_components drivers/ahci
lappend_if $use_nic_session build_components drivers/nic
lappend_if $use_nic_bridge build_components server/nic_bridge
lappend_if $use_framebuffer build_components drivers/framebuffer
lappend_if $use_fancy_stuff build_components server/nitpicker
lappend_if $use_fancy_stuff build_components server/liquid_framebuffer
lappend_if $use_fancy_stuff build_components app/launchpad
@ -207,7 +209,7 @@ append_if [expr $use_nic_session && $use_nic_bridge] config {
</start>
}
append config {
append_if $use_framebuffer config {
<start name="fb_drv">
<resource name="RAM" quantum="8M"/>
<provides><service name="Framebuffer"/></provides>
@ -232,8 +234,9 @@ append_if [expr $use_nic_session && $use_nic_bridge] config {
<service name="Nic"> <child name="nic_bridge"/> </service>}
append_if [expr $use_nic_session && !$use_nic_bridge] config {
<service name="Nic"> <child name="nic_drv"/> </service>}
append_if $use_framebuffer config {
<service name="Framebuffer"><child name="fb_drv"/></service>}
append config {
<service name="Framebuffer"><child name="fb_drv"/></service>
<service name="Rtc"><child name="rtc_drv"/></service>
<any-service><parent/><any-child/></any-service>
</route>
@ -343,7 +346,6 @@ install_config $config
set boot_modules {
core init
pci_drv
fb_drv
timer
rtc_drv
vancouver
@ -358,6 +360,7 @@ lappend_if $use_block_ide boot_modules atapi_drv
lappend_if $use_block_sata boot_modules ahci
lappend_if $use_nic_session boot_modules nic_drv
lappend_if $use_nic_bridge boot_modules nic_bridge
lappend_if $use_framebuffer boot_modules fb_drv
lappend_if $use_fancy_stuff boot_modules nitpicker
lappend_if $use_fancy_stuff boot_modules liquid_fb
lappend_if $use_fancy_stuff boot_modules launchpad

View File

@ -187,25 +187,32 @@ bool Vancouver_console::receive(MessageMemRegion &msg)
void Vancouver_console::entry()
{
Logging::printf("Hello, this is VancouverConsole.\n");
/*
* Init sessions to the required external services
*/
enum { CONFIG_ALPHA = false };
static Framebuffer::Connection framebuffer;
static Input::Connection input;
static Timer::Connection timer;
static Input::Connection input;
static Timer::Connection timer;
Framebuffer::Connection *framebuffer = 0;
try {
framebuffer = new (env()->heap()) Framebuffer::Connection();
} catch (...) {
PERR("Headless mode - no framebuffer session available");
_startup_lock.unlock();
return;
}
Genode::Dataspace_capability ev_ds_cap = input.dataspace();
Input::Event *ev_buf = static_cast<Input::Event *>
(env()->rm_session()->attach(ev_ds_cap));
_fb_size = Dataspace_client(framebuffer.dataspace()).size();
_fb_mode = framebuffer.mode();
_fb_size = Dataspace_client(framebuffer->dataspace()).size();
_fb_mode = framebuffer->mode();
_pixels = env()->rm_session()->attach(framebuffer.dataspace());
_pixels = env()->rm_session()->attach(framebuffer->dataspace());
Chunky_canvas<Pixel_rgb565> canvas((Pixel_rgb565 *) _pixels,
Area(_fb_mode.width(),
@ -273,7 +280,7 @@ void Vancouver_console::entry()
}
} else {
unchanged = 0;
framebuffer.refresh(0, 0, _fb_mode.width(), _fb_mode.height());
framebuffer->refresh(0, 0, _fb_mode.width(), _fb_mode.height());
}
cmp_even = !cmp_even;
@ -284,7 +291,7 @@ void Vancouver_console::entry()
Genode::Lock::Guard guard(_console_lock);
env()->rm_session()->detach((void *)_guest_fb);
env()->rm_session()->attach_at(framebuffer.dataspace(),
env()->rm_session()->attach_at(framebuffer->dataspace(),
(Genode::addr_t)_guest_fb);
/* if the VGA model expects a larger FB, pad to that size. */
@ -298,7 +305,7 @@ void Vancouver_console::entry()
revoked = true;
}
framebuffer.refresh(0, 0, _fb_mode.width(), _fb_mode.height());
framebuffer->refresh(0, 0, _fb_mode.width(), _fb_mode.height());
}
timer.msleep(10);