You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在二进制Flash文件的每2048字节后插入64字节FF数据(模拟OOB区域)

如何使用Python在二进制Flash文件的每2048字节后插入64字节FF数据(模拟OOB区域)

嘿,我完全明白你的需求——你要把来自firmware.i的Flash二进制文件,转换成适配2GiB NAND Flash的格式:每2048字节的有效数据块后,都加上64字节的FF填充(也就是模拟OOB区域)。既然你之前已经用Python搞定过删除OOB的操作,那添加OOB的逻辑其实反过来就行,非常好实现!

核心思路很简单:分块读取原文件的有效数据,每读满2048字节,就把这部分数据加上64字节的全FF数据一起写入新文件。就算最后一块不足2048字节,我们也同样在它后面补上64字节FF(你也可以根据实际Flash的规格调整这块的处理逻辑)。

这里是完整的Python脚本,你可以直接拿来用:

def add_oob_to_flash(input_file_path, output_file_path):
    # 定义有效数据块大小和OOB区域大小
    DATA_BLOCK_SIZE = 2048
    OOB_BLOCK_SIZE = 64
    # 生成OOB区域的填充数据(全FF的二进制字节串)
    oob_data = b'\xff' * OOB_BLOCK_SIZE

    # 以二进制模式打开输入/输出文件,避免编码问题破坏二进制数据
    with open(input_file_path, 'rb') as infile, open(output_file_path, 'wb') as outfile:
        while True:
            # 每次读取一块2048字节的有效数据
            data_block = infile.read(DATA_BLOCK_SIZE)
            if not data_block:
                # 读取到文件末尾,退出循环
                break
            # 先写入有效数据块
            outfile.write(data_block)
            # 再写入对应的OOB填充块
            outfile.write(oob_data)
            # 可选:打印进度,方便处理大文件时查看
            # print(f"已处理 {len(data_block)} 字节数据 + OOB区域")

# 替换成你实际的输入文件路径和输出文件路径
input_path = "firmware.i"
output_path = "firmware_with_oob.bin"

# 执行处理
add_oob_to_flash(input_path, output_path)
print(f"处理完成!带OOB区域的文件已生成:{output_path}")

代码关键细节说明:

  • 二进制模式读写:必须用rb(读二进制)和wb(写二进制)模式,否则文本模式的编码转换会直接破坏Flash二进制文件的原始数据。
  • 高效分块处理:循环读取2048字节的方式,就算是大文件也不会占用过多内存,处理效率很高。
  • OOB数据生成:b'\xff' * 64直接生成64字节的全FF二进制数据,简单直接且符合需求。

处理完成后,你可以用十六进制编辑器打开生成的文件验证:原文件前2048字节(对应示例中到0007F0的位置)后面,会跟着从000800到00083F的64字节FF,之后才是下一段有效数据,完全匹配你想要的结果。

备注:内容来源于stack exchange,提问作者Naser Irani Irani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:04:28