From ae45039deac3ae210b42f7a6c2d3d2d5500c7488 Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Mon, 21 Oct 2024 19:48:56 +0800 Subject: [PATCH] =?utf8?q?=E6=B7=BB=E5=8A=A0=E8=84=9A=E6=9C=AC=EF=BC=8C?= =?utf8?q?=E4=BF=AE=E6=94=B9oob64=E9=85=8D=E7=BD=AE=E7=9A=84=20file.bin=20?= =?utf8?q?=EF=BC=8C=E7=BB=99=E4=B8=93=E9=97=A8=E7=83=A7=E5=BD=95=E5=8E=82?= =?utf8?q?=E7=94=9F=E4=BA=A7=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- tools/scripts/gen_burn_image_for_nandflash.py | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 tools/scripts/gen_burn_image_for_nandflash.py diff --git a/tools/scripts/gen_burn_image_for_nandflash.py b/tools/scripts/gen_burn_image_for_nandflash.py new file mode 100644 index 000000000..73a307822 --- /dev/null +++ b/tools/scripts/gen_burn_image_for_nandflash.py @@ -0,0 +1,163 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import os +import sys +import time +import struct +import shutil + +""" +介绍: + 本脚本主要实现 oobsize 64 的 file.bin 的 oob数据调整, + 生成的文件,专门提供给河洛半导体的专用下载工具。 +""" + +#tools/scripts/unyaffs2tool.py +cur_dir = os.path.dirname(os.path.abspath(__file__)) +#tools/unyaffs_0.9.7/unyaffs +image_tool_path = os.path.realpath(os.path.join(cur_dir, '..','unyaffs_0.9.7')) + +# 配置nandflash信息 +cfg_page_size = 2048 +cfg_obb_size = 64 + +partition_list = [ + ["user","0x0", "null"] +] + +# 将生成image文件转换大小端,保存成另外文件 +def convert(src_file, dest_file): + fp_src = open(src_file, 'rb') + fp_dest = open(dest_file, 'wb') + oobfound=0 + oobdata_index=0 + oobdata_tmp0=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp1=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp2=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp3=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp4=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp5=struct.pack('BBBB', 0, 0, 0,0) + oobdata_tmp6=struct.pack('BBBB', 0, 0, 0,0) + src_size = os.path.getsize(src_file) + for i in range(int(src_size / 4)): + data = fp_src.read(4) + # print(" r= {} {} {} {}".format( hex(data[0]), hex(data[1]), hex(data[2]), hex(data[3]))) + if oobfound == 1 : + if oobdata_index < 15: + # print(" r r {} {} {} {}".format( hex(data[0]), hex(data[1]), hex(data[2]), hex(data[3]))) + # header 0 1=0 2=0 + # 3=1 4=2 5=0 6=0 + # 7=3 8=4 9=0 10=0 + # 11=5 12=6 13=0 14=0 + + if oobdata_index == 0: + oobdata_tmp0 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(oobdata_tmp0) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp0[0]), hex(oobdata_tmp0[1]), hex(oobdata_tmp0[2]), hex(oobdata_tmp0[3]))) + elif oobdata_index == 1: + oobdata_tmp1 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 2: + oobdata_tmp2 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 3: + oobdata_tmp3 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(oobdata_tmp1) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp1[0]), hex(oobdata_tmp1[1]), hex(oobdata_tmp1[2]), hex(oobdata_tmp1[3]))) + elif oobdata_index == 4: + oobdata_tmp4 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(oobdata_tmp2) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp2[0]), hex(oobdata_tmp2[1]), hex(oobdata_tmp2[2]), hex(oobdata_tmp2[3]))) + elif oobdata_index == 5: + oobdata_tmp5 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 6: + oobdata_tmp6 = struct.pack('BBBB', data[0], data[1], data[2],data[3]) + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 7: + fp_dest.write(oobdata_tmp3) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp3[0]), hex(oobdata_tmp3[1]), hex(oobdata_tmp3[2]), hex(oobdata_tmp3[3]))) + elif oobdata_index == 8: + fp_dest.write(oobdata_tmp4) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp4[0]), hex(oobdata_tmp4[1]), hex(oobdata_tmp4[2]), hex(oobdata_tmp4[3]))) + elif oobdata_index == 9: + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 10: + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 11: + fp_dest.write(oobdata_tmp5) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp5[0]), hex(oobdata_tmp5[1]), hex(oobdata_tmp5[2]), hex(oobdata_tmp5[3]))) + elif oobdata_index == 12: + fp_dest.write(oobdata_tmp6) + # print(" = = {} {} {} {}".format( hex(oobdata_tmp6[0]), hex(oobdata_tmp6[1]), hex(oobdata_tmp6[2]), hex(oobdata_tmp6[3]))) + elif oobdata_index == 13: + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif oobdata_index == 14: + rw = struct.pack('BBBB', 0, 0, 0, 0) + fp_dest.write(rw) + # print(" = = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + oobdata_index += 1 + + else: + oobfound = 0 + oobdata_index = 0 + rw=struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(rw) + # print(" w = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + elif data[0]==16 and data[1]==0 and data[2]==255 and data[3]==255: + # print("-===================") + # print(" r r {} {} {} {}".format( hex(data[0]), hex(data[1]), hex(data[2]), hex(data[3]))) + # print(" = = {} {} {} {}".format( hex(data[0]), hex(data[1]), hex(data[2]), hex(data[3]))) + oobfound=1 + rw=struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(rw) + # print(" w = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + else: + rw=struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(rw) + # print(" w = {} {} {} {}".format( hex(rw[0]), hex(rw[1]), hex(rw[2]), hex(rw[3]))) + + fp_src.close() + fp_dest.close() + +def convert2(src_file, dest_file): + fp_src = open(src_file, 'rb') + fp_dest = open(dest_file, 'wb') + src_size = os.path.getsize(src_file) + for i in range(int(src_size / 4)): + data = fp_src.read(4) + print(" r= {} {} {} {}".format( hex(data[0]), hex(data[1]), hex(data[2]), hex(data[3]))) + rw=struct.pack('BBBB', data[0], data[1], data[2],data[3]) + fp_dest.write(rw) + + fp_src.close() + fp_dest.close() + +if __name__ == "__main__": + image_file=sys.argv[1] + tmpdir=sys.argv[2] + # image_file = os.path.join(cur_dir, "file.bin") + + if sys.platform == 'linux2' or sys.platform == 'linux': + + imgfilesize = os.path.getsize(image_file) + # targetfile = os.path.join(sys.argv[2],"filetmp.bin") + convert(image_file,tmpdir) + # convert2(image_file,targetfile) + + print("make yaffs image file over!") -- 2.17.1