Driver manifests #
Driver manifests are used by the devloader service when loading driver processes to add additional capabilities and services to facilitate driver operations.
The manifest is an INI file which is stored in the driver’s ELF file in a special “.manifest” section.
Following this various INI sections may appear to tune various features of the driver loader.
[capabilities] #
The capabilities section of the driver management is used to request specific capabilities from the driver loader. Each takes the format of:
addr:type = config
The “addr” field specifies the capability address that the capability should be
installed into; it may be _
to allocate a capability address. The “type” field
is the capability type, and the config is a comma-separated list of
configuration options specific to each type, enumerated below.
cspace #
Allocates a CSpace capability.
Options
self
: creates a copy of the driver’s CSpace
Details
A CAP_CSPACE entry is added to the driver’s auxiliary vector if “self” is specified here.
devmem #
Allocates a device memory capability.
Options
min=<paddr>
: Minimum physical address (in hex) to allocate (required)max=<paddr>
: Maximum physical address (in hex) to allocate (required)
endpoint #
Allocates an endpoint capability.
Options
None
memory #
Allocates a memory capability.
Options
pages=<n>
: Allocate N pages of memory (required)
Details
A CAP_MEMORY entry is added to the driver’s auxiliary vector.
note #
Allocates a notification capability.
Options
None
vspace #
Allocates a VSpace capability.
Options
self
: creates a copy of the driver’s VSpace
Details
A CAP_VSPACE entry is added to the driver’s auxiliary vector if “self” is specified here.
x86_64-specific capabilities #
ioport #
Allocates an I/O port capability.
Options
min=<value>
: Minimum I/O port (in hex) to allocate (required)max=<value>
: Maximum I/O port (in hex) to allocate (required)
irq #
Allocates an IRQ capability.
Options
irq=<no>
: IRQ number to allocate (required)note=<addr>
: Capability address of notification to deliver IRQs to (required)
Details
The notification capability must be allocated prior to the IRQ in the list of capabilities.
[services] #
The services lists system services which should be made available to the driver.
Each is specified with name=
, and no value. The list of services may change
depending on the runtime configuration and system policy, but at least the
following services will always be available:
- devmgr: Device manager
- devregistry: Device registry
- devloader: Driver loader
- pmem: Physical memory manager
Example #
[driver]
name=ps2kb
desc=PS/2 keyboard driver for x86
[capabilities]
0:ioport = min=60, max=64
1:note =
2:irq = irq=1, note=1
_:cspace = self
[services]
devregistry=