嵌入式 linux 之 Lzma 移植

简介: 嵌入式 linux 之 Lzma 移植

基本介绍


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


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


下载


image.png


解压


image.png


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


image.png


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


image.png


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


image.png


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


image.png


  • e:解压当前目录下


  • x:解压到同名目录下


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


  • 添加o支持。vim 7zMain.c


  1. 添加用户说明

image.png


  1. 参数处理

image.png


  1. 文件处理

image.png


  1. 资源释放

image.png


  1. 测试命令


7zDec x xxx.7z o/tmp


lzma 移植


  • cd lzma1900/C/Util/Lzma

image.png


  • vim makefile.gcc

image.png


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

image.png


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


image.png


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


总结


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

相关文章
|
5天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
33 15
|
19天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
84 13
|
7月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
208 1
|
5月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
174 3
|
5月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
226 0
|
6月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
7月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
7月前
|
网络协议 Linux 编译器
【原创】EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统移植指南
EtherCAT主站方案对比:商业的如Acontis、TwinCAT3和开源的igh、SOEM。SOEM易移植但功能和实时性不足,适合简单应用;igh功能强大,实时性能优秀,基于内核态,适合复杂场景。igh能移植到其他RTOS,但需克服多任务无调度的挑战。依赖操作系统服务如定时器、内存分配,适合Linux内核,但移植到裸机复杂。
342 0
|
消息中间件 缓存 Unix
[面试必备]嵌入式Linux内核开发必须了解的三十道题
[面试必备]嵌入式Linux内核开发必须了解的三十道题
|
Linux
嵌入式Linux QT开发之如何实现获取磁盘空间大小的应用逻辑
嵌入式Linux QT开发之如何实现获取磁盘空间大小的应用逻辑
257 0