最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

linux - how to insert 64 bytes FF to a flash file every 2048 bytes with python - Stack Overflow

programmeradmin0浏览0评论

I have a flash file (binary) that is part of firmware.i. I want to program it with programmer to 2GiB NAND flash and must add 64 bytes FF to every 2048 bytes of flash file (like oob). How can I add this 64 bytes with Python or other script. I was able to delete oob section from dump file with Python but can't find any script to add oob to flash file. How can I do this?

I want convert this binary file:

000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX     (2048 BYTES)
000800 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000810 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001000 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX
001010 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX

To this binary file:

000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX    after (2048 BYTES)
000800 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000810 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ADD THIS 64 BYTES (FF)
000820 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000830 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000840 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000850 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001030 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX    after (4096 BYTES)
001040 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001050 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ADD THIS 64 BYTES (FF)
001060 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001070 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001080 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX
...
8400000 :xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx

I have a flash file (binary) that is part of firmware.i. I want to program it with programmer to 2GiB NAND flash and must add 64 bytes FF to every 2048 bytes of flash file (like oob). How can I add this 64 bytes with Python or other script. I was able to delete oob section from dump file with Python but can't find any script to add oob to flash file. How can I do this?

I want convert this binary file:

000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX     (2048 BYTES)
000800 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000810 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001000 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX
001010 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX

To this binary file:

000000 : 12 23 4E 33 7D 66 88 XX XX XX XX XX XX XX XX XX
000010 : 4E 7A 00 23 45 44 4D 54 XX XX XX XX XX XX XX XX
...
0007F0 : 12 22 64 52 17 4E 54 98 XX XX XX XX XX XX XX XX    after (2048 BYTES)
000800 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000810 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ADD THIS 64 BYTES (FF)
000820 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000830 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
000840 : 67 8E 43 81 09 75 23 65 14 XX XX XX XX XX XX XX
000850 : 54 22 12 89 45 90 4F 42 56 67 XX XX XX XX XX XX
...
001030 : 76 55 55 33 22 1D XX XX XX XX XX XX XX XX XX XX    after (4096 BYTES)
001040 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001050 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ADD THIS 64 BYTES (FF)
001060 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001070 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
001080 : 45 12 08 55 XX XX XX XX XX XX XX XX XX XX XX XX
...
8400000 :xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Share Improve this question asked Feb 6 at 17:02 Naser Irani IraniNaser Irani Irani 31 silver badge3 bronze badges New contributor Naser Irani Irani is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
Add a comment  | 

1 Answer 1

Reset to default 2

Read the file in 2048-byte chunks, then write each chunk to a new file along with a trailing 64-byte FF chunk. Note the code below assumes the input file is a multiple of 2048 and each chunk read will be exactly 2048 bytes. Add a check len(chunk) == 2048 if needed for validation.

import os

CHUNK = 2048
PADDING = b'\xff' * 64
INPUT_SIZE = 0x80_00000  # 128MiB

# Generate example input
with open('input.bin', 'wb') as file:
    for addr in range(0, INPUT_SIZE, 4):  # 128MiB
        file.write(addr.to_bytes(4))

# Add FF chunks.  Note this multiline with syntax requires Python 3.10+.
with (open('input.bin', 'rb') as infile,
      open('output.bin', 'wb') as outfile
):
# Pre-3.10 statement...
# with open('input.bin', 'rb') as infile, open('output.bin', 'wb') as outfile:
    for _ in range(0, os.path.getsize('input.bin'), CHUNK):
        chunk = infile.read(CHUNK)
        outfile.write(chunk)
        outfile.write(PADDING)

input.bin:

00000000 00 00 00 00 00 00 00 04 00 00 00 08 00 00 00 0C
00000010 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 1C
...
000007F0 00 00 07 F0 00 00 07 F4 00 00 07 F8 00 00 07 FC
00000800 00 00 08 00 00 00 08 04 00 00 08 08 00 00 08 0C
00000810 00 00 08 10 00 00 08 14 00 00 08 18 00 00 08 1C
...
00001000 00 00 10 00 00 00 10 04 00 00 10 08 00 00 10 0C
00001010 00 00 10 10 00 00 10 14 00 00 10 18 00 00 10 1C
...
07FFFFE0 07 FF FF E0 07 FF FF E4 07 FF FF E8 07 FF FF EC
07FFFFF0 07 FF FF F0 07 FF FF F4 07 FF FF F8 07 FF FF FC

output.bin:

00000000 00 00 00 00 00 00 00 04 00 00 00 08 00 00 00 0C
00000010 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 1C
...
000007F0 00 00 07 F0 00 00 07 F4 00 00 07 F8 00 00 07 FC
00000800 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000810 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000820 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000830 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00000840 00 00 08 00 00 00 08 04 00 00 08 08 00 00 08 0C
00000850 00 00 08 10 00 00 08 14 00 00 08 18 00 00 08 1C
...
00001030 00 00 0F F0 00 00 0F F4 00 00 0F F8 00 00 0F FC
00001040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001060 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00001080 00 00 10 00 00 00 10 04 00 00 10 08 00 00 10 0C
...
083FFFA0 07 FF FF E0 07 FF FF E4 07 FF FF E8 07 FF FF EC
083FFFB0 07 FF FF F0 07 FF FF F4 07 FF FF F8 07 FF FF FC
083FFFC0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFD0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFE0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
083FFFF0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
发布评论

评论列表(0)

  1. 暂无评论