mirror of https://github.com/ARMmbed/mbed-os.git
Align managed bootloader addresses on sector boundaries
Aligns application start address to sector boundary Aligns application end address to sector boundarypull/6056/head
parent
ce078b75dc
commit
82c67effd6
|
@ -540,7 +540,8 @@ class Config(object):
|
|||
if ('target.bootloader_img' in target_overrides or
|
||||
'target.restrict_size' in target_overrides):
|
||||
return self._generate_bootloader_build(target_overrides,
|
||||
rom_start, rom_size)
|
||||
rom_start, rom_size,
|
||||
self.sectors)
|
||||
elif ('target.mbed_app_start' in target_overrides or
|
||||
'target.mbed_app_size' in target_overrides):
|
||||
return self._generate_linker_overrides(target_overrides,
|
||||
|
@ -549,7 +550,7 @@ class Config(object):
|
|||
raise ConfigException(
|
||||
"Bootloader build requested but no bootlader configuration")
|
||||
|
||||
def _generate_bootloader_build(self, target_overrides, rom_start, rom_size):
|
||||
def _generate_bootloader_build(self, target_overrides, rom_start, rom_size, sectors):
|
||||
start = 0
|
||||
if 'target.bootloader_img' in target_overrides:
|
||||
basedir = abspath(dirname(self.app_config_location))
|
||||
|
@ -561,16 +562,24 @@ class Config(object):
|
|||
raise ConfigException("bootloader executable does not "
|
||||
"start at 0x%x" % rom_start)
|
||||
part_size = (part.maxaddr() - part.minaddr()) + 1
|
||||
yield Region("bootloader", rom_start + start, part_size, False,
|
||||
start = Config._align_on_sector(rom_start + start, sectors) - rom_start
|
||||
offset = start + rom_start
|
||||
part_size = Config._align_on_sector(offset + part_size, sectors) - offset
|
||||
yield Region("bootloader", offset, part_size, False,
|
||||
filename)
|
||||
start += part_size
|
||||
if 'target.restrict_size' in target_overrides:
|
||||
new_size = int(target_overrides['target.restrict_size'], 0)
|
||||
yield Region("application", rom_start + start, new_size, True, None)
|
||||
start = Config._align_on_sector(rom_start + start, sectors) - rom_start
|
||||
offset = rom_start + start
|
||||
new_size = Config._align_on_sector(offset + new_size, sectors) - offset
|
||||
yield Region("application", offset, new_size, True, None)
|
||||
start += new_size
|
||||
yield Region("post_application", rom_start +start, rom_size - start,
|
||||
start = Config._align_on_sector(rom_start + start, sectors) - rom_start
|
||||
yield Region("post_application", rom_start + start, rom_size - start,
|
||||
False, None)
|
||||
else:
|
||||
start = Config._align_on_sector(rom_start + start, sectors) - rom_start
|
||||
yield Region("application", rom_start + start, rom_size - start,
|
||||
True, None)
|
||||
if start > rom_size:
|
||||
|
@ -586,7 +595,7 @@ class Config(object):
|
|||
target_start = start
|
||||
target_size = size
|
||||
if (target_size < 0):
|
||||
return target_size
|
||||
raise ConfigException("No valid sector found")
|
||||
sector_num = (address - target_start)//target_size
|
||||
return target_start + (sector_num*target_size)
|
||||
|
||||
|
|
Loading…
Reference in New Issue