Genode Book
Introduction
Contents is ordered by configuration topics (".run" files for various things) or C++ development topics:
When reading through code from the Genode project, you'll notice recurring idioms and best practices; read more over at Genode's Conscious C++ dialect .
Why an "API hand book" ? Not everybody works the same. Some prefer to "UTSL" ("use the source, luke!") as their favorite way to get familiar with a new system. Some prefer to be mentored, even textually. The narrative format used by the "Be Book" of old works best for the latter, thanks to a balanced mix of all methods: it includes raw/formal API listing (bool is_computer_on_fire() const..), some paragraphs of "orientation" text (here's what this chapter deals with, so you are in the right place if you intend to program such and such...), and links to compilable sample code or tutorials.
Development environment
For both application developers and system integrators/developers, cross compiling from Linux using the Genode tool chain compiled for Linux is the recommended (and officially supported) way.Additionally, for application development, you'll want to take a look at Goa - streamlining the development of Genode applications : Goa streamlines application integration, allowing to focus on application programming and be more productive.
C++ API
This is divided in API families (or "kits" in BeBook parlance) of Genode:
- Low level primitives : logging, threads, semaphores...
- Support : RTC time, class String ..etc
- LibC: invoke 'prepare_port libc' ..etc
- libstdc++: invoke 'prepare_port stdcxx' ..etc
- Launching (child) apps -- plus a discussion on reliability
- Graphical interface and input
- Storage
- Network
- Media (audio)
Special topics
Drivers:
Hardware notes:
The author uses Genode on x86 hardware, but likes to keep an eye on the ARM world. To that end, reading The ARM SoC landscape from Genode's perspective is enlightening : outstanding intro for those not really familiar with system-on-chip's, beyond having heard about Raspberry Pi's. I wonder if NXP i.MX boards are expensive, compared to a "Pi".
Debugging tips
Here's a few hints and tips that should (at least in my experience) be kept in mind for trouble-shooting development problems in Genode:
Configuration sections
Should this be a separate section, or rather include the .run files inline above?
TODO
- https://github.com/nfeske/genode-manual/blob/master/manual/functional_specification.txt
- https://edik.ch/genode/splitted_html/ or the official gen: https://genode.org/documentation/genode-foundations/19.05/index.html
- mention we want to address the need for "Task oriented rather than module oriented" documentation: for instance a developer looks up "how to read and write files", and gets responses re run files, C++ code and the like, all in one page (by opposed to needing to read part of the init/run doc, part of the API doc and so on)
- mention this specifically addresses the needs of System Integrators, rather than rely solely on the higher-level Sculpt