From 4b9486d0bdbef2c47e0b9d513c1fffcb9f4c08e1 Mon Sep 17 00:00:00 2001 From: Guillaume Endignoux <guillaumee@google.com> Date: Wed, 8 Apr 2020 15:09:18 +0200 Subject: [PATCH] Sync with upstream Tock to have reproducible builds. --- .github/workflows/boards_build.yml | 12 +++----- boards/nordic/nrf52840_dongle_dfu/Cargo.toml | 18 +++++++++++ .../{ => nordic}/nrf52840_dongle_dfu/Makefile | 6 ++-- boards/nordic/nrf52840_dongle_dfu/build.rs | 4 +++ .../nrf52840_dongle_dfu}/layout.ld | 2 +- boards/nordic/nrf52840_mdk_dfu/Cargo.toml | 14 +++++++++ boards/{ => nordic}/nrf52840_mdk_dfu/Makefile | 8 ++--- boards/nordic/nrf52840_mdk_dfu/build.rs | 4 +++ .../nrf52840_mdk_dfu}/layout.ld | 2 +- .../{ => nordic}/nrf52840_mdk_dfu/src/io.rs | 0 .../{ => nordic}/nrf52840_mdk_dfu/src/main.rs | 0 boards/nrf52840_dongle_dfu/Cargo.toml | 30 ------------------- boards/nrf52840_dongle_dfu/build.rs | 4 --- boards/nrf52840_mdk_dfu/Cargo.toml | 26 ---------------- boards/nrf52840_mdk_dfu/build.rs | 4 --- deploy.py | 10 +++---- patches/tock/04-additional-boards.patch | 13 ++++++++ patches/tock/04-nrf52-bootloader.patch | 21 ------------- run_desktop_tests.sh | 12 ++++++-- setup.sh | 5 ++++ third_party/tock | 2 +- 21 files changed, 87 insertions(+), 110 deletions(-) create mode 100644 boards/nordic/nrf52840_dongle_dfu/Cargo.toml rename boards/{ => nordic}/nrf52840_dongle_dfu/Makefile (81%) create mode 100644 boards/nordic/nrf52840_dongle_dfu/build.rs rename boards/{nrf52840_mdk_dfu => nordic/nrf52840_dongle_dfu}/layout.ld (76%) create mode 100644 boards/nordic/nrf52840_mdk_dfu/Cargo.toml rename boards/{ => nordic}/nrf52840_mdk_dfu/Makefile (74%) create mode 100644 boards/nordic/nrf52840_mdk_dfu/build.rs rename boards/{nrf52840_dongle_dfu => nordic/nrf52840_mdk_dfu}/layout.ld (76%) rename boards/{ => nordic}/nrf52840_mdk_dfu/src/io.rs (100%) rename boards/{ => nordic}/nrf52840_mdk_dfu/src/main.rs (100%) delete mode 100644 boards/nrf52840_dongle_dfu/Cargo.toml delete mode 100644 boards/nrf52840_dongle_dfu/build.rs delete mode 100644 boards/nrf52840_mdk_dfu/Cargo.toml delete mode 100644 boards/nrf52840_mdk_dfu/build.rs create mode 100644 patches/tock/04-additional-boards.patch delete mode 100644 patches/tock/04-nrf52-bootloader.patch diff --git a/.github/workflows/boards_build.yml b/.github/workflows/boards_build.yml index 0a8fbeb..50a29d5 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 0000000..35eab8a --- /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 723ba0a..58771b3 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 0000000..1fdd492 --- /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 834133c..41ae608 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 0000000..c0cb7af --- /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 e915141..a179ffb 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 0000000..1fdd492 --- /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 834133c..41ae608 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 6944eb3..0000000 --- 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 2631dcc..0000000 --- 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 1047869..0000000 --- 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 2631dcc..0000000 --- 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 ddbd2e5..3026c7a 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 0000000..88cd1c3 --- /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 02f57be..0000000 --- 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 e387353..36bde36 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 1c6fe37..c4297ad 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 3139864..ba44dd6 160000 --- a/third_party/tock +++ b/third_party/tock @@ -1 +1 @@ -Subproject commit 3139864d391ab654bfb9c27ca8dcd3e4e9a2d58e +Subproject commit ba44dd690f2db52ab9c928975f85c34c1c6f5bea -- GitLab