Camkes Project Status
This status page currently shows the status of CAmkES features and supplied components. The feature list currently only tracks features of the CAmkES Architecture Description Language. Other CAmkES features that are currently not tracked here include: Plugins, Templating engine, CAmkES component runtime environments, Procedure IDL interfaces, CDL refine verification, Tooling and VisualCamkes.
Features
Camkes Architecture Description Language (ADL)
Features of the CAmkES ADL are listed below. Features that are more experimental may not be compatible with the CDL-refinement CAmkES tooling. The Status field for each feature aims to indicate any known compatiblility issues related to a feature.
Features | Description | Status | Maintained by |
---|---|---|---|
Assembly | An assembly is a top level component system description. It contains a complete description of a full system. | Supported | maintainer wanted |
Composition | A container for the component and connector instantiations that form a system. | Supported | maintainer wanted |
Configuration | A container for describing settings. This is a syntactic element to hold the assignment of attributes for a given system.It is expressed inside an assembly block. | Supported | maintainer wanted |
Component definition | A `type` of functional entity. 'Component' is used colloquially to refer to both types and instances, but in a formal sense 'component' refers only to the type. | Supported | maintainer wanted |
Hierarchical components | A component can contain its own composition and configuration sections that can define components and connections that are in a different namespace from the toplevel composition and configuration namespaces. Each component instance is still a separate component. The top level component type can then select internal interfaces to export as its own interfaces. | Mostly supported. There are some known template bugs where a component exporting dataport interfaces is also required to have a connection to the dataport. | maintainer wanted |
Component Groups | A `Group` combines components into a single underlying process so they share an address space. This can reduce communication costs due to reduced context switching requirements, but components in a group are required to mutually trust each other. | Mostly supported. Connector implementations need to be aware that they are being used in a group component context. There are also issues with variable storage as some global variables will be defined for each component instance in the group, and threads that call across component boundaries may access incorrect variable instances. | maintainer wanted |
Hardware components | A hardware component represents an interface to hardware in the form of a component. Declaring a component with the hardware keyword creates a hardware component. | Supported | maintainer wanted |
Component Interfaces | An abstract exposed interaction point of a component. The subcategories of interface are procedure, event and dataport. | Supported | maintainer wanted |
Exported Interfaces | An interface of a compound component that is not implemented by that component, but is an alias for internal instance’s interface. | Supported | maintainer wanted |
Optional Interfaces | Interfaces of components can be made optional using the `maybe` keyword. Optional interfaces do not need to be connected to any other interfaces. | Supported | maintainer wanted |
Procedure IDL | An interface with function call semantics use procedures which consist of a series of methods that can be invoked independently. Procedures are defined within the ADL which has a IDL subset for defining methods and parameters. | Supported | maintainer wanted |
Attributes | An attribute is a configuration option that can be set on a component, connection or procedure definition. It is used to pass configuration information through to the underlying implementations. | Supported | maintainer wanted |
Structured attributes | Attribute types support struct- and array-like declarations that support bundling and variable length attribute definitions. | Supported | maintainer wanted |
Default attribute values | Attribute definitions can also provide default settings. These defaults are used in the absence attribute settings. | Supported for component and connection attributes | maintainer wanted |
Synchronization Primitives | CAmkES provides three primitives for intra-component mutual exclusion and synchronization. Mutexes, semaphores, and binary semaphores are declared similarly to attributes of a component definition. | Supported | maintainer wanted |
`include` statements | `include` statements are used to declare source language include dependencies on component and procedure definitions. These are used when CAmkES is using types defined by another language. | Supported, but only used with C header files. | maintainer wanted |
Connector definitions | A type of link between instances. A connector implements the transportation for the interfaces it is connected between. | Supported. | maintainer wanted |
Connections | An instantiation of a connector. Connections connect two or more instances together via their interfaces. | Supported. | maintainer wanted |
Imports | `import` statements are used to define an assembly over multiple `.camkes` files and combine them together into a single AST. | Supported. It is possible to provide an import path argument to the camkes tool for where to search for files to import. | maintainer wanted |
C-Preprocessed ADL files | The C Preprocessor is run over the ADL files before the parser starts parsing them. | Supported. Because of the C-Preprocessor, the ADL ignores lines starting with #. This is not a valid comment syntax. | maintainer wanted |
Query syntax and plugins | The parser supports adding plugins that can provide configuration values via a setting querying syntax. A plugin is able to respond to a query with a valid configuration value. | Supported. Currently only 1 plugin exists, fdtQueryEngine, for querying values out of a Flattened device tree (FDT). | maintainer wanted |
Components
Example Applications
Components | Description | Status | Maintained by |
---|---|---|---|
adder | A simple 'Hello world' CAmkES application which demonstrates some basics of the CAmkES framework. | Supported | maintainer wanted |
aeroplage | A CAmkES application which implements a prototype of a previous multi-level terminal for seL4. | Supported | maintainer wanted |
alignment | A CAmkES application which tests if the stack is aligned properly by crashing on an unaligned stack. | Supported | maintainer wanted |
attributes | A CAmkES application which demonstrates the use of aliasing attributes. | Supported | maintainer wanted |
binary-semaphore | A CAmkES application which demonstrates how to use a binary semaphore to turn an asynchronous interface into a synchronous one. | Supported | maintainer wanted |
cakeml_hello | A 'Hello world' CAmkES application which demonstrates the ability to run CakeML-based CAmkES components inside CAmkES. | Supported | maintainer wanted |
cakeml_regex | A CAmkES application which demonstrates the use of CakeML to implement a CAmkES component which filters data between two different components. | Supported | maintainer wanted |
cakeml_tipc | A CAmkES application which demonstrates the Transparent IPC protocol (TIPC) and the use of CakeML to implement a CAmkES component to filter data between two different CAmkES components. | Supported | maintainer wanted |
cms-donate | A CAmkES application which demonstrates the donation of a scheduling context between a client and server via an intermediary under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
cs-donate | A CAmkES application which demonstrates the donation of a scheduling context between a client and server under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
cs-nodonate | A CAmkES application which demonstrates two CAmkES components running using their own scheduling contexts under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
dataport | A CAmkES application which demonstrates an example of the usage of CAmkES dataports. | Supported | maintainer wanted |
debug-simple | A CAmkES application which demonstrates the use of the seL4GDB connector to debug CAmkES components. | Supported | maintainer wanted |
dhcp | A CAmkES application which demonstrates an example DHCP server. | Supported | maintainer wanted |
dma-example | A CAmkES application which demonstrates the use of a CAmKES-allocated DMA pool. | Supported | maintainer wanted |
epit | A CAmkES application which demonstrates a simple hardware driver CAmkES component for the EPIT timers on the KZM platform. | Supported | maintainer wanted |
event | A CAmkES application which demonstrates an example of CAmkES events. | Supported | maintainer wanted |
event-driven | A CAmkES application which demonstrates an example of a CAmkES event-driven application. | Supported | maintainer wanted |
exchangestring | A CAmkES application which demonstrates how to pass string arguments between CAmkES components. | Supported | maintainer wanted |
fdtgen | A CAmkES application which demonstrates an example on how to include a DTB blob and how to modify it. | Supported | maintainer wanted |
filter | A CAmkES application which demonstrates the use of a CAmkES component to filter communication between two other CAmkES components. | Supported | maintainer wanted |
global-imports | A CAmkES application which demonstrates an example of allowing CAmkES components to be globally imported using specific CMake macros. | Supported | maintainer wanted |
hellorust | A CAmkES application which demonstrates an example of running a Rust application inside CAmkES. | Supported | maintainer wanted |
hierarchical-attributes | A CAmkES application which demonstrates an example of hierarchical attributes in CAmKES. | Supported | maintainer wanted |
hierarchical-components | A CAmkES application which demonstrates an example of hierarhical CAmkES components in CAmkES. | Supported | maintainer wanted |
keyboard | A CAmkES application which demonstrates an example keyboard driver for x86 platforms. | Supported | maintainer wanted |
lockserver | A CAmkES application which demonstrates an example system which contains a CAmkES component that manages a lock. | Supported | maintainer wanted |
mcs-donate | A CAmkES application which demonstrates the donation of scheduling contexts betwen two clients and a server under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
mcs-nodonate | A CAmkES application which demonstrates the three CAmkES components running using their own scheduling contexts under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
multiassembly | A CAmkES application which demonstrates the ability to have two different 'assembly' blocks. | Supported | maintainer wanted |
multiclient | A CAmkES application which demonstrates the ability to allow multiple clients to share one connection. | Supported | maintainer wanted |
multiplier | A CAmkES application which demonstrates an example of using arrays as arguments for RPC functions between CAmkES components. | Supported | maintainer wanted |
mutex | A CAmkES application which demonstrates the use of user-defined connectors in CAmkES to implement a lock. | Supported | maintainer wanted |
periodic | A CAmkES application which demonstrates the periodic timeslices of CAmkES components under a Mixed Criticality Scheduling (MCS) environment. | Supported | maintainer wanted |
picoserver | A CAmkES application which demonstrates a simple networking example which uses the PicoServer in the global-components repository. | Supported | maintainer wanted |
pit | A CAmkES application which demonstrates a timer driver CAmkES component for the Programmable Interval Timer on x86 platforms. | Supported | maintainer wanted |
reversestring | A CAmkES application which demonstrates dataport release and acquire semantics. | Supported | maintainer wanted |
rotate | A CAmkES application which demonstrates the use of user-defined types as arguments of a RPC interface. | Supported | maintainer wanted |
RPCOverMultiSharedData | A CAmkES application which demonstrates the use of the seL4RPCOverMultiSharedData connector to perform RPC using shared memory buffers between the client and server. | Supported | maintainer wanted |
rumprun_ethernet | A CAmkES application which demonstrates a single TCP echo program that runs in a Rumprun unikernel instance on CAmkES. | Supported | maintainer wanted |
rumprun_pthreads | A CAmKES application which demonstrates a simple pthreads program that runs in a Rumprun unikernel instance on CAmKES. | Supported | maintainer wanted |
rumprun_rust | A CAmkES application which demonstrates a simple Rust 'Hello world' program that runs in a Rumprun unikernel instance on CAmkES. | Supported | maintainer wanted |
serialserver | A CAmkES application which demonstrates the use of the SerialServer component in the global-components repository. | Supported | maintainer wanted |
serialserver_loopback | A CAmkES application which demonstrates the use of the SerialServer component in the global-components repository looping back characters that it reads in from the serial device. | Supported | maintainer wanted |
simple | A CAmkES application which demonstrates an example of a CAmkES RPC connection. | Supported | maintainer wanted |
simplesingleaddressspace | A CAmkES application which demonstrates an example of a single address space CAmkES system which contains a RPC connection between its two components. | Supported | maintainer wanted |
socket | A CAmkES application which demonstrates a user-defined dataport. | Supported | maintainer wanted |
structs | A CAmkES application which demonstrates the use of structs and arrays for CAmkES component attribute types. | Supported | maintainer wanted |
swapcounter | A CAmkES application which was used for demonstration purposes for a paper submission to Formal Methods 2015 but has since been modified. | Supported | maintainer wanted |
terminal | A CAmkES application which serves as a prototype for a secure terminal system. | Supported | maintainer wanted |
testbufvariant | A CAmkES application which is used to test dataports. | Supported | maintainer wanted |
testcamkes438 | A CAmkES application that is used to test a specific function of the CAmkES framework. | Supported | maintainer wanted |
testcontrolname | A CAmkES application that is used to test if interfaces could be named with a particular suffix. | Supported | maintainer wanted |
testdataportbifurcate | A CAmkES application that tests if we can have multiple dataports within a single component that maps to the same underlying physical memory. | Supported | maintainer wanted |
testdataportmux | A CAmkES application that tests the ability to have multiple CAmkES components connected to the same dataport. | Supported | maintainer wanted |
testdataportmuxflat | A CAmkES application that tests the ability to have N-to-M dataport connections in a single address space. | Supported | maintainer wanted |
testdataportptrwrap | A CAmkES application that tests if dataport pointer wrapping and unwrapping functionality works on multiplexed dataports. | Supported | maintainer wanted |
testdataportrpc | A CAmkES application that tests if we can back an seL4RPCCall connection with various types of dataports. | Supported | maintainer wanted |
testfaulthandlers | A CAmkES application that tests if the fault handlers work correctly as intended. | Supported | maintainer wanted |
testgrouping | A CAmkES application which tests for the various edge cases in grouping CAmkES components into single address spaces. | Supported | maintainer wanted |
testgroupingcontrol | A CAmkES application which tests whether CAmkES components with a control thread work correctly when grouped in a single address spaces. | Supported | maintainer wanted |
testhardwareinterrupt | A CAmkES application which tests if an application containing a seL4HardwareInterrupt successfully compiles. | Supported | maintainer wanted |
testhwdataportlrgpages | A CAmkES application which tests whether or not large pages will be used to back a large dataport. | Supported | maintainer wanted |
testnto1mmio | A CAmkES application that tests if an N-to-1 MMIO connection to a piece of hardware functions correctly. | Supported | maintainer wanted |
testnto1overload | A CAmKES application that tests if N-to-1 connections involving multiple ends from a single CAmkES component uses distinct caps. | Supported | maintainer wanted |
testrefin | A CAmKES application that tests the 'refin' parameter function in CAmkES procedure interfaces. | Supported | maintainer wanted |
testreplycapprotection | A CAmkES application that tests the reply cap protection functionality. | Supported | maintainer wanted |
testsel4notification | A CAmkES application that tests the seL4Notification connector. | Supported | maintainer wanted |
testsingleaddressspaceheap | A CAmkES application that tests that the heaps of CAmkES components that share a single address space do not overlap. | Supported | maintainer wanted |
teststringarrays | A CAmkES application that tests some unusual usages of string array parameters in procedure interfaces. | Supported | maintainer wanted |
testsyscalls | A CAmkES application that serves as a testing sandbox for POSIX syscall functionality on CAmkES. | Supported | maintainer wanted |
testunderscorename | A CAmkES application that tests if CAmkES components can have interface names prefixed with an underscore. | Supported | maintainer wanted |
timeserver | A CAmkES application which demonstrates the use of the TimeServer componen fromthe global-components repository. | Supported | maintainer wanted |
uart | A CAmkES application which demonstrates a UART driver CAmkES component for the KZM platform. | Supported | maintainer wanted |
vgatest | A CAmkES application which demonstrates a minimal implementation for a text mode VGA terminal. | Supported | maintainer wanted |
Reusable components
Components | Description | Status | Maintained by |
---|---|---|---|
ClockServer | A CAmkES component which abstracts over and multiplexes client accesses to clock devices on a platform. | Supported | maintainer wanted |
Ethdriver | A CAmkES component which abstracts over and multiplexes client accesses to an Ethernet device. | Supported | maintainer wanted |
FileServer | A CAmkES component which abstracts over and multiplexes client accesses to a CPIO-based file system. | Supported | maintainer wanted |
GPIOMUXServer | A CAmkES component which abstracts over and multiplexes client accesses to a GPIO and pin multiplexer controller. | Supported | maintainer wanted |
PCIConfigIO | A CAmkES component which abstracts over and multiplexes client accesses to the PCI configuration space of a platform. | Supported | maintainer wanted |
PicoServer | A CAmkES component which abstracts over and multiplexes client accesses to an IP stack, specifically, the PicoTCP TCP/IP stack. | Supported | maintainer wanted |
ResetServer | A CAmkES component which abstracts over and multiplexes client accesses to a reset line controller. | Supported | maintainer wanted |
RTC | A CAmkES component which abstracts over and multiplexes client accesses to a real-time clock device. | Supported | maintainer wanted |
SerialServer | A CAmkES component which abstracts over and multiplexes client accesses to a serial device. | Supported | maintainer wanted |
TimeServer | A CAmkES component which abstracts over and multiplexes client accesses to a timer device. | Supported | maintainer wanted |
VirtQueue | A stub CAmkES component which is used to help initialise virtqueue connections. | Supported | maintainer wanted |
Serial | Stub hardware CAmkES component that abstracts over a pc99-based serial device. | Supported | maintainer wanted |
PIT | Stub hardware CAmkES component that abstracts over the x86 Programmable Interval Timer. | Supported | maintainer wanted |
Camkes Connectors
Components | Description | Status | Maintained by |
---|---|---|---|
seL4Ethdriver | CAmkES connector which is used to connect clients to the Ethdriver component's procedure interface. | Supported | maintainer wanted |
seL4GlobalAsynchCallback | CAmkES connector which is used to make the underlying seL4 notificationcapability available to the consuming side of the Event interface. This also allows the coupling of callback function that is called uponreceiving an Event. | Supported | maintainer wanted |
seL4GlobalAsync | CAmkES connector which is used to make the underlying seL4 notification capability available to the consuming side of the Event interface. | Supported | maintainer wanted |
seL4MessageQueue | CAmkES connector which allows the sending and queueing of user-defined messages from one component to another. | Supported | maintainer wanted |
seL4MultiSharedData | CAmkES connector which allows multiple dataports to be connected to a single components and also provides multiplexed access across the dataports. | Supported | maintainer wanted |
seL4RPCCallSignal | CAmkES connector which bundles a procedure interface with an event interface. | Supported | maintainer wanted |
seL4RPCDataport | CAmkES connector which bundles a procedure interface with a dataport interface. | Supported | maintainer wanted |
seL4RPCDataportSignal | CAmkES connector which bundles a procedure interface, event interface, and a dataport interface. | Supported | maintainer wanted |
seL4RPCOverMultiSharedData | CAmkES connector which uses shared memory to transfer data instead of the IPC buffer for procedure interfaces. | Supported | maintainer wanted |
seL4SharedDataWithCaps | CAmkES connector which allocates a shared memory region between components and also exposes the underlying frame caps. | Supported | maintainer wanted |
seL4VirtQueues | CAmkES connector which initialises a virtqueue connection between two components. | Supported | maintainer wanted |
seL4DirectCall | Used for RPC interfaces between grouped components. Each call becomes a direct function call. | Supported | maintainer wanted |
seL4Notification | Event connector where a seL4 Notification object is used for sending events. On the receiving end, a callback handler can be registerd or a thread can block waiting for events. | Supported | maintainer wanted |
seL4NotificationBind | Similar event connector to seL4Notification but the receiver has bound the Notification to its TCB. | Supported | maintainer wanted |
seL4NotificationNative | Similar event connector to seL4Notification but the receiver end can only call Poll or Wait on notification object. | Supported | maintainer wanted |
seL4NotificationQueue | seL4Endpoint object is used to queue notifications so that if the sender is sending faster than the receiver is receiving, unreceived events will accumulate in a counter. | Supported | maintainer wanted |
seL4RPCCall | Used for RPC interfaces where parameters will be marshalled into and out of IPC buffers and calls ocurr over seL4Endpoint objects. | Supported. There is also a CakeML implementation for the receiving end. | maintainer wanted |
seL4DTBHardware | Hardware connector to hardware component specified by a Device tree node. This will extract MMIO and potentially IRQ information for creating connections to the component. | Supported | maintainer wanted |
seL4RPCCallNoType | seL4 RPCCall connector but without requirement of single procedure interface. This allows a single receiver thread to handle multiple senders with different interfaces. | Supported | maintainer wanted |
seL4SharedData | seL4 Dataport connector. Creates a shared memory connection between components. | Supported | maintainer wanted |
seL4HardwareMMIO | seL4 Dataport connector to MMIO region. Creates a MMIO mapping for device registers into a component. | Supported | maintainer wanted |
seL4HardwareIOPort | seL4 Procedure connector for x86 IOPorts. Provides functions for performing IOPort instructions via seL4 invocations. | Supported | maintainer wanted |
seL4HardwareInterrupt | seL4 event connector for hardware interrupts. Provides interface for polling or blocking on interrupts and also for acknowledging IRQs. | Supported | maintainer wanted |
seL4IOAPICHardwareInterrupt | seL4 event connector for IOAPIC hardware interrupts. Specialised connector for dealing with IOAPIC interrupts. | Supported on x86 | maintainer wanted |
Project manifests
Camkes project manifests
These manifests are available for checking out the example CAmkES applications.
Components | Description | Status | Maintained by |
---|---|---|---|
master.xml | Camkes project manifest with all repositories from master branches. | Supported. Updated whenever project repository structure changes. | maintainer wanted |
default.xml | Camkes project manifest with all repositories pinned to last versions that passed all tests. | Supported. This gets updated automatically by continuous integration. | maintainer wanted |
Configurations
Camkes sample apps
The project containing all of the CAmkES example applications has a couple of configuration options for selecting the example app and seL4 platform it runs on.
Configurations | Description | Status | Maintained by |
---|---|---|---|
CAMKES_APP (STRING) | CAmkES application to build | (Default: adder) | maintainer wanted |
SIMULATION (BOOL) | Try and use simulable features | (Default: ON) | maintainer wanted |
RELEASE (BOOL) | Performance optimized build | (Default: OFF) | maintainer wanted |
PLATFORM (STRING) | Platform to use | (Default: x86_64) | maintainer wanted |