LAR Design

From coreboot
Revision as of 21:13, 7 November 2009 by Hailfinger (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Please note that LAR is not used in coreboot v2 trunk (which has the alternative CBFS), but LAR is still used for coreboot v3.


Please note that this page is incomplete and outdated, the LAR documentation in the coreboot v3 source tree (including code comments) lists the current features and has up-to-date design documentation.

LAR is the coreboot archiver. It is a small utility that we use to create and change coreboot images and their modules.

It is a simple archiver, similar to cpio, ar or tar.

Design goals were

 - minimum overhead
 - maximum fault tolerance
 - simplicity

For a usage example see example.c.

For questions contact Stefan Reinauer.


Create archive archive.lar containing files file1 ... fileN:

 $ lar c archive.lar file1 ... fileN

Extract files from archive.lar:

 $ lar x archive.lar [file1 ... fileN]

List files in archive:

 $ lar l archive.lar

Archive format

The rough format is:

| header       |
| data         |
| header       |
| data         |

Headers have to be 16 byte aligned.

Data blocks have to be 16 byte aligned.

| magic (8 bytes)            |
| compressed length (4 bytes)|
| real length (4 bytes)      |
| checksum (4 bytes)         |
| chksum compressed blob (4b)|
| offset to blob (4 bytes)   |
| compression id (4 bytes)   |
| "path",\0 (16b aligned)    |
| blob (aligned to 16 bytes) |
  • compressed length means: length of blob
  • real length means: size of the uncompressed blob
  • checksum covers: header and blob, with "checksum" and "checksum compressed blob" set to 0
  • checksum compressed blob covers: the uncompressed data (no headers)


  • Reading flash layouts
  • This does not enforce any alignment yet
  • Alignment enforcing will be optional


Patrick Georgi and Stefan Reinauer discussed extending LAR so that it handles a MANIFEST file.

This file will list all existing files, and their current compression. If a file is in the MANIFEST, it's compression status will not be changed. This feature is required for making sure that initram is not compressed.

MANIFEST will describe

  • compression of files
  • size of the unpacked image (optional on parse-time, to make it easier for "lar c" users)
  • bootblock name
  • other metadata?


  • normal/initram=../../build/coreboot.initram * none

means: the file "normal/initram" inside the lar file will be created from "../../build/coreboot.initram", with "none" compression. size isn't given and taken from the existing file

Some syntax examples

$ lar x coreboot.rom # create coreboot/* and coreboot/MANIFEST
$ lar c coreboot.rom coreboot/ # looks for coreboot/MANIFEST
$ lar x coreboot.rom # image without payload
$ cp payload.bin
$ lar c coreboot.rom coreboot/ -s 512K
$ # creates image, overiding size to 512K