基本介绍

在嵌入式很多应用场景中,经常会遇到存储空间不够。这个时候就需要采取一些手段,将应用程序或者文件压缩。对启动速度要求不高的场合可以使用。

本文基于开源库 LZMA SDK (https://www.7-zip.org/sdk.html)做介绍

下载

嵌入式 linux 之 Lzma 移植_嵌入式

解压

嵌入式 linux 之 Lzma 移植_7z_02

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

嵌入式 linux 之 Lzma 移植_7z_03

  • vim makefile.gcc。将工具链修改为对应平台

嵌入式 linux 之 Lzma 移植_嵌入式_04

  • make -f makefile.gcc.生成可执行程序 7zDec

嵌入式 linux 之 Lzma 移植_解压缩_05



7zDec 支持的命令。默认只支持7za命令的3个选项,而不支持-o(指定解压目录)功能。因此,如果需要该功能,则需要修改源码。

嵌入式 linux 之 Lzma 移植_7z_06



  • e:解压当前目录下

  • x:解压到同名目录下

  • l:列出包含的文件内容


添加o支持。vim 7zMain.c



  1. 添加用户说明
    嵌入式 linux 之 Lzma 移植_嵌入式_07
  2. 参数处理
    嵌入式 linux 之 Lzma 移植_解压缩_08
  3. 文件处理 
    嵌入式 linux 之 Lzma 移植_7z_09
  4. 资源释放 
    嵌入式 linux 之 Lzma 移植_解压缩_10
  5. 测试命令

7zDec x xxx.7z o/tmp

lzma 移植



cd lzma1900/C/Util/Lzma 

嵌入式 linux 之 Lzma 移植_解压缩_11



vim makefile.gcc 


嵌入式 linux 之 Lzma 移植_嵌入式_12



make -f makefile.gcc 生成可执行程序 lzma 


嵌入式 linux 之 Lzma 移植_解压缩_13



lzma 支持的命令:目前只支持e和d两个命令 



嵌入式 linux 之 Lzma 移植_解压缩_14



lzma d xxx.lzma /tmp/xxx:解压到指定目录下。


总结

本文主要介绍了,嵌入式项目中两种常见的解压工具移植。将应用程序或者文件压缩,虽然省掉了空间。同时会带来新的问题,启动时间过慢,占用过多的内存。具体情景视产品定义,酌情处理。

(ps: 最近几个月没有更新了,感谢大家的支持,很久没有登录后台了,有些私信问题没有来得及回复,有疑问的可以后台回复【私信】添加个人微信号,备注公众号名字即可!)