Libpayload

From coreboot
Jump to navigation Jump to search

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!

libpayload is a small BSD-licensed "library" (a lightweight implementation of common and useful functions) intended to be used as a basis for coreboot payloads.

Overview

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.
  • The libpayload functions can be 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 <libpayload.h>

int main(void)
{
    printf("Hello, world!\n");
    halt();
    return 0;
}

Build example (basic idea):

gcc -o hello_payload hello_payload.c


Public domain I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.