Files
Linux_Drivers/build/tools/common/image_tool/alios/mkcvipart_alios.py
sam.xiang a4f213ceb0 [build] add cvitek build scripts
Change-Id: If63ce4a669e5d4d72b8e3b9253336dd99bf74c30
2023-03-10 20:35:59 +08:00

116 lines
3.0 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
import logging
import os
import re
class partition:
name = ""
addr = ""
size = ""
filename = ""
def __init__(self, name, addr, size):
self.name = name
self.addr = addr
self.size = size
def parse_args():
parser = argparse.ArgumentParser(description="Create cvipart.h")
parser.add_argument("part_table", help="path to partition xml")
parser.add_argument("output", help="output folder")
args = parser.parse_args()
return args
def gen_cvipart_h(output, part_list):
logging.info("generating cvipart.h")
with open(os.path.join(output, "cvipart.h"), "w") as of:
of.write("/* this file should be generated by mkcvipart.py,")
of.write("please do not modify this file manually*/\n\n")
of.write("#ifndef CVIPART_H\n")
of.write("#define CVIPART_H\n")
env_exist = True
# If no ENV or U-BOOT ENV has been set in partition.xml, we assume
# there is no env support
of.write("#ifndef CONFIG_ENV_IS_NOWHERE\n#define CONFIG_ENV_IS_NOWHERE\n#endif\n")
of.write("#define CONFIG_ENV_SIZE 0x20000\n")
env_exist = False
if env_exist:
of.write("#define CONFIG_ENV_IS_IN_SPI_FLASH\n")
of.write("#define CONFIG_ENV_SECT_SIZE 0x10000\n")
# Generintg MTDPART
of.write("#define PART_LAYOUT ")
of.write('"mtdparts=10000000.cvi-spif:"\n')
of.write('#define ROOTFS_DEV ""\n')
# Generintg PART_ENV
of.write("#define PARTS_OFFSET \\\n")
for i, p in enumerate(part_list):
of.write('"%s_PART_OFFSET=%s\\0" \\\n' % (p.name, p.addr))
if i == len(part_list) - 1:
of.write(
'"%s_PART_SIZE=%s\\0"\n'
% (p.name, p.size)
)
else:
of.write(
'"%s_PART_SIZE=%s\\0" \\\n'
% (p.name, p.size)
)
of.write("#endif")
logging.info("Done!")
def get_part(str_list):
name = addr = size = ""
str = ''.join(str_list).replace(" ", "")
kv_list = str.split(",")
for i in kv_list:
key = i.split(":")[0]
val = i.split(":")[1]
if(key == "name"):
name = val
elif(key == "address"):
addr = val
elif(key == "size"):
size = val
part = partition(name, addr, size)
return part
def parse_part_table(file):
part_list = []
fp = open(file, "r")
sample = fp.readlines()
p = re.compile(r'[{](.*?)[}]', re.S)
for i in sample:
if "-" in i:
str_list = re.findall(p, i)
partition = get_part(str_list)
part_list.append(partition)
fp.close()
return part_list
def main():
args = parse_args()
part_list = parse_part_table(args.part_table)
gen_cvipart_h(args.output, part_list)
if __name__ == "__main__":
main()