android13/device/rockchip/common/scripts/parameter_tools/parameter_generator.py

128 lines
4.4 KiB
Python

#!/usr/bin/env python
import sys
import getopt
import os
from string import Template
usage = 'Invalid Parameters! Example:\nparameter_tools --firmware-version 10.0 --machine-model RK3326 --manufacturer ROCKCHIP --machine XTF863 --partition-list uboot_a:4096K,trust_a:4M,misc:4M,dtbo_a:4M,vbmeta_a:4M,boot_a:33554432,backup:300M,security:4M,cache:300M,metadata:4096,frp:512K,super:2G --output te.txt'
# size: K/M/G
# return int
def calculate_blocks(size):
level = size[-1]
part_size = int(size[:-1])
if level == 'K':
part_size = part_size * 1024
elif level == 'M':
part_size = part_size * 1024 * 1024
elif level == 'G':
part_size = part_size * 1024 * 1024 * 1024
else:
part_size = int(size)
# convert to blocks
return part_size / 512
# return end blocks pos
def generate_pt(pt_name,pt_size,pt_start):
part_start = "{:#010x}".format(pt_start)
if pt_name == 'userdata':
part_size = '-'
return "-@" + part_start + "(userdata:grow)"
part_size = "{:#010x}".format(calculate_blocks(pt_size))
result = part_size + "@" + part_start + "(" + pt_name + ")"
return result, int(calculate_blocks(pt_size) + pt_start)
def main(argv):
ifile = 'parameter.in'
type = 'GPT'
start_offset = 16384
firmware_version = ''
machine_model = ''
machine_id = '007'
manufacturer = ''
magic = '0x5041524B'
atag = '0x00200800'
machine = ''
check_mask = '0x80'
pwr_hld = '0,0,A,0,1'
ofile = ''
partition_list = ''
try:
opts, args = getopt.getopt(argv, "h", ["input=","start-offset=","firmware-version=","machine-model=","machine-id=","manufacturer=","magic=","atag=","machine=","check-mask=","pwr-hld=","partition-list=","output="])
except getopt.GetoptError:
print (usage)
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print (usage)
sys.exit(2)
elif opt == "--input":
ifile = arg;
elif opt == "--start-offset":
start_offset = arg;
elif opt == "--firmware-version":
firmware_version = arg;
elif opt == "--machine":
machine = arg
elif opt == "--machine-model":
machine_model = arg;
elif opt == "--machine-id":
machine_id = arg;
elif opt == "--manufacturer":
manufacturer = arg;
elif opt == "--magic":
magic = arg;
elif opt == "--atag":
atag = arg;
elif opt == "--check-mask":
check_mask = arg;
elif opt == "--pwr-hld":
pwr_hld = arg;
elif opt == "--partition-list":
partition_list = arg;
elif opt == "--output":
ofile = arg;
else:
print (usage)
sys.exit(2)
if partition_list == '':
print (usage)
sys.exit(2)
# append '_b' parts if '_a' is exists.
list_partitions = partition_list.split(',')
cur_part_start = int(start_offset)
final_parts = ''
for cur_part in list_partitions:
pos_split = cur_part.find(':')
cur_part_name = cur_part[:pos_split]
pos_slotselect = cur_part.find('_a')
cur_part_size = cur_part[1 + pos_split:]
str_part, int_next_start_offset = generate_pt(cur_part_name, cur_part_size, cur_part_start)
cur_part_start = int_next_start_offset
final_parts += str_part + ","
if (pos_slotselect >= 0) & (pos_slotselect == (len(cur_part_name) - 2)):
slot_b_part_name = cur_part[:pos_slotselect] + '_b'
str_part, int_next_start_offset = generate_pt(slot_b_part_name, cur_part_size, cur_part_start)
cur_part_start = int_next_start_offset
final_parts += str_part + ","
partition_list = final_parts + generate_pt('userdata', '0', cur_part_start)
file_parameter_in = open(ifile)
template_parameter_in = file_parameter_in.read()
template_in_t = Template(template_parameter_in)
line = template_in_t.substitute(_firmware_version=firmware_version,_machine_model=machine_model,_machine_id=machine_id,_manufacturer=manufacturer,_magic=magic,_atag=atag,_machine=machine,_check_mask=check_mask,_pwr_hld=pwr_hld,_type=type,_partition_list=partition_list)
if ofile != '':
with open(ofile,"w") as f:
f.write(line)
else:
print (line)
if __name__=="__main__":
main(sys.argv[1:])