Libpayload
The wiki is being retired!
Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!
Overview
Currently a concept rather than shipping code, libpayload is a coreboot subproject that intends to provide a lightweight implementation of common and useful functions for coreboot payloads. The benefits of linking a coreboot payload against libpayload are:
- payloads do not have to implement and maintain low-level code for I/O, common functions, etc,
- payloads can be recompiled and deployed for CPU architectures supported by coreboot in the future,
- libpayload functions tested and scrutinized outside payload development,
- payloads themselves may be partly host-tested, e.g. against an emulation libpayload,
- leads to the possibility of payloads using dynamic linking, reducing total payload footprint.
just give us a main() and a pocket full of dreams and we'll do the rest
Feature Wish List
- Basics
- coreboot services and structures (e.g. read CMOS, device tree)
- subset of C-library functions (e.g. printf, puts, getch)
- light ncurses from the Google Summer Of Code project
- Fancies
- directFB
- TWIN
Libc Coverage
Function/Macro/Variable | Status |
---|---|
assert.h | |
assert( ) (macro)
|
no |
ctype.h | |
int isalnum(int character)
|
no |
int isalpha(int character)
|
no |
int iscntrl(int character)
|
no |
int isdigit(int character)
|
no |
int isgraph(int character)
|
no |
int islower(int character)
|
no |
int isprint(int character)
|
no |
int ispunct(int character)
|
no |
int isspace(int character)
|
no |
int isupper(int character)
|
no |
int isxdigit(int character)
|
no |
errno.h | |
errno (global)
|
no |
float.h | |
limits.h | |
locale.h | |
char *setlocale(int category, const char *locale)
|
no |
struct lconv *localeconv(void)
|
no |
math.h | |
TODO | |
setjmp.h | |
TODO | |
signal.h | |
TODO | |
stdarg.h | |
TODO | |
stddef.h | |
TODO | |
stdio.h | |
TODO | |
stdlib.h | |
TODO | |
string.h | |
TODO | |
time.h | |
TODO |
No Support |
Partial Support |
Full Support |
Usage Example
hello_payload.c:
#include <stdio.h> int main( void ) { printf( "Hello, world!\n" ); return 0; }
build:
libpayload-gcc -o hello_payload hello_payload.c