示例#1
0
def main(args):
    arch = lookup_architecture(args.architecture)
    addresses = yaml.load(args.input)
    object_sizes = yaml.load(args.object_sizes)
    register_object_sizes(object_sizes)

    # create the list of reserved regions. This duplicates the load_images part of the elf loader. Ultimately
    # we should feed this info to the elf loader rather than doing it dynamically
    reserved = SortedList()
    # first the kernel image
    kernel_elf = ELFFile(args.kernel_elf)
    kernel_region = get_load_bounds(kernel_elf)
    # elfloader currently rounds end to page boundary
    kernel_region = Region(kernel_region.start,
                           round_up(kernel_region.end, PAGE_SIZE))
    reserved.add(kernel_region)

    # now the DTB
    next_paddr = kernel_region.end
    if args.dtb_size:
        dtb_region = Region(next_paddr,
                            round_up(next_paddr + args.dtb_size, PAGE_SIZE))
        reserved.add(dtb_region)
        print("DTB: {0}<-->{1}".format(hex(dtb_region.start),
                                       hex(dtb_region.end)))

    available = SortedList()
    for a in addresses['memory']:
        # trim to paddr-top
        start, end = a['start'], a['end']
        if args.paddr_top is not None:
            start = min(start, args.paddr_top)
            end = min(end, args.paddr_top)
        if start != end:
            available.add(Region(start, end))

    # calculate free regions based on available + reserved regions
    freemem = init_freemem(available, reserved)

    # create untyped for each region
    untypeds = []
    for f in freemem:
        untypeds += create_untypeds_for_region(object_sizes, f, arch, False)

    # create untyped for each device untyped
    for d in addresses['devices']:
        untypeds += create_untypeds_for_region(object_sizes,
                                               Region(d['start'], d['end']),
                                               arch, True)

    # finally output the file
    yaml.dump(untypeds, args.output)
示例#2
0
文件: __init__.py 项目: sfrias/capdl
 def setUp(self):
     register_object_sizes(test_object_sizes)