diff --git a/.github/workflows/boards_build.yml b/.github/workflows/boards_build.yml index 0a8fbebb7e1886443fc9a6e67ef36d4f53adca0d..50a29d5a3b4faf98802b82445e9b61f965aad08e 100644 --- a/.github/workflows/boards_build.yml +++ b/.github/workflows/boards_build.yml @@ -27,15 +27,11 @@ jobs: - name: Set up OpenSK run: ./setup.sh + - name: Building board nrf52840dk + run: ./deploy.py --board=nrf52840dk --no-app --programmer=none + - name: Building board nrf52840_dongle + run: ./deploy.py --board=nrf52840_dongle --no-app --programmer=none - name: Building board nrf52840_dongle_dfu run: ./deploy.py --board=nrf52840_dongle_dfu --no-app --programmer=none - name: Building board nrf52840_mdk_dfu run: ./deploy.py --board=nrf52840_mdk_dfu --no-app --programmer=none - - - name: Create a long build directory - run: mkdir this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz && mv third_party this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/ - - - name: Building board nrf52840dk - run: make -C this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/third_party/tock/boards/nordic/nrf52840dk - - name: Building board nrf52840_dongle - run: make -C this-is-a-long-build-directory-0123456789abcdefghijklmnopqrstuvwxyz/third_party/tock/boards/nordic/nrf52840_dongle diff --git a/boards/nordic/nrf52840_dongle_dfu/Cargo.toml b/boards/nordic/nrf52840_dongle_dfu/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..35eab8a848640da82ba78e50fafe0acd46264304 --- /dev/null +++ b/boards/nordic/nrf52840_dongle_dfu/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "nrf52840_dongle_dfu" +version = "0.1.0" +authors = ["Tock Project Developers <tock-dev@googlegroups.com>"] +build = "build.rs" +edition = "2018" + +[[bin]] +path = "../nrf52840_dongle/src/main.rs" +name = "nrf52840_dongle_dfu" + +[dependencies] +components = { path = "../../components" } +cortexm4 = { path = "../../../arch/cortex-m4" } +capsules = { path = "../../../capsules" } +kernel = { path = "../../../kernel" } +nrf52840 = { path = "../../../chips/nrf52840" } +nrf52dk_base = { path = "../nrf52dk_base" } diff --git a/boards/nrf52840_dongle_dfu/Makefile b/boards/nordic/nrf52840_dongle_dfu/Makefile similarity index 81% rename from boards/nrf52840_dongle_dfu/Makefile rename to boards/nordic/nrf52840_dongle_dfu/Makefile index 723ba0af1570d50a7e1257bce4aa3d39108e4bf5..58771b3a640ae3cc9edc1f6e0764aeb619da57f7 100644 --- a/boards/nrf52840_dongle_dfu/Makefile +++ b/boards/nordic/nrf52840_dongle_dfu/Makefile @@ -4,7 +4,7 @@ TOCK_ARCH=cortex-m4 TARGET=thumbv7em-none-eabi PLATFORM=nrf52840_dongle_dfu -include ../../third_party/tock/boards/Makefile.common +include ../../Makefile.common TOCKLOADER=tockloader @@ -20,10 +20,10 @@ TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-s # Upload the kernel over JTAG .PHONY: flash -flash: target/$(TARGET)/release/$(PLATFORM).bin +flash: $(TOCK_ROOT_DIRECTORY)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 +program: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).hex $(error Cannot program nRF52 Dongle over USB. Use \`make flash\` and JTAG) diff --git a/boards/nordic/nrf52840_dongle_dfu/build.rs b/boards/nordic/nrf52840_dongle_dfu/build.rs new file mode 100644 index 0000000000000000000000000000000000000000..1fdd4924f0a125f565133842a274c5e2067ce21f --- /dev/null +++ b/boards/nordic/nrf52840_dongle_dfu/build.rs @@ -0,0 +1,4 @@ +fn main() { + println!("cargo:rerun-if-changed=layout.ld"); + println!("cargo:rerun-if-changed=../../kernel_layout.ld"); +} diff --git a/boards/nrf52840_mdk_dfu/layout.ld b/boards/nordic/nrf52840_dongle_dfu/layout.ld similarity index 76% rename from boards/nrf52840_mdk_dfu/layout.ld rename to boards/nordic/nrf52840_dongle_dfu/layout.ld index 834133c00b8d0adb87c9e8eb355ed0b2e91c0582..41ae608ac5d17b9ff7334f769472e1b9c458f466 100644 --- a/boards/nrf52840_mdk_dfu/layout.ld +++ b/boards/nordic/nrf52840_dongle_dfu/layout.ld @@ -7,4 +7,4 @@ MEMORY MPU_MIN_ALIGN = 8K; -INCLUDE ../../third_party/tock/boards/kernel_layout.ld +INCLUDE ../../kernel_layout.ld diff --git a/boards/nordic/nrf52840_mdk_dfu/Cargo.toml b/boards/nordic/nrf52840_mdk_dfu/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..c0cb7af33a7349efc49cdcd6304ad56b5756f9d3 --- /dev/null +++ b/boards/nordic/nrf52840_mdk_dfu/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "nrf52840_mdk_dfu" +version = "0.1.0" +authors = ["Yihui Xiong <yihui.xiong@hotmail.com>"] +build = "build.rs" +edition = "2018" + +[dependencies] +components = { path = "../../components" } +cortexm4 = { path = "../../../arch/cortex-m4" } +capsules = { path = "../../../capsules" } +kernel = { path = "../../../kernel" } +nrf52840 = { path = "../../../chips/nrf52840" } +nrf52dk_base = { path = "../nrf52dk_base" } diff --git a/boards/nrf52840_mdk_dfu/Makefile b/boards/nordic/nrf52840_mdk_dfu/Makefile similarity index 74% rename from boards/nrf52840_mdk_dfu/Makefile rename to boards/nordic/nrf52840_mdk_dfu/Makefile index e915141d9174e55cb67deccc607d9dc1ae49300a..a179ffb4b2c9eb870392037c5fff971f5b8c44fb 100644 --- a/boards/nrf52840_mdk_dfu/Makefile +++ b/boards/nordic/nrf52840_mdk_dfu/Makefile @@ -4,7 +4,7 @@ TOCK_ARCH=cortex-m4 TARGET=thumbv7em-none-eabi PLATFORM=nrf52840_mdk_dfu -include ../../third_party/tock/boards/Makefile.common +include ../../Makefile.common TOCKLOADER=tockloader @@ -20,10 +20,10 @@ TOCKLOADER_JTAG_FLAGS = --jlink --arch $(TOCK_ARCH) --board $(PLATFORM) --page-s # Upload the kernel over JTAG .PHONY: flash -flash: target/$(TARGET)/release/$(PLATFORM).bin +flash: $(TOCK_ROOT_DIRECTORY)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) +program: $(TOCK_ROOT_DIRECTORY)target/$(TARGET)/release/$(PLATFORM).hex + $(error Cannot program nRF52840-MDK over USB. Use \`make flash\` and JTAG) diff --git a/boards/nordic/nrf52840_mdk_dfu/build.rs b/boards/nordic/nrf52840_mdk_dfu/build.rs new file mode 100644 index 0000000000000000000000000000000000000000..1fdd4924f0a125f565133842a274c5e2067ce21f --- /dev/null +++ b/boards/nordic/nrf52840_mdk_dfu/build.rs @@ -0,0 +1,4 @@ +fn main() { + println!("cargo:rerun-if-changed=layout.ld"); + println!("cargo:rerun-if-changed=../../kernel_layout.ld"); +} diff --git a/boards/nrf52840_dongle_dfu/layout.ld b/boards/nordic/nrf52840_mdk_dfu/layout.ld similarity index 76% rename from boards/nrf52840_dongle_dfu/layout.ld rename to boards/nordic/nrf52840_mdk_dfu/layout.ld index 834133c00b8d0adb87c9e8eb355ed0b2e91c0582..41ae608ac5d17b9ff7334f769472e1b9c458f466 100644 --- a/boards/nrf52840_dongle_dfu/layout.ld +++ b/boards/nordic/nrf52840_mdk_dfu/layout.ld @@ -7,4 +7,4 @@ MEMORY MPU_MIN_ALIGN = 8K; -INCLUDE ../../third_party/tock/boards/kernel_layout.ld +INCLUDE ../../kernel_layout.ld diff --git a/boards/nrf52840_mdk_dfu/src/io.rs b/boards/nordic/nrf52840_mdk_dfu/src/io.rs similarity index 100% rename from boards/nrf52840_mdk_dfu/src/io.rs rename to boards/nordic/nrf52840_mdk_dfu/src/io.rs diff --git a/boards/nrf52840_mdk_dfu/src/main.rs b/boards/nordic/nrf52840_mdk_dfu/src/main.rs similarity index 100% rename from boards/nrf52840_mdk_dfu/src/main.rs rename to boards/nordic/nrf52840_mdk_dfu/src/main.rs diff --git a/boards/nrf52840_dongle_dfu/Cargo.toml b/boards/nrf52840_dongle_dfu/Cargo.toml deleted file mode 100644 index 6944eb33fc308caba08ec539d5d6af5783d4e3be..0000000000000000000000000000000000000000 --- a/boards/nrf52840_dongle_dfu/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "nrf52840_dongle_dfu" -version = "0.1.0" -authors = ["Tock Project Developers <tock-dev@googlegroups.com>"] -build = "build.rs" -edition = "2018" - -[profile.dev] -panic = "abort" -lto = false -opt-level = "z" -debug = true - -[profile.release] -panic = "abort" -lto = true -opt-level = "z" -debug = true - -[[bin]] -path = "../../third_party/tock/boards/nordic/nrf52840_dongle/src/main.rs" -name = "nrf52840_dongle_dfu" - -[dependencies] -components = { path = "../../third_party/tock/boards/components" } -cortexm4 = { path = "../../third_party/tock/arch/cortex-m4" } -capsules = { path = "../../third_party/tock/capsules" } -kernel = { path = "../../third_party/tock/kernel" } -nrf52840 = { path = "../../third_party/tock/chips/nrf52840" } -nrf52dk_base = { path = "../../third_party/tock/boards/nordic/nrf52dk_base" } diff --git a/boards/nrf52840_dongle_dfu/build.rs b/boards/nrf52840_dongle_dfu/build.rs deleted file mode 100644 index 2631dccb75f21f432f5186b17215367490e2d3f2..0000000000000000000000000000000000000000 --- a/boards/nrf52840_dongle_dfu/build.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - println!("cargo:rerun-if-changed=layout.ld"); - println!("cargo:rerun-if-changed=../../third_party/tock/boards/kernel_layout.ld"); -} diff --git a/boards/nrf52840_mdk_dfu/Cargo.toml b/boards/nrf52840_mdk_dfu/Cargo.toml deleted file mode 100644 index 1047869ba67c2d46b0af09d0ec7dd214a051fa43..0000000000000000000000000000000000000000 --- a/boards/nrf52840_mdk_dfu/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "nrf52840_mdk_dfu" -version = "0.1.0" -authors = ["Yihui Xiong <yihui.xiong@hotmail.com>"] -build = "build.rs" -edition = "2018" - -[profile.dev] -panic = "abort" -lto = false -opt-level = "z" -debug = true - -[profile.release] -panic = "abort" -lto = true -opt-level = "z" -debug = true - -[dependencies] -components = { path = "../../third_party/tock/boards/components" } -cortexm4 = { path = "../../third_party/tock/arch/cortex-m4" } -capsules = { path = "../../third_party/tock/capsules" } -kernel = { path = "../../third_party/tock/kernel" } -nrf52840 = { path = "../../third_party/tock/chips/nrf52840" } -nrf52dk_base = { path = "../../third_party/tock/boards/nordic/nrf52dk_base" } diff --git a/boards/nrf52840_mdk_dfu/build.rs b/boards/nrf52840_mdk_dfu/build.rs deleted file mode 100644 index 2631dccb75f21f432f5186b17215367490e2d3f2..0000000000000000000000000000000000000000 --- a/boards/nrf52840_mdk_dfu/build.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - println!("cargo:rerun-if-changed=layout.ld"); - println!("cargo:rerun-if-changed=../../third_party/tock/boards/kernel_layout.ld"); -} diff --git a/deploy.py b/deploy.py index ddbd2e55cd0999324d591a7fcdb522e62169b966..3026c7abd81a12634b54871c3aeb3442192fb8be 100755 --- a/deploy.py +++ b/deploy.py @@ -115,7 +115,7 @@ SUPPORTED_BOARDS = { ), "nrf52840_dongle_dfu": OpenSKBoard( - path="boards/nrf52840_dongle_dfu", + path="third_party/tock/boards/nordic/nrf52840_dongle_dfu", arch="thumbv7em-none-eabi", page_size=4096, kernel_address=0x1000, @@ -132,7 +132,7 @@ SUPPORTED_BOARDS = { ), "nrf52840_mdk_dfu": OpenSKBoard( - path="boards/nrf52840_mdk_dfu", + path="third_party/tock/boards/nordic/nrf52840_mdk_dfu", arch="thumbv7em-none-eabi", page_size=4096, kernel_address=0x1000, @@ -304,7 +304,7 @@ class OpenSKInstaller: 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") + out_directory = os.path.join("third_party", "tock", "target", props.arch, "release") os.makedirs(out_directory, exist_ok=True) self.checked_command_output(["make"], cwd=props.path) @@ -418,7 +418,7 @@ class OpenSKInstaller: def install_tock_os(self): board_props = SUPPORTED_BOARDS[self.args.board] - kernel_file = os.path.join(board_props.path, "target", board_props.arch, + 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: @@ -481,7 +481,7 @@ class OpenSKInstaller: if self.args.tockos: # Process kernel - kernel_path = os.path.join(board_props.path, "target", board_props.arch, + kernel_path = os.path.join("third_party", "tock", "target", board_props.arch, "release", "{}.bin".format(self.args.board)) with open(kernel_path, "rb") as kernel: kern_hex = intelhex.IntelHex() diff --git a/patches/tock/04-additional-boards.patch b/patches/tock/04-additional-boards.patch new file mode 100644 index 0000000000000000000000000000000000000000..88cd1c3db38e11462467ecfdb7216b8a5ad12871 --- /dev/null +++ b/patches/tock/04-additional-boards.patch @@ -0,0 +1,13 @@ +diff --git a/Cargo.toml b/Cargo.toml +index 18f4a10d..db88dc1d 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -13,6 +13,8 @@ members = [ + "boards/launchxl", + "boards/nordic/nrf52840dk", + "boards/nordic/nrf52840_dongle", ++ "boards/nordic/nrf52840_dongle_dfu", ++ "boards/nordic/nrf52840_mdk_dfu", + "boards/nordic/nrf52dk", + "boards/nucleo_f429zi", + "boards/nucleo_f446re", diff --git a/patches/tock/04-nrf52-bootloader.patch b/patches/tock/04-nrf52-bootloader.patch deleted file mode 100644 index 02f57be6552ce9ca2b09c1c98475015db6c08494..0000000000000000000000000000000000000000 --- a/patches/tock/04-nrf52-bootloader.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git a/chips/nrf52/src/crt1.rs b/chips/nrf52/src/crt1.rs -index 9703aac..281ceeb 100644 ---- a/chips/nrf52/src/crt1.rs -+++ b/chips/nrf52/src/crt1.rs -@@ -1,4 +1,4 @@ --use cortexm4::{generic_isr, hard_fault_handler, nvic, svc_handler, systick_handler}; -+use cortexm4::{generic_isr, hard_fault_handler, nvic, scb, svc_handler, systick_handler}; - use tock_rt0; - - /* -@@ -168,5 +168,9 @@ pub unsafe extern "C" fn init() { - tock_rt0::init_data(&mut _etext, &mut _srelocate, &mut _erelocate); - tock_rt0::zero_bss(&mut _szero, &mut _ezero); - -+ // Ensure that we are compatible with a bootloader. -+ // For this we need to offset our vector table -+ scb::set_vector_table_offset(BASE_VECTORS.as_ptr() as *const ()); -+ - nvic::enable_all(); - } - diff --git a/run_desktop_tests.sh b/run_desktop_tests.sh index e38735315eb892bf2b5e74b225afffa3400b055d..36bde36da10d929257197db4316cc2aa11f96b2b 100755 --- a/run_desktop_tests.sh +++ b/run_desktop_tests.sh @@ -50,8 +50,16 @@ make -C third_party/tock/boards/nordic/nrf52840dk make -C third_party/tock/boards/nordic/nrf52840_dongle echo "Checking that other boards build properly..." -make -C boards/nrf52840_dongle_dfu -make -C boards/nrf52840_mdk_dfu +make -C third_party/tock/boards/nordic/nrf52840_dongle_dfu +make -C third_party/tock/boards/nordic/nrf52840_mdk_dfu + +echo "Checking deployment of supported boards..." +./deploy.py --board=nrf52840dk --no-app --programmer=none +./deploy.py --board=nrf52840_dongle --no-app --programmer=none + +echo "Checking deployment of other boards..." +./deploy.py --board=nrf52840_dongle_dfu --no-app --programmer=none +./deploy.py --board=nrf52840_mdk_dfu --no-app --programmer=none if [ -z "${TRAVIS_OS_NAME}" -o "${TRAVIS_OS_NAME}" = "linux" ] then diff --git a/setup.sh b/setup.sh index 1c6fe37cfc1fb467cf04d7e759e08784b97949a7..c4297adc9ccae692ed06aa5e588285e7a1046129 100755 --- a/setup.sh +++ b/setup.sh @@ -46,6 +46,11 @@ EOF exit 1 } +# Copy additional boards to the kernel. +echo -n '[-] Copying additional boards to Tock... ' +cp -r boards/* third_party/tock/boards +echo $done_text + # Apply patches to kernel. Do that in a sub-shell ( cd third_party/tock/ && \ diff --git a/third_party/tock b/third_party/tock index 3139864d391ab654bfb9c27ca8dcd3e4e9a2d58e..ba44dd690f2db52ab9c928975f85c34c1c6f5bea 160000 --- a/third_party/tock +++ b/third_party/tock @@ -1 +1 @@ -Subproject commit 3139864d391ab654bfb9c27ca8dcd3e4e9a2d58e +Subproject commit ba44dd690f2db52ab9c928975f85c34c1c6f5bea