From d938b95430d543d8a97e611642ef09d803b7bdc1 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Mon, 29 Mar 2021 22:28:36 +0200 Subject: [PATCH] rp: add precompiled boot2 to avoid depending on gcc --- embassy-rp-examples/.cargo/config | 12 +----------- embassy-rp-examples/Cargo.toml | 1 - embassy-rp-examples/memory.x | 10 +--------- embassy-rp-examples/src/example_common.rs | 4 ---- embassy-rp/build.rs | 17 +++++++++++++++++ embassy-rp/link-rp.x.in | 8 ++++++++ embassy-rp/src/boot2.bin | Bin 0 -> 256 bytes embassy-rp/src/system.rs | 4 ++++ 8 files changed, 31 insertions(+), 25 deletions(-) create mode 100644 embassy-rp/build.rs create mode 100644 embassy-rp/link-rp.x.in create mode 100644 embassy-rp/src/boot2.bin diff --git a/embassy-rp-examples/.cargo/config b/embassy-rp-examples/.cargo/config index 1f6a94f88..8db641544 100644 --- a/embassy-rp-examples/.cargo/config +++ b/embassy-rp-examples/.cargo/config @@ -9,19 +9,9 @@ rustflags = [ # LLD (shipped with the Rust toolchain) is used as the default linker "-C", "link-arg=--nmagic", "-C", "link-arg=-Tlink.x", + "-C", "link-arg=-Tlink-rp.x", "-C", "link-arg=-Tdefmt.x", - # if you run into problems with LLD switch to the GNU linker by commenting out - # this line - # "-C", "linker=arm-none-eabi-ld", - - # if you need to link to pre-compiled C libraries provided by a C toolchain - # use GCC as the linker by commenting out both lines above and then - # uncommenting the three lines below - # "-C", "linker=arm-none-eabi-gcc", - # "-C", "link-arg=-Wl,-Tlink.x", - # "-C", "link-arg=-nostartfiles", - # Code-size optimizations. "-Z", "trap-unreachable=no", ] diff --git a/embassy-rp-examples/Cargo.toml b/embassy-rp-examples/Cargo.toml index 0744fa1e9..dae22f809 100644 --- a/embassy-rp-examples/Cargo.toml +++ b/embassy-rp-examples/Cargo.toml @@ -19,7 +19,6 @@ defmt-error = [] [dependencies] embassy = { version = "0.1.0", path = "../embassy", features = ["defmt", "defmt-trace"] } embassy-rp = { version = "0.1.0", path = "../embassy-rp", features = ["defmt", "defmt-trace"] } -rp2040-boot2 = { git = "https://github.com/rp-rs/rp2040-boot2-rs", branch="main" } rp2040-pac2 = { git = "https://github.com/Dirbaio/rp2040-pac", rev="254f4677937801155ca3cb17c7bb9d38eb62683e" } atomic-polyfill = { version = "0.1.1" } diff --git a/embassy-rp-examples/memory.x b/embassy-rp-examples/memory.x index 0596611d2..aba861aae 100644 --- a/embassy-rp-examples/memory.x +++ b/embassy-rp-examples/memory.x @@ -2,12 +2,4 @@ MEMORY { BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100 FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100 RAM : ORIGIN = 0x20000000, LENGTH = 256K -} - -SECTIONS { - /* ### Boot loader */ - .boot2 ORIGIN(BOOT2) : - { - KEEP(*(.boot2)); - } > BOOT2 -} INSERT BEFORE .text; \ No newline at end of file +} \ No newline at end of file diff --git a/embassy-rp-examples/src/example_common.rs b/embassy-rp-examples/src/example_common.rs index 89f35736b..f7c4ef57a 100644 --- a/embassy-rp-examples/src/example_common.rs +++ b/embassy-rp-examples/src/example_common.rs @@ -2,10 +2,6 @@ use core::sync::atomic::{AtomicUsize, Ordering}; use defmt_rtt as _; use panic_probe as _; -#[link_section = ".boot2"] -#[used] -pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER; - defmt::timestamp! {"{=u64}", { static COUNT: AtomicUsize = AtomicUsize::new(0); // NOTE(no-CAS) `timestamps` runs with interrupts disabled diff --git a/embassy-rp/build.rs b/embassy-rp/build.rs new file mode 100644 index 000000000..bc59ea23b --- /dev/null +++ b/embassy-rp/build.rs @@ -0,0 +1,17 @@ +use std::fs::{self, File}; +use std::io::Write; +use std::path::{Path, PathBuf}; +use std::{env, ffi::OsStr}; + +fn main() { + // Put the linker script somewhere the linker can find it + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + let link_x = include_bytes!("link-rp.x.in"); + let mut f = File::create(out.join("link-rp.x")).unwrap(); + f.write_all(link_x).unwrap(); + + println!("cargo:rustc-link-search={}", out.display()); + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=link-rp.x.in"); +} diff --git a/embassy-rp/link-rp.x.in b/embassy-rp/link-rp.x.in new file mode 100644 index 000000000..af463f963 --- /dev/null +++ b/embassy-rp/link-rp.x.in @@ -0,0 +1,8 @@ + +SECTIONS { + /* ### Boot loader */ + .boot2 ORIGIN(BOOT2) : + { + KEEP(*(.boot2)); + } > BOOT2 +} \ No newline at end of file diff --git a/embassy-rp/src/boot2.bin b/embassy-rp/src/boot2.bin new file mode 100644 index 0000000000000000000000000000000000000000..fdc1fc756b0e876b93b99f5475bea32902b13656 GIT binary patch literal 256 zcmZSBYUHh`5Rot=gGsT&c}BvG1c}6mL_Kc?#hD2#ijj$oiXW6_255UqCNKg;OcfYD zxcp#Jn&2dIflW~|jp2jI56L`65KBQKO$x}@0rEkR6{u4G2csf~)6a__v!sD0FepYQ zNO?+oFoMl`4b-&&Y=+PekP0zR5vUB~9tI7D3k>c;9>Sg+3Ct%NK67+%xHE5^nZ=^O z==A#nBar-Yk$ErER*5u;wEy2f{g=p-$Ya{ez`*3dz`!8Ez`)MHz#Pw@sKmhV1;|%Y XU|7Jw$RNP+mf-z53y?sZ3 literal 0 HcmV?d00001 diff --git a/embassy-rp/src/system.rs b/embassy-rp/src/system.rs index 200f88d63..ba1396433 100644 --- a/embassy-rp/src/system.rs +++ b/embassy-rp/src/system.rs @@ -1,5 +1,9 @@ use crate::{pac, pll, resets}; +#[link_section = ".boot2"] +#[used] +pub static BOOT2: [u8; 256] = *include_bytes!("boot2.bin"); + #[non_exhaustive] pub struct Config {}