Difference between revisions of "LAR Design"

From coreboot
Jump to: navigation, search
m (Introduction)
Line 12: Line 12:
 
For a usage example see example.c.
 
For a usage example see example.c.
  
For questions contact Stefan Reinauer <stepan@coresystems.de>.
+
For questions contact [mailto:stepan@coresystems.de Stefan Reinauer].
 
+
  
 
= Usage =
 
= Usage =

Revision as of 15:15, 15 January 2008

Introduction

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.

Usage

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)

TODO

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

Discussion

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?

Example:

  • 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