1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 16:52:14 +02:00

image: Add a common compression type detection function.

Currently, there is no method that can detect compression types
given a file. This is very useful where a compressed kernel image
is loaded directly to the memory.

Inspect initial few bytes to figure out compression type of the
image. It will be used in booti method for now but can be reused
any other function in future as well.

Signed-off-by: Atish Patra <atish.patra@wdc.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Atish Patra
2020-03-05 16:24:22 -08:00
committed by Tom Rini
parent 2a2119e10c
commit 155d6a3575
2 changed files with 44 additions and 0 deletions

View File

@@ -202,6 +202,14 @@ struct table_info {
const table_entry_t *table;
};
static const struct comp_magic_map image_comp[] = {
{ IH_COMP_BZIP2, "bzip2", {0x42, 0x5a},},
{ IH_COMP_GZIP, "gzip", {0x1f, 0x8b},},
{ IH_COMP_LZMA, "lzma", {0x5d, 0x00},},
{ IH_COMP_LZO, "lzo", {0x89, 0x4c},},
{ IH_COMP_NONE, "none", {}, },
};
static const struct table_info table_info[IH_COUNT] = {
{ "architecture", IH_ARCH_COUNT, uimage_arch },
{ "compression", IH_COMP_COUNT, uimage_comp },
@@ -407,6 +415,21 @@ static void print_decomp_msg(int comp_type, int type, bool is_xip)
printf(" Uncompressing %s\n", name);
}
int image_decomp_type(const unsigned char *buf, ulong len)
{
const struct comp_magic_map *cmagic = image_comp;
if (len < 2)
return -EINVAL;
for (; cmagic->comp_id > 0; cmagic++) {
if (!memcmp(buf, cmagic->magic, 2))
break;
}
return cmagic->comp_id;
}
int image_decomp(int comp, ulong load, ulong image_start, int type,
void *load_buf, void *image_buf, ulong image_len,
uint unc_len, ulong *load_end)