Usage   Script Syntax   IDL interface   Related Pages  

The Loader Script

General Control Commands.

verbose <0|1>
Set verbose level of config file scanner.
fiasco_symbols <0|1>
Fiasco extension
Try to load the symbols of the ELF binary into the Fiasco kernel debugger.
fiasco_lines <0|1>
Fiasco extension
Try to load the ELF line information into the Fiasco kernel debugger.
memdump
Let roottask dump information about memory usage.
sleep
Do nothing for a while (useful for demos).

Path Declarations

modpath "<path>"
Set default search path for modules belonging to a specific L4 task. It may contain several directories separated by colons.
binpath "<path>"
Set default path where to search for binaries. If not set, the loader searches binaries in the directory described by modpath.
libpath "<path>"
Set default path where to search for shared libraries. If this path is not set, the loader searches shared libraries in the directory which is described by binpath.

Task Description

task "\<task_name\>" ["\<task_arguments\>"] [<task_constraints>] [<task_modules>]
Start the description of an L4 task. <task_name> is the logical file name of the binary. It will passed as argv[0] to the task. The string task_arguments describes the command line to pass to the task as argv[1-n]. It may be ommitted. The arguments are stored in the task's multiboot info structure. The file name and the command line has to be quoted.

Passing additional modules to an L4 task.

module "\<module_name\>" ["\<module_arguments\>"] [<memory_location>]
Specify a module that is loaded and passed to the L4 task. <module_name> denotes the logical file name which should be load using the file provider. If it doesn't contain a directory (that is it doesn't start with '(' or '/') then it will be searched in all directories of the modpath (see description of modpath above). The module name is not passed to the module.
The string <module arguments> is passed completely as command line to the module. It may contain one ore more arguments separated by spaces. The module name and the module arguments has to be quoted.
A task finds additional modules by looking at her multiboot info structure. The following information can be find there (see the grub module info):
  • start address
  • end address
  • address of command line (corresponds to module_arguments)

Additional Task Constraints

priority
Define the priority of the first thread of the new task. Default priority is 0x10.
mcp
Define the maximum controlled priority of the new task. Default mcp is 0xff.
direct_mapped
All loadable program sections of the binary should be loaded direct mapped, that is the virtual and the physical addresses are identical.
nosuperpages
Make sure that the binary is mapped using 4kB pages. Useful for performance comparisons.
all_sects_writable
Map all program segments writable to application. Normally this is switched off and read-only program segments (e.g., text segment) are mapped read-only.
no_sigma0
Don't handle sigma0 requests. This is necessary if a task is linked to an address above 1GB (0x40000000) because such an address would be interpreted as a request to an adapter page of addr+0x40000000 (see sigma0 protocol at L4 reference manual.
allow_vga
Allow the application to map the VGA memory. This option only has an effect on the x86 and amd64 architectures. The affected memory region is 0xA0000 to 0xC0000.
allow_kill
Allow the application to kill other applications started by the loader. This is required by management services interacting with the loader, for example the 'run' loader client.
allow_bios
Allow the application to map the BIOS memory. This option only has an effect on the x86 and amd64 architectures. The affected memory region is 0xC0000 to 0x100000.
allow_cli
Permit the task to execute cli/sti. If this flag is not given and the user task runs on IOPL 0 (e.g. Fiasco with enabled I/O protection) the I/O address space is not mapped.
ioport '[' <low_port> ',' <high_port> ']'
Allow the task to access the specified I/O ports
file_provider "<name server ID>"
Specify a different file provider for the new application. Default is "TFTP".
ds_manager "<name server ID>"
Specify a different data space manager for the new application. Default is "DM_PHYS".
memory <size> [<memory_location>] [ is '[' <mem_flags> ']' ]
Specifies how much memory the application should retrieve by Sigma0 protocol. Needed to start L4Linux.

Memory Location

in '[' <low_address> ',' <high_address> ']'
The memory must be located in the area from <low_address> to <high_address>.
at <address>
The memory must be exactly located at <address>.

Flags for Memory Regions

dmaable
Ensure that the memory is direct mapped and is located below 16MB.
contiguous
Ensure that the memory is physically contiguous. That does not mean that the memory has to be direct mapped.
direct_mapped
Ensure that the memory is direct mapped, that is the physical and the virtual addresses are equal.
nosuperpages
Make sure that the memory is mapped using 4kB pages. Useful for performance comparisons.

Integrity measurement

integrity_id <integrity ID>
Specify the ID under which the newly started task should be registered in the integrity-measurement database (provided by the external virtual TPM service). The ID is specified as the base64 representation of a 20-byte string, for example, "MDEyMzQ1Njc4OTEyMzQ1Njc4AAA=".
integrity_parent_id <integrity ID>
Specify the ID of the parent task that is registered in the integrity-measurement database (provided by the external virtual TPM service). The format of the ID is the same as for integrity_id
hash_modules
Specifies that any modules that are passed to the newly started task should be measured as well. Attention: This requires additional memory, because a copy of the module has to be created, as the file provider may not be part of the trusted computing base.

L4 Loader User Manual, part of DROPS  © 2000-2003