[coreboot] New patch to review for coreboot: d9dc894 cbfstool: add offset parameter to create command

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Tue Nov 6 23:51:56 CET 2012


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1708

-gerrit

commit d9dc894a9601c31ee387cb80b591257ef63f0469
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Wed Aug 15 16:05:50 2012 -0700

    cbfstool: add offset parameter to create command
    
    CBFS allows coreboot rom images that are only partially covered
    by the filesystem itself. The intention of this feature was to
    allow EC / ME / IMC firmware to be inserted easily at the beginning
    of the image. However, this was never implemented in cbfstool.
    
    This patch implements an additional parameter for cbfstool.
    
    If you call cbfstool like this:
    cbfstool coreboot.rom create 8192K bootblock.bin 64 0x700000
    it will now create an 8M image with CBFS covering the last 1M of
    that image.
    
    Test:
         cbfstool coreboot.rom create 8192K bootblock.bin 64 0x700000
         creates an 8M image that is 7M of 0xff and 1M of CBFS.
    
    Change-Id: I5c016b4bf32433f160b43f4df2dd768276f4c70b
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
---
 util/cbfstool/cbfstool.c | 22 +++++++++++++---------
 util/cbfstool/common.c   |  8 ++++----
 util/cbfstool/common.h   |  3 ++-
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index 913fd33..f74497c 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -245,7 +245,11 @@ static int cbfs_create(int argc, char **argv)
 	if (argc > 5)
 		align = strtoul(argv[5], NULL, 0);
 
-	return create_cbfs_image(romname, size, bootblock, align);
+	uint32_t offs = 0;
+	if (argc > 6)
+		offs = strtoul(argv[6], NULL, 0);
+
+	return create_cbfs_image(romname, size, bootblock, align, offs);
 }
 
 static int cbfs_locate(int argc, char **argv)
@@ -318,14 +322,14 @@ static void usage(void)
 	     " cbfstool FILE COMMAND [PARAMETERS]...\n\n" "OPTIONs:\n"
 	     "  -h		Display this help message\n\n"
 	     "COMMANDs:\n"
-	     " add FILE NAME TYPE [base address]    Add a component\n"
-	     " add-payload FILE NAME [COMP] [base]  Add a payload to the ROM\n"
-	     " add-stage FILE NAME [COMP] [base]    Add a stage to the ROM\n"
-	     " remove FILE NAME                     Remove a component\n"
-	     " create SIZE BOOTBLOCK [ALIGN]        Create a ROM file\n"
-	     " locate FILE NAME ALIGN               Find a place for a file of that size\n"
-	     " print                                Show the contents of the ROM\n"
-	     " extract NAME FILE                    Extracts a raw payload from ROM\n"
+	     " add FILE NAME TYPE [base address]      Add a component\n"
+	     " add-payload FILE NAME [COMP] [base]    Add a payload to the ROM\n"
+	     " add-stage FILE NAME [COMP] [base]      Add a stage to the ROM\n"
+	     " remove FILE NAME                       Remove a component\n"
+	     " create SIZE BOOTBLOCK [ALIGN] [offset] Create a ROM file\n"
+	     " locate FILE NAME ALIGN                 Find a place for a file of that size\n"
+	     " print                                  Show the contents of the ROM\n"
+	     " extract NAME FILE                      Extracts a raw payload from ROM\n"
 	     "\n"
 	     "TYPEs:\n"
 	     );
diff --git a/util/cbfstool/common.c b/util/cbfstool/common.c
index 648bfa8..23f3ecf 100644
--- a/util/cbfstool/common.c
+++ b/util/cbfstool/common.c
@@ -446,7 +446,7 @@ void *create_cbfs_file(const char *filename, void *data, uint32_t * datasize,
 }
 
 int create_cbfs_image(const char *romfile, uint32_t _romsize,
-		      const char *bootblock, uint32_t align)
+		      const char *bootblock, uint32_t align, uint32_t offs)
 {
 	romsize = _romsize;
 	unsigned char *romarea = malloc(romsize);
@@ -473,14 +473,14 @@ int create_cbfs_image(const char *romfile, uint32_t _romsize,
 	master_header->romsize = htonl(romsize);
 	master_header->bootblocksize = htonl(bootblocksize);
 	master_header->align = htonl(align);
-	master_header->offset = htonl(0);
+	master_header->offset = htonl(offs);
 	((uint32_t *) phys_to_virt(0xfffffffc))[0] =
 	    virt_to_phys(master_header);
 
 	recalculate_rom_geometry(romarea);
 
-	cbfs_create_empty_file((0 - romsize) & 0xffffffff,
-				   romsize - bootblocksize -
+	cbfs_create_empty_file((0 - romsize + offs) & 0xffffffff,
+				   romsize - offs - bootblocksize -
 				   sizeof(struct cbfs_header) -
 				   sizeof(struct cbfs_file) - 16);
 
diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h
index 296ab2d..7ef50c4 100644
--- a/util/cbfstool/common.h
+++ b/util/cbfstool/common.h
@@ -64,9 +64,10 @@ void *create_cbfs_file(const char *filename, void *data, uint32_t * datasize,
 		       uint32_t type, uint32_t * location);
 
 int create_cbfs_image(const char *romfile, uint32_t romsize,
-		      const char *bootblock, uint32_t align);
+		      const char *bootblock, uint32_t align, uint32_t offs);
 
 int add_file_to_cbfs(void *content, uint32_t contentsize, uint32_t location);
+int remove_file_from_cbfs(const char *filename);
 void print_cbfs_directory(const char *filename);
 int extract_file_from_cbfs(const char *filename, const char *payloadname, const char *outpath);
 int remove_file_from_cbfs(const char *filename);




More information about the coreboot mailing list