Ejemplo n.º 1
0
 def clear_storage(self):
     if self.args.programmer == "none":
         return 0
     info("Erasing the persistent storage")
     board_props = SUPPORTED_BOARDS[self.args.board]
     # Use tockloader if possible
     if self.args.programmer in ("jlink", "openocd"):
         storage = bytes([0xFF] * board_props.storage_size)
         tock = loader.TockLoader(self.tockloader_default_args)
         tock.open()
         try:
             tock.flash_binary(storage, board_props.storage_address)
         except TockLoaderException as e:
             fatal("Couldn't erase the persistent storage: {}".format(
                 str(e)))
         return 0
     if self.args.programmer == "pyocd":
         self.checked_command([
             "pyocd", "erase",
             "--target={}".format(board_props.pyocd_target), "--sector",
             "{}+{}".format(board_props.storage_address,
                            board_props.storage_size)
         ])
         return 0
     fatal("Programmer {} is not supported.".format(self.args.programmer))
Ejemplo n.º 2
0
 def verify_flashed_app(self, expected_app):
     args = copy.copy(self.tockloader_default_args)
     tock = loader.TockLoader(args)
     app_found = False
     with tock._start_communication_with_board():
         apps = [app.name for app in tock._extract_all_app_headers()]
         app_found = expected_app in apps
     return app_found
Ejemplo n.º 3
0
 def verify_flashed_app(self, expected_app):
     if self.args.programmer not in ("jlink", "openocd"):
         return False
     args = copy.copy(self.tockloader_default_args)
     tock = loader.TockLoader(args)
     app_found = False
     with tock._start_communication_with_board():
         apps = [app.name for app in tock._extract_all_app_headers()]
         app_found = expected_app in apps
     return app_found
Ejemplo n.º 4
0
 def install_padding(self):
   padding = self.get_padding()
   board_props = SUPPORTED_BOARDS[self.args.board]
   info("Flashing padding application")
   args = copy.copy(self.tockloader_default_args)
   setattr(args, "address", board_props.padding_address)
   tock = loader.TockLoader(args)
   tock.open()
   try:
     tock.flash_binary(padding, args.address)
   except TockLoaderException as e:
     fatal("Couldn't install padding: {}".format(str(e)))
Ejemplo n.º 5
0
 def clear_apps(self):
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "app_address", 0x40000)
     info("Erasing all installed applications")
     tock = loader.TockLoader(args)
     tock.open(args)
     try:
         tock.erase_apps(False)
     except TockLoaderException as e:
         # Erasing apps is not critical
         info(("A non-critical error occured while erasing "
               "apps: {}".format(str(e))))
Ejemplo n.º 6
0
 def clear_apps(self):
     args = copy.copy(self.tockloader_default_args)
     board_props = SUPPORTED_BOARDS[self.args.board]
     setattr(args, "app_address", board_props.app_address)
     info("Erasing all installed applications")
     tock = loader.TockLoader(args)
     tock.open(args)
     try:
         tock.erase_apps(False)
     except TockLoaderException as e:
         # Erasing apps is not critical
         info(("A non-critical error occurred while erasing "
               "apps: {}".format(str(e))))
Ejemplo n.º 7
0
 def clear_apps(self):
   args = copy.copy(self.tockloader_default_args)
   board_props = SUPPORTED_BOARDS[self.args.board]
   setattr(args, "app_address", board_props.app_address)
   # Ensure we don't force erase all apps but only the apps starting
   # at `board.app_address`. This makes sure we don't erase the padding.
   setattr(args, "force", False)
   info("Erasing all installed applications")
   tock = loader.TockLoader(args)
   tock.open()
   try:
     tock.erase_apps()
   except TockLoaderException as e:
     # Erasing apps is not critical
     info(("A non-critical error occurred while erasing "
           "apps: {}".format(str(e))))
Ejemplo n.º 8
0
 def install_tock_os(self):
   board_props = SUPPORTED_BOARDS[self.args.board]
   kernel_file = os.path.join("third_party", "tock", "target",
                              board_props.arch, "release",
                              "{}.bin".format(self.args.board))
   info("Flashing file {}.".format(kernel_file))
   with open(kernel_file, "rb") as f:
     kernel = f.read()
   args = copy.copy(self.tockloader_default_args)
   setattr(args, "address", board_props.app_address)
   tock = loader.TockLoader(args)
   tock.open()
   try:
     tock.flash_binary(kernel, board_props.kernel_address)
   except TockLoaderException as e:
     fatal("Couldn't install Tock OS: {}".format(str(e)))
Ejemplo n.º 9
0
 def install_padding(self):
     fake_header = tbfh.TBFHeader("")
     fake_header.version = 2
     fake_header.fields["header_size"] = 0x10
     fake_header.fields["total_size"] = 0x10000
     fake_header.fields["flags"] = 0
     padding = fake_header.get_binary()
     info("Flashing padding application")
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "address", 0x30000)
     tock = loader.TockLoader(args)
     tock.open(args)
     try:
         tock.flash_binary(padding, args.address)
     except TockLoaderException as e:
         fatal("Couldn't install padding: {}".format(str(e)))
Ejemplo n.º 10
0
 def install_tab_file(self, tab_filename):
   assert self.args.application
   info("Installing Tock application {}".format(self.args.application))
   board_props = SUPPORTED_BOARDS[self.args.board]
   args = copy.copy(self.tockloader_default_args)
   setattr(args, "app_address", board_props.app_address)
   setattr(args, "erase", self.args.clear_apps)
   setattr(args, "make", False)
   setattr(args, "no_replace", False)
   tock = loader.TockLoader(args)
   tock.open()
   tabs = [tab.TAB(tab_filename)]
   try:
     tock.install(tabs, replace="yes", erase=args.erase)
   except TockLoaderException as e:
     fatal("Couldn't install Tock application {}: {}".format(
         self.args.application, str(e)))
Ejemplo n.º 11
0
 def install_elf_file(self, elf_path):
     assert self.args.application
     package_parameter = "-n"
     elf2tab_ver = self.checked_command_output(["elf2tab", "--version"
                                                ]).split(' ', maxsplit=1)[1]
     # Starting from v0.5.0-dev the parameter changed.
     # Current pyblished crate is 0.4.0 but we don't want developers
     # running the HEAD from github to be stuck
     if "0.5.0-dev" in elf2tab_ver:
         package_parameter = "--package-name"
     os.makedirs(self.tab_folder, exist_ok=True)
     tab_filename = os.path.join(self.tab_folder,
                                 "{}.tab".format(self.args.application))
     shutil.copyfile(elf_path, self.target_elf_filename)
     self.checked_command_output([
         "elf2tab", package_parameter, self.args.application, "-o",
         tab_filename, self.target_elf_filename,
         "--stack={}".format(STACK_SIZE),
         "--app-heap={}".format(APP_HEAP_SIZE), "--kernel-heap=1024",
         "--protected-region-size=64"
     ])
     self.install_padding()
     if not self.args.dfu:
         info("Installing Tock application {}".format(
             self.args.application))
         args = copy.copy(self.tockloader_default_args)
         setattr(args, "app_address", 0x40000)
         setattr(args, "erase", self.args.clear_apps)
         setattr(args, "make", False)
         setattr(args, "no_replace", False)
         tock = tockloader.TockLoader(args)
         tock.open(args)
         tabs = [tab.TAB(tab_filename)]
         try:
             tock.install(tabs, replace="yes", erase=args.erase)
         except TockLoaderException as e:
             fatal("Couldn't install Tock application {}: {}".format(
                 self.args.application, str(e)))
     else:
         self.padding_to_hex()
         self.app_to_hex()
Ejemplo n.º 12
0
 def install_padding(self):
     fake_header = tbfh.TBFHeader("")
     fake_header.version = 2
     fake_header.fields["header_size"] = 0x10
     fake_header.fields["total_size"] = 0x10000
     fake_header.fields["flags"] = 0
     padding = fake_header.get_binary()
     if self.args.dfu:
         info("Save padding")
         padding_filename = os.path.join(self.tab_folder, "padding.bin")
         with open(padding_filename, "wb") as f:
             f.write(padding)
     else:
         info("Flashing padding application")
         args = copy.copy(self.tockloader_default_args)
         setattr(args, "address", 0x30000)
         tock = tockloader.TockLoader(args)
         tock.open(args)
         try:
             tock.flash_binary(padding, args.address)
         except TockLoaderException as e:
             fatal("Couldn't install padding: {}".format(str(e)))