Difference between revisions of "Libpayload"
From coreboot
(Updates, fixes.) |
m (→Usage Example) |
||
| Line 179: | Line 179: | ||
<pre> | <pre> | ||
| − | #include < | + | #include <libpayload.h> |
int main(void) | int main(void) | ||
{ | { | ||
printf("Hello, world!\n"); | printf("Hello, world!\n"); | ||
| + | halt(); | ||
return 0; | return 0; | ||
} | } | ||
</pre> | </pre> | ||
| − | Build: | + | Build example (basic idea): |
gcc -o hello_payload hello_payload.c | gcc -o hello_payload hello_payload.c | ||
Revision as of 19:38, 7 March 2008
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.
Contents |
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
| |
I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.
In case this is not legally possible: |