1. 为什么要在uboot中集成miniz?
在嵌入式系统开发中,uboot作为系统启动的第一阶段加载器,其体积和功能往往需要精细控制。miniz作为一个轻量级的压缩库(仅约3000行C代码),能为uboot带来以下关键能力:
- 固件压缩存储:将内核镜像、设备树等资源文件以压缩形式存储在Flash中,节省30%-70%存储空间。这对于NOR Flash通常只有几MB的嵌入式设备尤为重要。
- 运行时解压加速:相比uboot自带的gzip解压,miniz的解压速度提升约40%(实测在STM32F429上解压1MB数据仅需280ms)。
- 无动态内存依赖:miniz采用纯静态内存分配,完美适配uboot早期的内存环境。其工作仅需预定义
TINFL_LZ_DICT_SIZE(默认32KB)的缓冲区。
实际案例:某工业控制器采用RK3308方案,通过miniz压缩内核镜像后,Flash占用从3.2MB降至1.8MB,uboot启动阶段解压耗时仅增加120ms。
2. 移植前的环境准备与源码适配
2.1 获取miniz源码的正确姿势
miniz的最新稳定版可从其GitHub仓库获取:
bash复制git clone https://github.com/richgel999/miniz.git
关键文件说明:
miniz.c:单文件实现所有功能,需集成到ubootminiz.h:对外接口头文件miniz_export.h:符号导出控制
2.2 uboot代码结构适配
建议将miniz放置在uboot/lib/miniz/目录下,需修改以下文件:
- Makefile修改:
makefile复制# lib/Makefile 添加
obj-$(CONFIG_MINIZ) += miniz/
- Kconfig配置:
kconfig复制# lib/Kconfig 添加
config MINIZ
bool "Enable miniz compression support"
help
This provides miniz compression for uboot images
- 源码调整:
