u-boot下解压函数
时间: 2023-11-11 15:03:20 浏览: 40
在 u-boot 中,解压函数是用于将压缩后的内核映像解压缩到内存中的函数。该函数的名称是 `gunzip`,定义在 `common/compress.c` 文件中。以下是该函数的伪代码:
```c
int gunzip(unsigned char *buf, long len, void *dst, ulong *crc32)
{
unsigned char *src = buf;
unsigned char *dst_start = dst;
unsigned char *dst_end = dst + len;
unsigned long count, code, crc;
int ret;
// 初始化 CRC32 校验值
crc = crc32(0, Z_NULL, 0);
// 循环解压每个压缩块
do {
// 读取压缩块的头部
code = read_bits(src, 16);
// 判断压缩块的类型
if (code == 0x1f9d) { // 结束块
break;
} else if (code == 0x1f8b) { // 压缩块
ret = uncompress_block(src, dst, dst_end, &crc);
if (ret != 0) {
return ret;
}
} else { // 未知块
return -1;
}
} while (1);
// 校验 CRC32
if (crc32 != NULL) {
*crc32 = crc;
}
return dst - dst_start;
}
```
该函数使用了 zlib 库中的 `crc32` 函数和 `uncompress` 函数,通过读取压缩块头部的标识码来确定当前压缩块的类型,然后调用相应的函数进行解压缩。在解压缩过程中,函数会将解压缩后的数据保存到指定的内存区域,并计算 CRC32 校验值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)