#bootloader #rp2040 #raspberry-pi #stage #second #flash #soc

rp2040-boot2

Raspberry Pi RP2040 SoC 第二阶段引导加载程序

4 个版本 (2 个破坏性更改)

0.3.0 2023年5月5日
0.2.1 2022年8月11日
0.2.0 2021年10月18日
0.1.2 2021年1月25日

#967硬件支持

Download history 3853/week @ 2024-04-23 4145/week @ 2024-04-30 2608/week @ 2024-05-07 2763/week @ 2024-05-14 3139/week @ 2024-05-21 2787/week @ 2024-05-28 2584/week @ 2024-06-04 2862/week @ 2024-06-11 2909/week @ 2024-06-18 3112/week @ 2024-06-25 2372/week @ 2024-07-02 2666/week @ 2024-07-09 3244/week @ 2024-07-16 3326/week @ 2024-07-23 2606/week @ 2024-07-30 3399/week @ 2024-08-06

12,998 每月下载量
45 个crate中(37 个直接) 使用

BSD-3-Clause

75KB
1K SLoC

GNU Style Assembly 850 SLoC // 0.4% comments Rust 153 SLoC // 0.0% comments Shell 16 SLoC // 0.2% comments

Raspberry Pi RP2040 第二阶段引导加载程序

这是Raspberry Pi RP2040 SoC的第二阶段引导加载程序。

您可以使用这个crate将第二阶段引导加载程序包含到您的应用中。只需确保您的链接器脚本将这个crate导出的数组放在您的闪存映像的开始位置(0x000到0x100)。

说明

添加到您的应用的 Cargo.toml

rp2040_boot2 = { version = "0.2" }

添加到您的 main.rs

#[link_section = ".boot_loader"]
#[used]
pub static BOOT_LOADER: [u8; 256] = rp2040_boot2::BOOT_LOADER_W25Q080;

这将包括对Raspberry Pi Pico上W25Q080闪存部件的支持。如果您使用的板子使用的是AT25SF128A(如Arduino Nano Connect),则可以改用

#[link_section = ".boot_loader"]
#[used]
pub static BOOT_LOADER: [u8; 256] = rp2040_boot2::BOOT_LOADER_AT25SF128A;

最后,添加到您的应用的 memory.x

MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  /* To suit Raspberry Pi RP2040 SoC */
  BOOT_LOADER : ORIGIN = 0x10000000, LENGTH = 0x100
  /* Adjust this to suit the size of your specific flash chip */
  FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100
  RAM : ORIGIN = 0x20000000, LENGTH = 264K
}

SECTIONS {

  /* ### Boot loader */
  .boot_loader ORIGIN(BOOT_LOADER) :
  {
    KEEP(*(.boot_loader*));
  } > BOOT_LOADER

} INSERT BEFORE .text;

从RAM引导

如果您希望引导加载程序在引导之前将您的应用从闪存复制到RAM,可以使用引导加载程序 BOOT_LOADER_RAM_MEMCPY,这将把所有内容从闪存移动到RAM(最多到RAM长度)。使用这种策略允许更快的执行和为持久存储可用性提供闪存。

此外,您还需要更改您的链接器脚本,以便指定所有RAM部分的VMAs和LMAs,如下例所示

    .text : {
      ...
    } > RAM AT > FLASH

添加或更改现有的引导加载程序

为了使此crate的用户无需使用GCC,我们默认链接到每个引导加载程序的预构建版本。

如果您希望添加或更改现有的引导加载程序,应安装GCC并使用特性 assemble 构建

UPDATE_PRECOMPILED_BINARIES=true cargo build --features=assemble

要添加新的引导加载程序到构建中,需要在 build.rs 中的 SOURCE_FILES 中添加它,并在 lib.rs 中为其添加一个条目

测试完成后,将填充的二进制文件添加到 bin 文件夹中(例如:bin/boot2_w25q080.padded.bin)到 git

您可以通过运行 check-blobs.sh 来验证在提交 Pull Request 之前已经构建了您最新的源代码。

许可协议

一些汇编源文件版权属于 Raspberry Pi Trading,并按照 BSD 3-clause 许可协议授权。请参阅源文件以获取详细信息。

本crate中的其余文件均采用 CC0 许可协议。

无运行时依赖