mirror of
https://github.com/google/pebble.git
synced 2025-03-15 00:31:21 +00:00
103 lines
3 KiB
Python
103 lines
3 KiB
Python
# Copyright 2024 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import binutils
|
|
import os.path
|
|
import sh
|
|
|
|
|
|
class Config(object):
|
|
def abs_path(self, script_relative_path):
|
|
return os.path.join(
|
|
os.path.dirname(os.path.realpath(__file__)),
|
|
script_relative_path)
|
|
|
|
def default_elf_abs_path(self):
|
|
return self.abs_path(self.rel_elf_path())
|
|
|
|
def rel_elf_path(self):
|
|
raise Exception("Implement me!")
|
|
|
|
def lib_paths(self):
|
|
return []
|
|
|
|
def lib_symbols(self):
|
|
# Array of tuples (use_fast, lib_path):
|
|
lib_paths = self.lib_paths()
|
|
|
|
def extract_symbols(object_path):
|
|
nm = binutils.nm_generator(object_path)
|
|
return set([s for _, _, s, _, _, _ in nm])
|
|
|
|
return {path: extract_symbols(path)
|
|
for path in lib_paths}
|
|
|
|
def memory_region_to_analyze(self):
|
|
raise Exception("Implement me!")
|
|
|
|
def apply_tree_tweaks(self, tree):
|
|
pass
|
|
|
|
|
|
class TintinElfConfig(Config):
|
|
def rel_elf_path(self):
|
|
return '../build/src/fw/tintin_fw.elf'
|
|
|
|
def memory_region_to_analyze(self):
|
|
FLASH_START = 0x8008000
|
|
FLASH_END = FLASH_START + (512 * 1024)
|
|
FLASH_REGION = (FLASH_START, FLASH_END)
|
|
return FLASH_REGION
|
|
|
|
def lib_paths(self):
|
|
return []
|
|
|
|
def apply_tree_tweaks(self, tree):
|
|
# Manually add in the bootloader + gap:
|
|
tree["Bootloader"] = 0x8000
|
|
tree["Bootloader-FW-Gap"] = 0x8000
|
|
|
|
|
|
class DialogElfConfig(Config):
|
|
def memory_region_to_analyze(self):
|
|
# Just spelling out both regions here in case someone wants to tweak:
|
|
sysram_start = 0x7FC0000
|
|
sysram_end = sysram_start + (128 * 1024)
|
|
cacheram_start = 0x7FE0000
|
|
cacheram_end = cacheram_start + (16 * 1024)
|
|
return (sysram_start, cacheram_end)
|
|
|
|
|
|
class DialogBootElfConfig(DialogElfConfig):
|
|
def rel_elf_path(self):
|
|
return '../build/src/bluetooth-fw/da1468x/controller/' \
|
|
'boot/bt_da14681_boot.elf'
|
|
|
|
|
|
class DialogMainElfConfig(DialogElfConfig):
|
|
def rel_elf_path(self):
|
|
return '../build/src/bluetooth-fw/da1468x/controller/' \
|
|
'main/bt_da14681_main.elf'
|
|
|
|
def lib_paths(self):
|
|
libble_stack_path = self.abs_path(
|
|
'../src/bluetooth-fw/da1468x/vendor/bt-dialog-sdk/sdk/interfaces/'
|
|
'ble_stack/DA14681-01-Debug/libble_stack_da14681_01.a')
|
|
return [libble_stack_path]
|
|
|
|
CONFIG_CLASSES = {
|
|
'tintin': TintinElfConfig,
|
|
'dialog-boot': DialogBootElfConfig,
|
|
'dialog-main': DialogMainElfConfig,
|
|
}
|