zoukankan      html  css  js  c++  java
  • 一种分片更新ubi卷的方式(基于ubiupdatevol,拓展fifo支持)

    ubi卷的更新方式

    对于ubi卷,不能像普通块设备一样进行随机读写。每次更新需要从头写入。
    具体的,需要在打开对应的设备之后,先执行一个ioctl UBI_IOCVOLUP,同时传入要更新的数据大小。
    随后开始写入数据。写入可以分多次,但必须写满ioctl指定的需要更新的数据量。
    写入足够的数据量之后,ubi才算更新完成。提前中断的话,该卷会被破坏,只能重新开始一次更新才能修复它。

    fd = open("/dev/my_volume");
    ioctl(fd, UBI_IOCVOLUP, &image_size);
    write(fd, buf, image_size);
    close(fd);
    

    ubiupdatevol工具

    mtd-utils 系列工具中,提供了ubiupdatevol工具,可用于更新ubi卷。

    基本的用法很简单,如帮助文件所示,直接传入要更新的设备和要更新的数据文件即可。
    ubiupdatevol会自动获得文件的大小,再完成ioctl和写入。
    当然也可以通过-s指定要更新的数据大小,通过--skip跳过部分源文件的长度。
    如果对ubi卷执行-t,则等同于擦除该卷的数据。

    ubiupdatevol version 2.0.1 - a tool to write data to UBI volumes.
    
    Usage: ubiupdatevol <UBI volume node file name> [-t] [-s <size>] [-h] [-V] [--truncate]
    			[--size=<size>] [--help] [--version] <image file>
    
    Example 1: ubiupdatevol /dev/ubi0_1 fs.img - write file "fs.img" to UBI volume /dev/ubi0_1
    Example 2: ubiupdatevol /dev/ubi0_1 -t - wipe out UBI volume /dev/ubi0_1
    
    -t, --truncate             truncate volume (wipe it out)
    -s, --size=<bytes>         bytes to read from input
        --skip=<bytes>         leading bytes to skip from input
    -h, --help                 print help message
    -V, --version              print program version
    

    为ubiupdatevol拓展fifo功能

    ubiupdatevol工具使用起来,一个不方便的地方就是,必须将要更新的数据事先准备好,保存在本地,一次性传递给它。

    这种要求有时候是满足不了的。例如在空间有限的嵌入式设备上,更新一个卷的数据可能需要分多次,每次从网络上下载一部分,更新进去,再下载一部分,以此循环。
    此时一般需要自己写一个应用来完成。此处提供另外一种思路,即扩展ubiupdatevol工具。可以为ubiupdatevol工具拓展一个fifo功能,当传入-f参数时,让ubiupdatevol创建一个有名管道(named fifo),并阻塞在这个管道上,每读到一笔数据就写入卷中,直到从管道读取到足够长度的数据,再删除管道,完成本次更新。
    长度可以在调用时使用-s参数指定,未指定的话直接取卷的大小即可。

    这样对于其他程序来说,调用ubiupdatevol生成用于更新的fifo之后,就可以直接打开fifo文件,分多次写入数据即可。在写完有效数据之后,可以再往fifo中写入足够多的0数据,以填满整个卷。

    例如

    ubiupdatevol /dev/ubi0_1 -f &
    dd if=newdata.part1 of=/dev/ubi0_1_fifo
    dd if=newdata.part2 of=/dev/ubi0_1_fifo
    dd if=/dev/zero of=/dev/ubi0_1_fifo
    

    原文:https://www.cnblogs.com/zqb-all/p/11074500.html

  • 相关阅读:
    JDK安装与配置
    MAVEN安装与配置
    http协议与soap协议之间的区别
    Zookeeper
    TCP/IP及http协议 SOAP REST
    Java数据结构总述
    SQL基础
    IntelliJ IDEA 快捷键
    反射机制
    java集合的作用
  • 原文地址:https://www.cnblogs.com/zqb-all/p/11074500.html
Copyright © 2011-2022 走看看