基本介绍
在嵌入式很多应用场景中,经常会遇到存储空间不够。这个时候就需要采取一些手段,将应用程序或者文件压缩。对启动速度要求不高的场合可以使用。
本文基于开源库 LZMA SDK (https://www.7-zip.org/sdk.html)做介绍
下载
解压
LZMA-SDK包括以下内容:
- LZMA编码器和解码器的C ++源代码
- .7z压缩和解压缩的C ++源代码(精简版)
- LZMA / LZMA2 / XZ压缩和解压缩的ANSI-C兼容源代码
- 7z解压缩的ANSI-C兼容源代码示例
- 用于LZMA压缩和解压缩的C#源代码
- 用于LZMA压缩和解压缩的Java源代码
- lzma.exe为.lzma压缩和解压
- 7zr.exe与7z存档一起使用(7-Zip的7z.exe的简化版本)
由于是在嵌入式平台移植,故只介绍C语言的交叉编译。
7zDec 移植
- cd lzma1900/C/Util/7z
- vim makefile.gcc。将工具链修改为对应平台
- make -f makefile.gcc.生成可执行程序 7zDec
- 7zDec 支持的命令。默认只支持7za命令的3个选项,而不支持-o(指定解压目录)功能。因此,如果需要该功能,则需要修改源码。
- e:解压当前目录下
- x:解压到同名目录下
- l:列出包含的文件内容
- 添加o支持。vim 7zMain.c
- 添加用户说明
- 参数处理
- 文件处理
- 资源释放
- 测试命令
7zDec x xxx.7z o/tmp
lzma 移植
- cd lzma1900/C/Util/Lzma
- vim makefile.gcc
- make -f makefile.gcc 生成可执行程序 lzma
- lzma 支持的命令:目前只支持e和d两个命令
- lzma d xxx.lzma /tmp/xxx:解压到指定目录下。
总结
本文主要介绍了,嵌入式项目中两种常见的解压工具移植。将应用程序或者文件压缩,虽然省掉了空间。同时会带来新的问题,启动时间过慢,占用过多的内存。具体情景视产品定义,酌情处理。