struct xz_buf b; struct xz_dec *s; xz_crc32_init(); /* * Support up to 64 MiB dictionary. The actually needed memory * is allocated once the headers have been parsed. */ s = xz_dec_init(XZ_SINGLE, 16*1024); if(s==NULL) { printf("xz_dec_init ERROR!!\n"); } b.in = (unsigned char*)(CONFIG_LOADADDR + NORMAL_BOOT_IMAGE_OFFSET); //ignore 40 bytes image header b.in_pos = 0; b.in_size = NORMAL_BOOT_IMAGE_SIZE; b.out = (unsigned char*)(NORMAL_BOOT_LOADADDR); b.out_pos = 0; b.out_size = NORMAL_BOOT_MAX_SIZE; printf("XZ params: in_addr 0x%x, in_size 0x%x, out_addr 0x%x, out_size 0x%x\n", (unsigned int)b.in, (unsigned int)b.in_size, (unsigned int)b.out, (unsigned int)b.out_size);这段代码的意思
时间: 2024-03-29 12:35:05 浏览: 109
这段代码主要实现了使用xz解压缩算法解压缩一个Linux内核镜像文件。
首先定义了一个结构体xz_buf b,用于存放输入和输出的缓冲区以及它们的长度。然后通过调用xz_crc32_init()函数进行CRC校验的初始化。接下来调用xz_dec_init()函数初始化一个用于解压缩的结构体指针s,其中XZ_SINGLE表示使用单个压缩流,16*1024表示解压缩使用的字典大小为16KB。
随后将要解压缩的Linux内核镜像文件的地址和长度存放在结构体b的in成员和in_size成员中,解压缩后的结果存放在结构体b的out成员中。这里需要注意的是,在输入缓冲区中忽略了40字节的Linux内核镜像文件头。最后打印出解压缩参数的信息,包括输入和输出缓冲区的地址和长度等信息。
阅读全文