LAR Design

From coreboot
Revision as of 12:17, 22 June 2007 by PatrickGeorgi (Talk | contribs)

Jump to: navigation, search

Introduction

LAR is the LinuxBIOS Archiver. It is a small utility that we use to create and change LinuxBIOS 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 <stepan@coresystems.de>.


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.

Headers have to be 16 byte aligned.

|----------------------------|
| magic (8 bytes)            |
|----------------------------|
| length (4 bytes)           |
|----------------------------|
| checksum (4 bytes)         |
|----------------------------|
| offset to blob (4 bytes)   |
|----------------------------|
| "path name"                | <-- null terminated, aligned to 16 bytes
|----------------------------|
| blob (aligned to 16 bytes) |
|----------------------------|


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/linuxbios.initram * none

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

Some syntax examples

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