diff --git a/deploy.py b/deploy.py index ac6c716c16656a2e1db4752d860c97804005173b..524782a26424a8f5cb60eba418e7b1ec1d667caf 100755 --- a/deploy.py +++ b/deploy.py @@ -485,25 +485,26 @@ class OpenSKInstaller: kern_hex.frombytes(kernel.read(), offset=board_props.kernel_address) final_hex.merge(kern_hex, overlap="error") - # Add padding - if board_props.padding_address: - padding_hex = intelhex.IntelHex() - padding_hex.frombytes( - self.get_padding(), offset=board_props.padding_address) - final_hex.merge(padding_hex, overlap="error") - - # Now we can add the application from the TAB file - app_tab_path = "target/tab/{}.tab".format(self.args.application) - assert os.path.exists(app_tab_path) - app_tab = tab.TAB(app_tab_path) - if board_props.arch not in app_tab.get_supported_architectures(): - fatal(("It seems that the TAB file was not produced for the " - "architecture {}".format(board_props.arch))) - app_hex = intelhex.IntelHex() - app_hex.frombytes( - app_tab.extract_app(board_props.arch).get_binary(), - offset=board_props.app_address) - final_hex.merge(app_hex) + if self.args.application: + # Add padding + if board_props.padding_address: + padding_hex = intelhex.IntelHex() + padding_hex.frombytes( + self.get_padding(), offset=board_props.padding_address) + final_hex.merge(padding_hex, overlap="error") + + # Now we can add the application from the TAB file + app_tab_path = "target/tab/{}.tab".format(self.args.application) + assert os.path.exists(app_tab_path) + app_tab = tab.TAB(app_tab_path) + if board_props.arch not in app_tab.get_supported_architectures(): + fatal(("It seems that the TAB file was not produced for the " + "architecture {}".format(board_props.arch))) + app_hex = intelhex.IntelHex() + app_hex.frombytes( + app_tab.extract_app(board_props.arch).get_binary(), + offset=board_props.app_address) + final_hex.merge(app_hex) info("Generating all-merged HEX file: {}".format(dest_file)) final_hex.tofile(dest_file, format="hex") @@ -546,9 +547,6 @@ class OpenSKInstaller: self.check_prerequisites() self.update_rustc_if_needed() - if self.args.application is None: - fatal("Please specify an application to be flashed") - # Compile what needs to be compiled if self.args.tockos: self.build_tockos() @@ -556,6 +554,8 @@ class OpenSKInstaller: if self.args.application == "ctap2": self.generate_crypto_materials(self.args.regenerate_keys) self.build_opensk() + elif self.args.application is None: + info("No application selected.") else: self.build_example() @@ -568,16 +568,19 @@ class OpenSKInstaller: if self.args.tockos: # Install Tock OS self.install_tock_os() - # Install padding and application - self.install_padding() - self.install_tab_file("target/tab/{}.tab".format(self.args.application)) - if self.verify_flashed_app(self.args.application): - info("You're all set!") - return 0 - error(("It seems that something went wrong. App/example not found " + # Install padding and application if needed + if self.args.application: + self.install_padding() + self.install_tab_file("target/tab/{}.tab".format(self.args.application)) + if self.verify_flashed_app(self.args.application): + info("You're all set!") + return 0 + error( + ("It seems that something went wrong. App/example not found " "on your board. Ensure the connections between the programmer and " "the board are correct.")) - return 1 + return 1 + return 0 if self.args.programmer in ("pyocd", "nordicdfu", "none"): dest_file = "target/{}_merged.hex".format(self.args.board) @@ -734,7 +737,14 @@ if __name__ == "__main__": "storage (i.e. unplugging the key will reset the key)."), ) - apps_group = main_parser.add_mutually_exclusive_group() + apps_group = main_parser.add_mutually_exclusive_group(required=True) + apps_group.add_argument( + "--no-app", + dest="application", + action="store_const", + const=None, + help=("Doesn't compile nor install any application. Useful when you only " + "want to update Tock OS kernel.")) apps_group.add_argument( "--opensk", dest="application",