diff --git a/boards/nrf52840_dongle_dfu/Makefile b/boards/nrf52840_dongle_dfu/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..723ba0af1570d50a7e1257bce4aa3d39108e4bf5 --- /dev/null +++ b/boards/nrf52840_dongle_dfu/Makefile @@ -0,0 +1,29 @@ +# Makefile for building the tock kernel for the nRF development kit + +TOCK_ARCH=cortex-m4 +TARGET=thumbv7em-none-eabi +PLATFORM=nrf52840_dongle_dfu + +include ../../third_party/tock/boards/Makefile.common + +TOCKLOADER=tockloader + +# Where in the nrf52 flash to load the kernel with `tockloader` +KERNEL_ADDRESS=0x01000 + +# Upload programs over uart with tockloader +ifdef PORT + TOCKLOADER_GENERAL_FLAGS += --port $(PORT) +endif + +TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-size 4096 --jlink-device nrf52840_xxaa + +# Upload the kernel over JTAG +.PHONY: flash +flash: target/$(TARGET)/release/$(PLATFORM).bin + $(TOCKLOADER) $(TOCKLOADER_GENERAL_FLAGS) flash --address $(KERNEL_ADDRESS) $(TOCKLOADER_JTAG_FLAGS) $< + +# Upload the kernel over serial/bootloader +.PHONY: program +program: target/$(TARGET)/release/$(PLATFORM).hex + $(error Cannot program nRF52 Dongle over USB. Use \`make flash\` and JTAG) diff --git a/boards/nrf52840_mdk_dfu/Makefile b/boards/nrf52840_mdk_dfu/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e915141d9174e55cb67deccc607d9dc1ae49300a --- /dev/null +++ b/boards/nrf52840_mdk_dfu/Makefile @@ -0,0 +1,29 @@ +# Makefile for building the tock kernel for the nRF development kit + +TOCK_ARCH=cortex-m4 +TARGET=thumbv7em-none-eabi +PLATFORM=nrf52840_mdk_dfu + +include ../../third_party/tock/boards/Makefile.common + +TOCKLOADER=tockloader + +# Where in the nrf52 flash to load the kernel with `tockloader` +KERNEL_ADDRESS=0x01000 + +# Upload programs over uart with tockloader +ifdef PORT + TOCKLOADER_GENERAL_FLAGS += --port $(PORT) +endif + +TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-size 4096 --jlink-device nrf52840_xxaa + +# Upload the kernel over JTAG +.PHONY: flash +flash: target/$(TARGET)/release/$(PLATFORM).bin + $(TOCKLOADER) $(TOCKLOADER_GENERAL_FLAGS) flash --address $(KERNEL_ADDRESS) $(TOCKLOADER_JTAG_FLAGS) $< + +# Upload the kernel over serial/bootloader +.PHONY: program +program: target/$(TARGET)/release/$(PLATFORM).hex + $(error Cannot program nRF52 Dongle over USB. Use \`make flash\` and JTAG) diff --git a/deploy.py b/deploy.py index 97a4e4f8d865b7e6fec3a80679e2454418509d88..ac6c716c16656a2e1db4752d860c97804005173b 100755 --- a/deploy.py +++ b/deploy.py @@ -298,58 +298,12 @@ class OpenSKInstaller: self.checked_command_output(["rustup", "target", "add", arch]) info("Rust toolchain up-to-date") - def search_binary(self, name, start_directory="."): - for root, _, files in os.walk(start_directory): - for fname in files: - if fname == name: - return os.path.join(root, fname) - return None - def build_tockos(self): info("Building Tock OS for board {}".format(self.args.board)) props = SUPPORTED_BOARDS[self.args.board] out_directory = os.path.join(props.path, "target", props.arch, "release") os.makedirs(out_directory, exist_ok=True) - rust_flags = [ - "-C", - "link-arg=-Tlayout.ld", - "-C", - "linker=rust-lld", - "-C", - "linker-flavor=ld.lld", - "-C", - "relocation-model=dynamic-no-pic", - "-C", - "link-arg=-zmax-page-size=512", - "--remap-path-prefix={}=".format(os.path.realpath(props.path)), - ] - env = os.environ.copy() - env["RUSTFLAGS"] = " ".join(rust_flags) - self.checked_command_output( - ["cargo", "build", "--release", "--target={}".format(props.arch)], - env=env, - cwd=props.path) - info("Converting Tock OS file into a binary") - kernel_name = os.path.basename(props.path) - shutil.copyfile( - os.path.join(out_directory, kernel_name), - os.path.join(out_directory, "{}.elf".format(kernel_name))) - # Find appropriate llvm-objcopy - llvm_dir = self.checked_command_output(["rustc", "--print=sysroot"], - cwd=props.path).strip() - if not llvm_dir: - fatal("Couldn't determine where rustc is installed. " - "This shouldn't happen.") - if not os.path.isdir(llvm_dir): - fatal("Something went wrong while locating llvm-objcopy.") - objcopy = self.search_binary("llvm-objcopy", start_directory=llvm_dir) - if not objcopy: - fatal("Couldn't locate llvm-objcopy binary in your system.") - self.checked_command_output([ - objcopy, "--output-target=binary", - os.path.join(out_directory, "{}.elf".format(kernel_name)), - os.path.join(out_directory, "{}.bin".format(kernel_name)) - ]) + self.checked_command_output(["make"], cwd=props.path) def build_example(self): info("Building example {}".format(self.args.application))