[coreboot] [PATCH] Update the document of CBFS
Hamo
hamo.by at gmail.com
Thu Apr 21 15:22:39 CEST 2011
CBFS document is a little old since the structure of it has changed a
lot specially CBFS master header.
This patch updated the document to show the newest structure of CBFS.
Signed-off-by: Yang Bai <hamo.by at gmail.com>
Index: documentation/cbfs.txt
===================================================================
--- documentation/cbfs.txt (revision 6534)
+++ documentation/cbfs.txt (working copy)
@@ -144,10 +144,13 @@
The following is the structure of the master header:
struct cbfs_header {
- unsigned int magic;
- unsigned int size;
- unsigned int align;
- unsigned int offset;
+ u32 magic;
+ u32 version;
+ u32 romsize;
+ u32 bootblocksize;
+ u32 align;
+ u32 offset;
+ u32 pad[2];
};
The meaning of each member is as follows:
@@ -156,9 +159,14 @@
magic
number is 0x4F524243, which is 'ORBC' in ASCII.
-'size' is the size of the ROM in bytes. Coreboot will subtract 'size' from
+'version' is a 32 bit number that shows the version of CBFS master header.
+Since only one version exists now, it should always be 0x31313131.
+
+'romsize' is the size of the ROM in bytes. Coreboot will subtract
'romsize' from
0xFFFFFFFF to locate the beginning of the ROM in memory.
+'bootblocksize' is the size of the bootblock in bytes.
+
'align' is the number of bytes that each component is aligned to within the
ROM. This is used to make sure that each component is aligned correctly
with
@@ -193,11 +201,11 @@
Each CBFS component starts with a header:
struct cbfs_file {
- char magic[8];
- unsigned int len;
- unsigned int type;
- unsigned int checksum;
- unsigned int offset;
+ char magic[8];
+ u32 len;
+ u32 type;
+ u32 checksum;
+ u32 offset;
};
'magic' is a magic value used to identify the header. During runtime,
@@ -287,11 +295,11 @@
The header is defined as:
struct cbfs_stage {
- unsigned int compression;
- unsigned long long entry;
- unsigned long long load;
- unsigned int len;
- unsigned int memlen;
+ u32 compression; /** Compression type */
+ u64 entry; /** entry point */
+ u64 load; /** Where to load in memory */
+ u32 len; /** length of data to load */
+ u32 memlen; /** total length of object in memory */
};
'compression' is an integer defining how the data is compressed. There
@@ -355,12 +363,12 @@
The following is the structure of each segment header:
struct cbfs_payload_segment {
- unsigned int type;
- unsigned int compression;
- unsigned int offset;
- unsigned long long load_addr;
- unsigned int len;
- unsigned int mem_len;
+ u32 type;
+ u32 compression;
+ u32 offset;
+ u64 load_addr;
+ u32 len;
+ u32 mem_len;
};
'type' is the type of segment, one of the following:
--
"""
Keep It Simple,Stupid.
"""
Chinese Name: 白杨
Nick Name: Hamo
Homepage: http://hamobai.com/
GPG KEY ID: 0xA4691A33
Key fingerprint = 09D5 2D78 8E2B 0995 CF8E 4331 33C4 3D24 A469 1A33
More information about the coreboot
mailing list