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 在 硬件支持
12,998 每月下载量
在 45 个crate中(37 个直接) 使用
75KB
1K SLoC
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 许可协议。