launchpad: Update config syntax, remove defaults
This patch updates the launchpad config to use XML attributes and removes the built-in default configuration (which is only meaningful for demo.run anyway).
This commit is contained in:
parent
6cd5407ed9
commit
29eeedf064
|
@ -1,34 +1,15 @@
|
||||||
Launchpad is a graphical application for interactively starting and
|
Launchpad is a graphical application for interactively starting and
|
||||||
killing programs.
|
killing programs.
|
||||||
|
|
||||||
By default, launchpad displays a preconfigured list of programs and their
|
By default, launchpad displays a onfigured list of programs and their
|
||||||
respective default memory quotas. The user can tweak the memory quota
|
respective default memory quotas. The user can tweak the memory quota for each
|
||||||
for each entry with mouse and then start a program by clicking on its
|
entry with mouse and then start a program by clicking on its name. The
|
||||||
name. As an alternative to using the default list, you can define the list
|
following example configuration tells launchpad to display a list of three
|
||||||
manually by supplying a configuration to Launchpad. The following example
|
launcher entries:
|
||||||
configuration tells launchpad to display a list of two launcher entries:
|
|
||||||
|
|
||||||
!<config>
|
!<config>
|
||||||
! <launcher>
|
! <launcher name="sdl_pathfind" ram_quota="10M" />
|
||||||
! <filename>sdl_pathfind</filename>
|
! <launcher name="liquid_fb" ram_quota="10M" />
|
||||||
! <ram_quota>10M</ram_quota>
|
! <launcher name="hello" ram_quota="1M" />
|
||||||
! </launcher>
|
|
||||||
! <launcher>
|
|
||||||
! <filename>liquid_fb</filename>
|
|
||||||
! <ram_quota>10M</ram_quota>
|
|
||||||
! </launcher>
|
|
||||||
! <launcher>
|
|
||||||
! <filename>init</filename>
|
|
||||||
! <ram_quota>10M</ram_quota>
|
|
||||||
! <config>
|
|
||||||
! <start>
|
|
||||||
! <filename>hello</filename>
|
|
||||||
! <ram_quota>1M</ram_quota>
|
|
||||||
! </start>
|
|
||||||
! </config>
|
|
||||||
! </launcher>
|
|
||||||
!</config>
|
!</config>
|
||||||
|
|
||||||
To use this configuration for a Launchpad started via init, you can
|
|
||||||
simply insert the launchpad configuration into the '<start>' node
|
|
||||||
of the launchpad entry in init's 'config' file.
|
|
||||||
|
|
|
@ -99,18 +99,18 @@ static void process_config(Launchpad *launchpad)
|
||||||
/* catch XML syntax errors within launcher node */
|
/* catch XML syntax errors within launcher node */
|
||||||
try {
|
try {
|
||||||
/* read file name and default quote from launcher node */
|
/* read file name and default quote from launcher node */
|
||||||
Xml_node filename_node = node.sub_node("filename");
|
Xml_node::Attribute filename_attr = node.attribute("name");
|
||||||
|
|
||||||
size_t filename_len = filename_node.content_size();
|
enum { MAX_NAME_LEN = 128 };
|
||||||
char *filename = (char *)env()->heap()->alloc(filename_len + 1);
|
char *filename = (char *)env()->heap()->alloc(MAX_NAME_LEN);
|
||||||
if (!filename) {
|
if (!filename) {
|
||||||
::printf("Error: Out of memory while processing configuration\n");
|
::printf("Error: Out of memory while processing configuration\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
filename_node.value(filename, filename_len + 1);
|
filename_attr.value(filename, MAX_NAME_LEN);
|
||||||
Xml_node ram_quota_node = node.sub_node("ram_quota");
|
Xml_node::Attribute ram_quota_attr = node.attribute("ram_quota");
|
||||||
Number_of_bytes default_ram_quota = 0;
|
Number_of_bytes default_ram_quota = 0;
|
||||||
ram_quota_node.value(&default_ram_quota);
|
ram_quota_attr.value(&default_ram_quota);
|
||||||
|
|
||||||
/* obtain configuration for the child */
|
/* obtain configuration for the child */
|
||||||
Init::Child_config *config = new (env()->heap())
|
Init::Child_config *config = new (env()->heap())
|
||||||
|
@ -187,16 +187,7 @@ int main(int argc, char **argv)
|
||||||
/* request config file from ROM service */
|
/* request config file from ROM service */
|
||||||
try {
|
try {
|
||||||
process_config(&launchpad);
|
process_config(&launchpad);
|
||||||
|
} catch (...) { }
|
||||||
/* if there exists no configuration, use defaults */
|
|
||||||
} catch (...) {
|
|
||||||
launchpad.add_launcher("testnit", 768*1024);
|
|
||||||
launchpad.add_launcher("scout", 11*1024*1024);
|
|
||||||
launchpad.add_launcher("launchpad", 6*1024*1024);
|
|
||||||
launchpad.add_launcher("nitlog", 1*1024*1024);
|
|
||||||
launchpad.add_launcher("liquid_fb", 7*1024*1024);
|
|
||||||
launchpad.add_launcher("nitpicker", 1*1024*1024);
|
|
||||||
}
|
|
||||||
|
|
||||||
Avail_quota_update avail_quota_update(&launchpad);
|
Avail_quota_update avail_quota_update(&launchpad);
|
||||||
|
|
||||||
|
|
|
@ -14,16 +14,89 @@
|
||||||
#include <base/env.h>
|
#include <base/env.h>
|
||||||
#include <launchpad/launchpad.h>
|
#include <launchpad/launchpad.h>
|
||||||
#include <dataspace/capability.h>
|
#include <dataspace/capability.h>
|
||||||
|
#include <rom_session/connection.h>
|
||||||
|
#include <base/snprintf.h>
|
||||||
#include "elements.h"
|
#include "elements.h"
|
||||||
|
|
||||||
static Launchpad launchpad(Genode::env()->ram_session()->quota());
|
static Launchpad launchpad(Genode::env()->ram_session()->quota());
|
||||||
|
|
||||||
|
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************
|
||||||
|
** Registry containing child configurations **
|
||||||
|
**********************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The registry contains config dataspaces for given program names. It is
|
||||||
|
* filled lazily as a side effect of 'Launcher::launch()'.
|
||||||
|
*/
|
||||||
|
class Config_registry
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct Entry;
|
||||||
|
List<Entry> _configs;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain configuration for specified program name from ROM module
|
||||||
|
* named '<prg_name>.config'
|
||||||
|
*/
|
||||||
|
Dataspace_capability config(char const *name);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct Config_registry::Entry : List<Config_registry::Entry>::Element
|
||||||
|
{
|
||||||
|
Dataspace_capability _init_dataspace(char const *name)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
snprintf(buf, sizeof(buf), "%s.config", name);
|
||||||
|
Rom_connection *config = 0;
|
||||||
|
try {
|
||||||
|
config = new (env()->heap()) Rom_connection(buf);
|
||||||
|
return config->dataspace();
|
||||||
|
}
|
||||||
|
catch (...) { }
|
||||||
|
return Dataspace_capability();
|
||||||
|
}
|
||||||
|
|
||||||
|
Dataspace_capability const dataspace;
|
||||||
|
char name[128];
|
||||||
|
|
||||||
|
Entry(char const *prg_name) : dataspace(_init_dataspace(prg_name))
|
||||||
|
{
|
||||||
|
strncpy(name, prg_name, sizeof(name));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Dataspace_capability Config_registry::config(char const *name)
|
||||||
|
{
|
||||||
|
/* lookup existing configuration */
|
||||||
|
for (Entry *e = _configs.first(); e; e = e->next())
|
||||||
|
if (strcmp(name, e->name) == 0)
|
||||||
|
return e->dataspace;
|
||||||
|
|
||||||
|
/* if lookup failed, create and register new config */
|
||||||
|
Entry *entry = new (env()->heap()) Entry(name);
|
||||||
|
_configs.insert(entry);
|
||||||
|
|
||||||
|
return entry->dataspace;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************
|
/************************
|
||||||
** Launcher interface **
|
** Launcher interface **
|
||||||
************************/
|
************************/
|
||||||
|
|
||||||
void Launcher::launch()
|
void Launcher::launch()
|
||||||
{
|
{
|
||||||
launchpad.start_child(prg_name(), quota(), Genode::Dataspace_capability());
|
static Config_registry config_registry;
|
||||||
|
|
||||||
|
launchpad.start_child(prg_name(), quota(),
|
||||||
|
config_registry.config(prg_name()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,9 @@ append config {
|
||||||
<service name="LOG"> <child name="terminal_log"/> </service>
|
<service name="LOG"> <child name="terminal_log"/> </service>
|
||||||
<any-service> <any-child/> <parent/></any-service>
|
<any-service> <any-child/> <parent/></any-service>
|
||||||
</route>
|
</route>
|
||||||
|
<config>
|
||||||
|
<launcher name="testnit" ram_quota="768K" />
|
||||||
|
</config>
|
||||||
</start>
|
</start>
|
||||||
</config>
|
</config>
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ append config {
|
||||||
<start name="launchpad">
|
<start name="launchpad">
|
||||||
<resource name="RAM" quantum="1G"/>
|
<resource name="RAM" quantum="1G"/>
|
||||||
<config>
|
<config>
|
||||||
<launcher><ram_quota>100M</ram_quota><filename>init</filename>
|
<launcher name="init" ram_quota="100M">
|
||||||
<config>
|
<config>
|
||||||
<parent-provides>
|
<parent-provides>
|
||||||
<service name="ROM"/>
|
<service name="ROM"/>
|
||||||
|
|
|
@ -113,12 +113,28 @@ append config {
|
||||||
</config>
|
</config>
|
||||||
</start>
|
</start>
|
||||||
<start name="launchpad">
|
<start name="launchpad">
|
||||||
<resource name="RAM" quantum="32M"/>
|
<resource name="RAM" quantum="64M" />
|
||||||
|
<configfile name="launchpad.config" />
|
||||||
</start>
|
</start>
|
||||||
</config>}
|
</config>}
|
||||||
|
|
||||||
install_config $config
|
install_config $config
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create launchpad configuration
|
||||||
|
#
|
||||||
|
set launchpad_config_fd [open "bin/launchpad.config" w]
|
||||||
|
puts $launchpad_config_fd {<config>
|
||||||
|
<launcher name="testnit" ram_quota="768K" />
|
||||||
|
<launcher name="scout" ram_quota="41M" />
|
||||||
|
<launcher name="launchpad" ram_quota="6M" />
|
||||||
|
<launcher name="nitlog" ram_quota="1M" />
|
||||||
|
<launcher name="liquid_fb" ram_quota="7M" />
|
||||||
|
<launcher name="nitpicker" ram_quota="1M" />
|
||||||
|
</config>}
|
||||||
|
close $launchpad_config_fd
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Boot modules
|
# Boot modules
|
||||||
#
|
#
|
||||||
|
@ -129,6 +145,7 @@ set boot_modules {
|
||||||
timer
|
timer
|
||||||
nitpicker liquid_fb launchpad scout
|
nitpicker liquid_fb launchpad scout
|
||||||
testnit nitlog
|
testnit nitlog
|
||||||
|
launchpad.config
|
||||||
}
|
}
|
||||||
|
|
||||||
# platform-specific modules
|
# platform-specific modules
|
||||||
|
@ -143,6 +160,8 @@ lappend_if [have_spec imx53] boot_modules input_drv
|
||||||
|
|
||||||
build_boot_image $boot_modules
|
build_boot_image $boot_modules
|
||||||
|
|
||||||
|
file delete -force bin/launchpad.config
|
||||||
|
|
||||||
append qemu_args " -m 256 "
|
append qemu_args " -m 256 "
|
||||||
|
|
||||||
run_genode_until forever
|
run_genode_until forever
|
||||||
|
|
|
@ -83,9 +83,7 @@ append config {
|
||||||
<start name="launchpad">
|
<start name="launchpad">
|
||||||
<resource name="RAM" quantum="1G"/>
|
<resource name="RAM" quantum="1G"/>
|
||||||
<config>
|
<config>
|
||||||
<launcher>
|
<launcher name="init" ram_quota="70M">
|
||||||
<filename>init</filename>
|
|
||||||
<ram_quota>70M</ram_quota>
|
|
||||||
<config prio_levels="2">
|
<config prio_levels="2">
|
||||||
<parent-provides>
|
<parent-provides>
|
||||||
<service name="ROM"/>
|
<service name="ROM"/>
|
||||||
|
|
|
@ -282,7 +282,7 @@ if {$use_fancy_stuff} {
|
||||||
set launchpad_cfg_fd [open "bin/launchpad-config" w]
|
set launchpad_cfg_fd [open "bin/launchpad-config" w]
|
||||||
|
|
||||||
puts $launchpad_cfg_fd "<config>
|
puts $launchpad_cfg_fd "<config>
|
||||||
<launcher><ram_quota>$memory_init</ram_quota><filename>init</filename>"
|
<launcher ram_quota=\"$memory_init\" name=\"init\">"
|
||||||
|
|
||||||
puts $launchpad_cfg_fd {
|
puts $launchpad_cfg_fd {
|
||||||
<config>
|
<config>
|
||||||
|
|
Loading…
Reference in New Issue