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!

coreboot provides a couple of means to pass information on to the OS and payloads.


Code execution

coreboot passes control to a payload or OS in form of a self contained ELF binary.

coreboot table

The one central data structure in coreboot is the coreboot table. It is an extensible data structure providing the information gathered by coreboot to payloads and operating systems.

The table usually sits in memory around address 0x500. FIXME: describe how to search for the table correctly.

The table header looks like this:

<source lang="C"> struct lb_header {

       uint8_t  signature[4]; /* LBIO */
       uint32_t header_bytes;
       uint32_t header_checksum;
       uint32_t table_bytes;
       uint32_t table_checksum;
       uint32_t table_entries;

}; </source>

Every entry in the boot enviroment list will correspond to a boot info record. Encoding both type and size. The type is obviously so you can tell what it is. The size allows you to skip that boot enviroment record if you don't know what it is. This allows forward compatibility with records not yet defined.

<source lang="C"> struct lb_record {

       uint32_t tag;           /* tag ID */
       uint32_t size;          /* size of record (in bytes) */

}; </source>

Entry Types:

<source lang="C">

  1. define LB_TAG_UNUSED 0x0000
  2. define LB_TAG_MEMORY 0x0001
  3. define LB_TAG_HWRPB 0x0002
  4. define LB_TAG_MAINBOARD 0x0003
  5. define LB_TAG_VERSION 0x0004
  6. define LB_TAG_EXTRA_VERSION 0x0005
  7. define LB_TAG_BUILD 0x0006
  8. define LB_TAG_COMPILE_TIME 0x0007
  9. define LB_TAG_COMPILE_BY 0x0008
  10. define LB_TAG_COMPILE_HOST 0x0009
  11. define LB_TAG_COMPILE_DOMAIN 0x000a
  12. define LB_TAG_COMPILER 0x000b
  13. define LB_TAG_LINKER 0x000c
  14. define LB_TAG_ASSEMBLER 0x000d

// 0x000e is used by device tree entry?

  1. define LB_TAG_SERIAL 0x000f
  2. define LB_TAG_CONSOLE 0x0010
  3. define LB_TAG_FORWARD 0x0011
  4. define LB_TAG_FRAMEBUFFER 0x0012
  1. define LB_TAG_CMOS_OPTION_TABLE 200
  2. define LB_TAG_OPTION 201
  3. define LB_TAG_OPTION_ENUM 202
  4. define LB_TAG_OPTION_DEFAULTS 203
  5. define LB_TAG_OPTION_CHECKSUM 204