LAR Design

From coreboot
Revision as of 20:26, 7 November 2009 by Stuge (Talk | contribs) (Add box with info about CBFS being used in trunk)

Jump to: navigation, search

Please note that LAR has been replaced with CBFS in coreboot trunk, but LAR is still used for coreboot v3.


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