添加脚本,修改oob64配置的 file.bin ,给专门烧录厂生产用。 1234/3 1234/head
authorSnickerSun <snickersun@163.com>
Mon, 21 Oct 2024 11:48:56 +0000 (19:48 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 21 Oct 2024 11:48:56 +0000 (19:48 +0800)
tools/scripts/gen_burn_image_for_nandflash.py [new file with mode: 0644]

diff --git a/tools/scripts/gen_burn_image_for_nandflash.py b/tools/scripts/gen_burn_image_for_nandflash.py
new file mode 100644 (file)
index 0000000..73a3078
--- /dev/null
@@ -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!")