在uboot中进行解压缩是非常实用的

uboot中完毕delay 用户进行交互的段

if(BootType == '3') {

char *argv[3];

printf("   \n3: System Boot system code via Flash.\n");

。

。。。

下面就是要进入kernel拷贝内容了

由于kernel的尺寸比較大   通常会达到3M以上   这样用串口或者网络都会比較耗费时间  也会浪费宝贵的内存

解决方法就是传输和保存都用压缩过的 应用的时候在进行解压

uboot中已经集成了集中经常使用的解压缩程序,一般常见的gzip  、 bzip 、  lzma  都已经存在。

我们仅仅须要调用就能够了,这里给出一个建立解压缩命令的方法。

建立新的命令在签名的博客已经写了 ,这里就直接引用结果了

#include <common.h>

#include <command.h>

    u32 ret_decomps;

#ifdef CONFIG_CMD_DECOMPRESS

do_compress(cmd_tbl_t *cmdtp,int flag,int argc,char *argv[])

{

    u32 destLen = 0,len;

    len = simple_strtoul(argv[1], NULL, 16);

    printf("decompress start");

    //lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize, unsigned char *inStream,  SizeT  length)

    ret_decomps = lzmaBuffToBuffDecompress ((char *)0xa2000000, &destLen, (char *)0xa1000000,  len);

    printf("decompress finish");

    return 0;

}

U_BOOT_CMD(



decomps,5,1,do_compress,"decompress test\n","decompress:addr \n"



);

#endif

这里明有一些调试的信息没除去,反正不影响结果。

插一点,开启debug打印的方法

在uboot中能够看到有非常多的debug信息打印

debug ("LZMA: Image address............... 0x%lx\n", inStream);

    debug ("LZMA: Properties address.......... 0x%lx\n", inStream + LZMA_PROPERTIES_OFFSET);

    debug ("LZMA: Uncompressed size address... 0x%lx\n", inStream + LZMA_SIZE_OFFSET);

    debug ("LZMA: Compressed data address..... 0x%lx\n", inStream + LZMA_DATA_OFFSET);

    debug ("LZMA: Destination address......... 0x%lx\n", outStream);

尽管自己也能够用print函数实现 , 可是不如直接打开省事的  。

能够在相应的.h文件里添加一个

#define DEBUG

这样上面那些打印就能够打印出来了

以下继续我们命令的部分

这俩要開始添加lzma编译连接在make中的设置,由于默认lzma是不编译链接的。方法就是主文件夹下的makefile中加

LIBS += lib/lzma/liblzma.a

这样就能够编译连接进去了

然后我们就能够调用解压缩的接口函数进行解压缩操作了

uboot 解压缩的更多相关文章

  1. uboot——之初体验

    官方下载地址:ftp://ftp.denx.de/pub/u-boot/ uboot的终极奥义就是启动内核. 但是,现在,我们先做最基本的,去官网下载一个支持自己板子的uboot,然后解压缩,打补丁. ...

  2. u-boot FIT image介绍_转自“蜗窝科技”

    转自:http://www.wowotech.net/u-boot/fit_image_overview.html 1. 前言 Linux kernel在ARM架构中引入设备树device tree( ...

  3. Android系统启动过程-uBoot+Kernel+Android

    摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...

  4. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  5. 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

    Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash c ...

  6. U-Boot启动过程

    开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数.看一下board/smdk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序.第一个要链接的是c ...

  7. Jlink 烧写Uboot

    第一章 Hi3531_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章首次安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100 ...

  8. 海思uboot启动流程详细分析(三)【转】

    1. 前言 书接上文(u-boot启动流程分析(二)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的. ...

  9. u-boot编译

    u-boot目的:启动内核1.从flash读出内核,放到SDRAM中2.启动内核 u-boot要实现的功能:-----硬件相关的初始化----  ---开发的功能---------    关看门够   ...

随机推荐

  1. Hibernate 配置双向多对多关联

    本文解决问题:Hibernate 中配置项目(Project) 员工(Employee)   双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml)   将多对多查分开来(形成 ...

  2. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  3. 【译】x86程序员手册04 - 2.2数据类型

    2.2 Data Types 数据类型 Bytes, words, and doublewords are the fundamental data types (refer to Figure 2- ...

  4. C# invoke和begininvoke的用法

    namespace invoke和begininvoke的用法 { public partial class Form1 : Form { public Form1() { InitializeCom ...

  5. 惊了!!! 小白零基础学java (月薪过万是你的梦想嘛) 手把手教学 就怕你不动手【二十五】第二章【初识MySQL】

    初识MySQL1. 了解主流的数据库和数据库分类1.1 数据库概念数据库:按照数据结构来组织.存储和管理数据的一种建立在计算机存储设备上的仓库. 数据库的优势: 1. 可以持久化存储大量的数据.方便我 ...

  6. 在Unity中对注册表的信息进行操作

      问题1 在对注册表进行操作时无法生成注册表相关的类  解决办法:     增加头文件using Microsft.Win32; 问题2                    在运行程序时报错同时注 ...

  7. Linux命令(文本编辑器)

    vi和vim编辑器:有插入模式,一般模式,地行模式 一班模式通过(i.a.o.I.A.O)键--->进入插入模式            插入模式(按Esc键退出)---->j进入一班模式 ...

  8. Django - Ajax基本内容整理

    将原来的请求结果普通字符串,变更为类字典的字符串 从这段代码中,可以看到,对原有函数,进行了一个try ...except....操作,进行异常捕捉,将捕捉过程及结果,存入在初始化的字典中,将字典通过 ...

  9. 8.2.3 覆写 Equals

    经过对四种不同类型判等方法的讨论,我们不难发现不管是 Equals 静态方法.Equals 虚方法 抑或==操作符的执行结果,都可能受到覆写 Equals 方法的影响.因此研究对象判等就必须将注意 力 ...

  10. (C/C++学习)9.C/C++优化排序

    说明:在C/C++中常见的排序方法有两种,第一种为选择排序法,第二种为冒泡排序法,本文将对这两种排序法进行优化,并给出一种更为快捷的排序法. 一.未优化的排序法 现在假如要对一个数组进行排序,假设这个 ...