mirror of
				https://github.com/optim-enterprises-bv/openwrt-ipq.git
				synced 2025-11-03 19:58:34 +00:00 
			
		
		
		
	clean up formatting with black using 80 character line limit Signed-off-by: Doug Kerr <dek3rr@gmail.com>
		
			
				
	
	
		
			150 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
"""
 | 
						|
Whole Flash Image Tag
 | 
						|
 | 
						|
{
 | 
						|
	u32 crc32;
 | 
						|
	u32 version;
 | 
						|
	u32 chipID;
 | 
						|
	u32 flashType;
 | 
						|
	u32 flags;
 | 
						|
}
 | 
						|
 | 
						|
CRC32: Ethernet (Poly 0x04C11DB7)
 | 
						|
 | 
						|
Version:
 | 
						|
	0x00005700: Any version
 | 
						|
	0x00005731: NAND 1MB data partition
 | 
						|
	0x00005732: Normal version
 | 
						|
 | 
						|
Chip ID:
 | 
						|
	Broadcom Chip ID
 | 
						|
	0x00006328: BCM6328
 | 
						|
	0x00006362: BCM6362
 | 
						|
	0x00006368: BCM6368
 | 
						|
	0x00063268: BCM63268
 | 
						|
 | 
						|
Flash Type:
 | 
						|
	1: NOR
 | 
						|
	2: NAND 16k blocks
 | 
						|
	3: NAND 128k blocks
 | 
						|
	4: NAND 256k blocks
 | 
						|
	5: NAND 512k blocks
 | 
						|
	6: NAND 1MB blocks
 | 
						|
	7: NAND 2MB blocks
 | 
						|
 | 
						|
Flags:
 | 
						|
	0x00000001: PMC
 | 
						|
	0x00000002: Secure BootROM
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
import argparse
 | 
						|
import os
 | 
						|
import struct
 | 
						|
import binascii
 | 
						|
 | 
						|
 | 
						|
def auto_int(x):
 | 
						|
    return int(x, 0)
 | 
						|
 | 
						|
 | 
						|
def create_tag(args, in_bytes):
 | 
						|
    # JAM CRC32 is bitwise not and unsigned
 | 
						|
    crc = ~binascii.crc32(in_bytes) & 0xFFFFFFFF
 | 
						|
    tag = struct.pack(
 | 
						|
        ">IIIII",
 | 
						|
        crc,
 | 
						|
        args.tag_version,
 | 
						|
        args.chip_id,
 | 
						|
        args.flash_type,
 | 
						|
        args.flags,
 | 
						|
    )
 | 
						|
    return tag
 | 
						|
 | 
						|
 | 
						|
def create_output(args):
 | 
						|
    in_st = os.stat(args.input_file)
 | 
						|
    in_size = in_st.st_size
 | 
						|
 | 
						|
    in_f = open(args.input_file, "r+b")
 | 
						|
    in_bytes = in_f.read(in_size)
 | 
						|
    in_f.close()
 | 
						|
 | 
						|
    tag = create_tag(args, in_bytes)
 | 
						|
 | 
						|
    out_f = open(args.output_file, "w+b")
 | 
						|
    out_f.write(in_bytes)
 | 
						|
    out_f.write(tag)
 | 
						|
    out_f.close()
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    global args
 | 
						|
 | 
						|
    parser = argparse.ArgumentParser(description="")
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--input-file",
 | 
						|
        dest="input_file",
 | 
						|
        action="store",
 | 
						|
        type=str,
 | 
						|
        help="Input file",
 | 
						|
    )
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--output-file",
 | 
						|
        dest="output_file",
 | 
						|
        action="store",
 | 
						|
        type=str,
 | 
						|
        help="Output file",
 | 
						|
    )
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--version",
 | 
						|
        dest="tag_version",
 | 
						|
        action="store",
 | 
						|
        type=auto_int,
 | 
						|
        help="WFI Tag Version",
 | 
						|
    )
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--chip-id",
 | 
						|
        dest="chip_id",
 | 
						|
        action="store",
 | 
						|
        type=auto_int,
 | 
						|
        help="WFI Chip ID",
 | 
						|
    )
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--flash-type",
 | 
						|
        dest="flash_type",
 | 
						|
        action="store",
 | 
						|
        type=auto_int,
 | 
						|
        help="WFI Flash Type",
 | 
						|
    )
 | 
						|
 | 
						|
    parser.add_argument(
 | 
						|
        "--flags", dest="flags", action="store", type=auto_int, help="WFI Flags"
 | 
						|
    )
 | 
						|
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    if not args.flags:
 | 
						|
        args.flags = 0
 | 
						|
 | 
						|
    if (
 | 
						|
        (not args.input_file)
 | 
						|
        or (not args.output_file)
 | 
						|
        or (not args.tag_version)
 | 
						|
        or (not args.chip_id)
 | 
						|
        or (not args.flash_type)
 | 
						|
    ):
 | 
						|
        parser.print_help()
 | 
						|
    else:
 | 
						|
        create_output(args)
 | 
						|
 | 
						|
 | 
						|
main()
 |