uboot 解压缩

在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

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

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

时间: 2024-11-05 09:04:31

uboot 解压缩的相关文章

S5P210-uboot源码分析-uboot如何启动内核

uboot如何启动内核 7.1.uboot和内核到底是什么? 1.uboot是一个裸机程序 (1)uboot的本质就是一个复杂点的裸机程序,和我们arm裸机中写的程序没有什么本质上的区别. (2)uboot最像我们在arm裸机中的最后写的那个shell,它其实就是一个迷你型的uboot. 2.linux内核本身也是一个"裸机程序" (1)操作系统内核本身就是一个裸机程序,和uboot并没有本质区别. (2)区别在于,操作系统运行起来后在软件层次上可以分为内核层和应用层,分层后两层的权限

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

转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global data介绍以及背后的思考 5. 前置的板级初始化操作 6. u-boot的relocation 7. 后置的板级初始化操作 1. 前言 书接上文(u-boot启动流程分析(1)_平台相关部分),本文介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_i

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

转自:http://www.wowotech.net/u-boot/fit_image_overview.html 1. 前言 Linux kernel在ARM架构中引入device tree(全称是flattened device tree,后续将会以FDT代称)的时候[1],其实怀揣了一个Unify Kernel的梦想----同一个Image,可以支持多个不同的平台.随着新的ARM64架构将FDT列为必选项,并将和体系结构有关的代码剥离之后,这个梦想已经接近实现: 在编译linux kern

uboot向kernel的传参机制——bootm与tags

最近阅读代码学习了uboot boot kernel的过程以及uboot如何传参给kernel,记录下来,与大家共享: U-boot版本:2014.4 Kernel版本:3.4.55 一 uboot 如何启动 kernel 1 do_bootm uboot下使用bootm命令启动内核镜像文件uImage,uImage是在zImage头添加了64字节的镜像信息供uboot解析使用,具体这64字节头的内容,我们在分析bootm命令的时候就会一一说到,那直接来看bootm命令. 在common/cmd

用uboot 烧写uboot linux内核 文件系统到nandflash的 过程以及bootm go命令启动与区别

原文:http://blog.sina.com.cn/s/blog_6b94d5680100nd48.html 文章结构结构顺序有变化-1:烧写uboot0: bootargs bootcmd 命令参数的设置1:制作yaffs2的过程2:烧写yaffs2的过程3:制作uimage 的过程4: 烧写uiamge的过程5:uimage zimage vmlinux 的区别6: uboot传递给内核的参数结构 tag7:bootm go 的 启动过程 以及区别8:加载地址 入口地址 等 ///////

[uboot] uboot启动kernel篇(二)——bootm跳转到kernel的流程

一.bootm说明 bootm这个命令用于启动一个操作系统映像.它会从映像文件的头部取得一些信息,这些信息包括:映像文件的基于的cpu架构.其操作系统类型.映像的类型.压缩方式.映像文件在内存中的加载地址.映像文件运行的入口地址.映像文件名等. 紧接着bootm将映像加载到指定的地址,如果需要的话,还会解压映像并传递必要有参数给内核,最后跳到入口地址进入内核. 这里的描述参考(http://blog.chinaunix.net/uid-20799298-id-99666.html) 需要打开的宏

uboot新手入门

一.编译U-boot 1.通过smb服务器将uboot_tiny6410拷贝到linux下 2.解压缩  tar xvzf uboot_tiny6410.tar.gz 3.配置打开顶层makefile 搜索6410可以找到tiny6410_config.然后make tiny6410_config 4.编译 make ARCH=arm CROSS_COMPILE=arm-linux-(不需要填gcc) 5.查看是否生成uboot.bin文件 6烧写 二.U-Boot命令 1.帮助命令 help

用VS2013+VELT-0.1.4进行海思平台 UBOOT 的开发

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.4 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序

如何实现uboot和linux之间的参数传递

参考http://cgxcn.blog.163.com/blog/static/132312422009101133251202/ 参考:http://blog.chinaunix.net/uid-14833587-id-76499.html 参考:http://lixuefeng26.blog.sohu.com/204383842.html 原理就是:uboot将要传递的参数,保存到一个指定的物理位置:然后linux从该物理位置获取数据即可 1.先看一下uboot自带的参数传递过程: A. 首