# -*- coding: utf-8 -*- import sys import os sys.path.append(os.path.join(os.getcwd(), 'pactool')) import json import traceback import getopt import struct from ctypes import create_string_buffer from sfs_module import sfs_crc32 class GenSFS(object): def __init__(self): self.tag = 0x53465301 # self.init_act_data = struct.pack("60x") self.init_act_data = create_string_buffer(60) self.xfer_data = struct.pack("16x") self.ip_data = struct.pack("16x") self.freq = 0 self.sw_reset_info = 0 # 1bytes self.training_pattern = struct.pack("8x") def parse_value(self, arg): if sys.version_info[0] == 3 and isinstance(arg, str): return int(eval(str(arg))) elif sys.version_info[0] == 2 and (isinstance(arg, str) or isinstance(arg, unicode)): return int(eval(str(arg))) else: return int(arg) def generate_sfs(self, jason_file, sfs_file, normal_img_addr, backup_img_addr, third_img_addr): try: self.load_json(jason_file) buffer = struct.pack(' <--out file> [--normal_img_off offset] [--backup_img_off offset] [--third_img_off offset] [-h]") print("options:") print("--json file Specify nor flash configuration") print("--out file Output specify sfs binary file") print("--normal_img_off Normal image address") print("--backup_img_off Backup image address") print("--third_img_off Third image address") print("-h Help") print("e.g.: gen_sfs_binary.py --json sfs.json --out ./sfs.img") def main(argv): """ 主函数 :param argv: <--out file> [-h] :return: 0:pass; other:fail """ exit_code = 1 try: opts, args = getopt.getopt(argv, "-h", ["help", "json=", "out=", "normal_img_off=", "backup_img_off=", "third_img_off="]) out_sfs_file = "" json_file = "" normal_img_addr = 0x7000 backup_img_addr = 0x27000 third_img_addr = 0x0 for opt, arg in opts: if opt == '-h': show_usage() sys.exit(0) elif opt == "--out": out_sfs_file = arg elif opt == "--json": json_file = arg elif opt == "--normal_img_off": normal_img_addr = int(arg, 16) if len(arg) < 2 or not arg[:2].lower() == '0x': normal_img_addr = int(arg, 10) elif opt == "--backup_img_off": backup_img_addr = int(arg, 16) if len(arg) < 2 or not arg[:2].lower() == '0x': backup_img_addr = int(arg, 10) elif opt == "--third_img_off": third_img_addr = int(arg, 16) if len(arg) < 2 or not arg[:2].lower() == '0x': third_img_addr = int(arg, 10) print("normal image address = 0x%08X" % normal_img_addr) print("backup image address = 0x%08X" % backup_img_addr) print(" third image address = 0x%08X" % third_img_addr) if len(out_sfs_file) == 0: show_usage() raise Exception("Not specify output sfs binary file info is empty.") if len(json_file) == 0: show_usage() raise Exception("Not input nor flash jason configuration file.") obj = GenSFS() if not obj.generate_sfs(json_file, out_sfs_file, normal_img_addr, backup_img_addr, third_img_addr): raise Exception("[Error] Failed to sfs binary file.") except Exception: print("[Error] %s" % traceback.format_exc()) else: print("Successfully generated sfs binary file!") exit_code = 0 return exit_code if __name__ == '__main__': main(sys.argv[1:])