[coreboot] lar copy patch

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Fri Mar 7 02:34:37 CET 2008

On 07.03.2008 00:47, Myles Watson wrote:
> This patch adds copy functionality to lar via
> lar -L srclar.file

Although I appreciate the work you've done, I still feel the lar copy 
approach is not right.

> It allows you to use payloads, bootblocks, or other entries from one
> lar when creating or adding to another.
> changes by file:
> util/lar/lar.c:
> 	change usage
> 	add srcarchivename parameter for create_lar and add_lar
> 	add lar_copy functionality to create_lar and add_lar
> 	add -C keep for using the same compression as srclar
> util/lar/lar.h:
> 	change invalid to invalid_or_keep in algo_strings
> util/lar/lib.c:
> 	pull out function add_entry from add_files
> util/lar/lib.h:
> 	add prototypes for add_entry and lar_copy
> 	change prototype for create_lar (wonder why add_lar doesn't have one)
> 	fix whitespace
> util/lar/stream.c:
> 	pull out helper function file_in_list_where from file_in_list
> 	add lar_copy
> This is a test of the copy functionality of lar.  I'll use C++-style comments
>      // here's the original lar file
> [myles at orangutan svn]$ build/util/lar/lar -l build/coreboot.rom
>   normal/option_table (932 bytes @0x50);loadaddress 0x0 entry 0x0
>   normal/initram/segment0 (432 bytes @0x450);loadaddress 0x0 entry 0x0x42
>   normal/stage2/segment0 (191792 bytes, zeroes compressed to 1 bytes
> @0x650);loadaddress 0x0xa540 entry 0x0x2000
>   normal/stage2/segment1 (28172 bytes, lzma compressed to 15083 bytes
> @0x6b0);loadaddress 0x0x2000 entry 0x0x2000
>   normal/stage2/segment2 (5420 bytes, lzma compressed to 312 bytes
> @0x41f0);loadaddress 0x0x9000 entry 0x0x2000
>   bootblock (20480 bytes @0xfb000)
> Total size = 37688B 36KB (0x9338)
>      //create a new 256K lar file called bootblock.rom which has the
> same bootblock as coreboot.rom
> [myles at orangutan svn]$ build/util/lar/lar -c -s 256K bootblock.rom -L
> build/coreboot.rom
>      //create a new lar file with uncompressed normal/stage2
> [myles at orangutan svn]$ build/util/lar/lar -c -s 256K normal_stage2.rom
> -L build/coreboot.rom nocompress:normal/stage2:stage2

Wait. You add a file with path "stage2" as "normal/stage2"? That's wrong.

>      //create a new lar file with lzma compressed normal/init
> [myles at orangutan svn]$ build/util/lar/lar -c -s 256K normal_init.rom
> -L build/coreboot.rom -C lzma normal/init

What is normal/init? That thing does not exist as path.

>      //create a new lar file with normal/opt compressed the same as it was
> [myles at orangutan svn]$ build/util/lar/lar -c -s 256K normal_opt.rom -L
> build/coreboot.rom -C keep  normal/opt
>      //create a new 1M lar using the bootblock in bootblock.rom
> [myles at orangutan svn]$ build/util/lar/lar -c -s 1M new.rom -L bootblock.rom

How does LAR know that you want to copy the bootblock instead of an 
empty operation?

>      //add back in the components with the correct compression
> [myles at orangutan svn]$ build/util/lar/lar -a new.rom -L normal_opt.rom
> -C none normal/
> [myles at orangutan svn]$ build/util/lar/lar -a new.rom -L
> normal_init.rom -C none normal/init
>      //use the verbose switch to see what you're getting
> [myles at orangutan svn]$ build/util/lar/lar -av new.rom -L
> normal_stage2.rom -C lzma stage2:normal/stage2

Here the stange stage2 mentioning happens again.

> ... adding stage2:normal/stage2
> stage2:normal/stage2 (lzma) matches stage2/segment0 => normal/stage2/segment0.
> stage2:normal/stage2 (lzma) matches stage2/segment1 => normal/stage2/segment1.
> stage2:normal/stage2 (lzma) matches stage2/segment2 => normal/stage2/segment2.
>      //diff the two files
> [myles at orangutan svn]$ diff new.rom build/coreboot.rom
>  // There's no difference
> I think it would be nice if lar would warn you (or stop you) when you
> try to add a duplicate entry.  Maybe that will be the next patch.
> Myles
> Signed-off-by: Myles Watson <mylesgw at gmail.com>



More information about the coreboot mailing list