[MTD] Rework the out of band handling completely

本文介绍了 Linux MTD 子系统中 NAND 设备 Out-of-band (OOB) 数据处理的重大重构工作。作者详细解释了 read/write_oob 函数的使用方式及三种操作模式:MTD_OOB_RAW、MTD_OOB_PLACE 和 MTD_OOB_AUTO,并说明了如何通过 struct mtd_oob_ops 控制这些操作。
http://lists.infradead.org/pipermail/linux-mtd-cvs/2006-May/005519.html
官方介绍有关oob这部分的知识,特别是MTD_OOB_RAW, MTD_OOB_PLACE, MTD_OOB_AUTO的含义。

    [MTD] Rework the out of band handling completely
   
    Hopefully the last iteration on this!
   
    The handling of out of band data on NAND was accompanied by tons of fruitless
    discussions and halfarsed patches to make it work for a particular
    problem. Sufficiently annoyed by I all those "I know it better" mails and the
    resonable amount of discarded "it solves my problem" patches, I finally decided
    to go for the big rework. After removing the _ecc variants of mtd read/write
    functions the solution to satisfy the various requirements was to refactor the
    read/write _oob functions in mtd.
   
    The major change is that read/write_oob now takes a pointer to an operation
    descriptor structure "struct mtd_oob_ops".instead of having a function with at
    least seven arguments.
   
    read/write_oob which should probably renamed to a more descriptive name, can do
    the following tasks:
   
    - read/write out of band data
    - read/write data content and out of band data
    - read/write raw data content and out of band data (ecc disabled)
   
    struct mtd_oob_ops has a mode field, which determines the oob handling mode.
   
    Aside of the MTD_OOB_RAW mode, which is intended to be especially for
    diagnostic purposes and some internal functions e.g. bad block table creation,
    the other two modes are for mtd clients:
   
    MTD_OOB_PLACE puts/gets the given oob data exactly to/from the place which is
    described by the ooboffs and ooblen fields of the mtd_oob_ops strcuture. It's
    up to the caller to make sure that the byte positions are not used by the ECC
    placement algorithms.
   
    MTD_OOB_AUTO puts/gets the given oob data automaticaly to/from the places in
    the out of band area which are described by the oobfree tuples in the ecclayout
    data structre which is associated to the devicee.
   
    The decision whether data plus oob or oob only handling is done depends on the
    setting of the datbuf member of the data structure. When datbuf == NULL then
    the internal read/write_oob functions are selected, otherwise the read/write
    data routines are invoked.
   
    Tested on a few platforms with all variants. Please be aware of possible
    regressions for your particular device / application scenario
   
    Disclaimer: Any whining will be ignored from those who just contributed "hot
    air blurb" and never sat down to tackle the underlying problem of the mess in
    the NAND driver grown over time and the big chunk of work to fix up the
    existing users. The problem was not the holiness of the existing MTD
    interfaces. The problems was the lack of time to go for the big overhaul. It's
    easy to add more mess to the existing one, but it takes alot of effort to go
    for a real solution.
   
    Improvements and bugfixes are welcome!
要从设备文件 `/dev/mtd0` 复制数据到文件中,可以使用 `dd` 命令来完成。`dd` 命令是一个用于复制文件、转换数据并输出到另一个文件或设备的工具,特别适合用于磁盘或分区的备份和镜像操作。以下是具体的命令用法: ```bash dd if=/dev/mtd0 of=output_file.bin bs=1M ``` ### 参数说明: - `if=/dev/mtd0`:指定输入文件为 `/dev/mtd0`,即从该设备读取数据。 - `of=output_file.bin`:指定输出文件为 `output_file.bin`,即数据将被写入该文件。 - `bs=1M`:设置每次读写的数据块大小为 1MB,这可以提高复制效率。 ### 可选参数: - `count=BLOCKS`:如果需要复制特定数量的数据块,可以使用此参数限制复制的数据量。 - `skip=BLOCKS`:如果需要跳过输入文件的前若干个数据块再开始复制,可以使用此参数。 - `seek=BLOCKS`:如果需要跳过输出文件的前若干个数据块再开始写入,可以使用此参数。 例如,如果需要复制 `/dev/mtd0` 的前 100 个 1MB 数据块到文件中,可以使用以下命令: ```bash dd if=/dev/mtd0 of=output_file.bin bs=1M count=100 ``` 在实际使用中,`/dev/mtd0` 是一个 MTD(Memory Technology Device)设备节点,通常用于直接访问原始的 Flash 存储设备,如 NOR Flash 或 NAND Flash。与传统的块设备(如 `/dev/sda`)不同,MTD 设备不支持文件系统级别的操作,而是直接操作底层存储单元。 在某些情况下,可能需要通过 `mtd-utils` 工具包中的 `flashcp` 或 `nanddump` 等工具来处理 MTD 设备的内容,尤其是需要处理 JFFS2 文件系统或其他 Flash 文件系统时[^1]。 ### 注意事项: - 在执行 `dd` 命令时,确保对设备文件 `/dev/mtd0` 的访问权限正确,可能需要使用 `sudo` 提升权限。 - 复制操作可能耗时较长,具体取决于 Flash 设备的大小和读取速度。 - 如果目标文件 `output_file.bin` 已经存在,`dd` 命令会覆盖其内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值