Libpayload: Difference between revisions
m (→Libc coverage) |
m (Fixed downloading from Subversion to Git) |
||
(One intermediate revision by one other user not shown) | |||
Line 38: | Line 38: | ||
== Downloading and building libpayload == | == Downloading and building libpayload == | ||
$ ''' | It is now in main coreboot git tree (see [[Download_coreboot]] for additional reference) | ||
$ '''cd libpayload''' | |||
$ '''git clone http://review.coreboot.org/p/coreboot''' | |||
$ '''cd payloads/libpayload''' | |||
$ '''make menuconfig''' | $ '''make menuconfig''' | ||
$ '''make install''' | $ '''make install''' | ||
Here [http://review.coreboot.org/#/q/status:open+project:coreboot+message:libpayload,n,z gerrit] you can find pending patches for libpayload | |||
== Documentation == | == Documentation == | ||
Line 526: | Line 530: | ||
| <code>char* strerror(int n)</code> | | <code>char* strerror(int n)</code> | ||
|- | |- | ||
| style="background: | | style="background:lime" | no | ||
| <code>char* strtok(char* s, const char* t)</code> | | <code>char* strtok(char* s, const char* t)</code> | ||
|- | |||
| style="background:lime" | no | |||
| <code>char* strtok_r(char* s, const char* t, char **p)</code> | |||
|- | |- | ||
| style="background:red" | no | | style="background:red" | no |
Latest revision as of 10:23, 1 June 2012
libpayload is a small BSD-licensed static library (a lightweight implementation of common and useful functions) intended to be used as a basis 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.
- The libpayload functions can be tested and scrutinized outside payload development.
- Payloads themselves may be partly host-tested, e.g. against an emulation libpayload.
Just give us a main() and a pocket full of dreams and we'll do the rest.
Features
- Provides a subset of libc functions (e.g. malloc, printf, strcmp, etc).
- Provides an optional tiny (n)curses implementation.
- Provides various small drivers for
- keyboard
- PC speaker
- NVRAM/CMOS access
- serial console
- VGA
- Geode framebuffer
- USB stack
- Reads and parses the coreboot table.
Design
Payloads using libpayload
- FILO is a bootloader which loads boot images from a local filesystem, without help from legacy BIOS services.
- coreinfo is a small payload which can display system information such as PCI info, or an NVRAM dump.
- GRUB invaders has been ported successfully to libpayload (patch pending).
- tint (a "falling blocks" game) has been successfully ported to libpayload.
- lxdialog from the Linux kconfig utility has been ported to be usable when linked with libpayload (patch pending).
Downloading and building libpayload
It is now in main coreboot git tree (see Download_coreboot for additional reference)
$ git clone http://review.coreboot.org/p/coreboot $ cd payloads/libpayload $ make menuconfig $ make install
Here gerrit you can find pending patches for libpayload
Documentation
See the autogenerated documentation for libpayload here.
Libc coverage
|
|
Usage example
Here's an example of a very simple payload (hello.c) and how to build it:
<source lang="C">
- include <libpayload.h>
int main(void) {
printf("Hello, world!\n"); halt(); return 0;
} </source>
Building the payload:
$ lpgcc -o hello.elf hello.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: |