First per-board binary. rust/pm-kit/ is a minimal rp235x-hal firmware that blinks GP25 on the Pico 2 — proves the toolchain, RP2350 boot block (ImageDef), memory layout, and flash before we add any drivers. - src/main.rs + memory.x + build.rs + .cargo/config.toml: rp235x-hal blink, builds for thumbv8m.main-none-eabihf. - build.sh + uf2.py: one command builds the ELF in the container, objcopies to a raw image, and packs pm-kit.uf2 (rp2350-arm-s family). Drag onto the Pico 2 in BOOTSEL. Verified: builds clean; produces a valid 6-block UF2. Runtime (does it blink?) is the on-device check. Next: drivers (display first) + link pm-core. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41 lines
1.1 KiB
Text
41 lines
1.1 KiB
Text
/* RP2350 (Pico 2) memory layout for rp235x-hal + cortex-m-rt.
|
|
The bootrom requires the IMAGE_DEF (.start_block) right after the vector table. */
|
|
MEMORY {
|
|
FLASH : ORIGIN = 0x10000000, LENGTH = 4096K
|
|
RAM : ORIGIN = 0x20000000, LENGTH = 512K
|
|
}
|
|
|
|
SECTIONS {
|
|
/* ### RP2350 image definition block — the bootrom scans for this to boot the image. */
|
|
.start_block : ALIGN(4)
|
|
{
|
|
__start_block_addr = .;
|
|
KEEP(*(.start_block));
|
|
KEEP(*(.boot_info));
|
|
} > FLASH
|
|
} INSERT AFTER .vector_table;
|
|
|
|
/* move .text after the start block */
|
|
_stext = ADDR(.start_block) + SIZEOF(.start_block);
|
|
|
|
SECTIONS {
|
|
/* picotool 'Binary Info' entries */
|
|
.bi_entries : ALIGN(4)
|
|
{
|
|
__bi_entries_start = .;
|
|
KEEP(*(.bi_entries));
|
|
. = ALIGN(4);
|
|
__bi_entries_end = .;
|
|
} > FLASH
|
|
} INSERT AFTER .text;
|
|
|
|
SECTIONS {
|
|
.end_block : ALIGN(4)
|
|
{
|
|
__end_block_addr = .;
|
|
KEEP(*(.end_block));
|
|
} > FLASH
|
|
} INSERT AFTER .bi_entries;
|
|
|
|
PROVIDE(start_to_end = __end_block_addr - __start_block_addr);
|
|
PROVIDE(end_to_start = __start_block_addr - __end_block_addr);
|