#risc-v #spl #cli-file #u-boot #visionfive2

no-std bin+lib spl_tool

StarFive 的 C spl_tool 端口,默认支持 VisionFive2

4 个版本

0.2.0 2024年4月20日
0.1.2 2024年4月9日
0.1.1 2023年11月25日
0.1.0 2023年11月25日

#273 in 硬件支持

GPL-2.0-or-later

29KB
511

SPL tool (VisionFive2)

注意 开发已转移到 weathered-steel/spl_tool.

C 实现的端口 spl_tool,最初由 strlcat 编写。

警告 此工具处于非常初期的开发阶段。它仍然需要测试套件、文件格式的模糊测试工具和实际测试。

用法

要使用 CLI 应用程序,请使用 cli 功能编译

$ cd spl_tool
$ cargo run --features cli -- --file <path-to-spl-image> --create-spl-header
# To see a full list of options
$ cargo run --features cli -- --help

库示例

use spl_tool::{crc32, crc32_final, Result, HeaderConf, UbootSplHeader};
use spl_tool::{DEF_CRC32_IV, DEF_CRC32_SV, SPL_HEADER_LEN};

// Dummy example of the U-Boot SPL image size
// Real value should be read from SPL image file
const UBOOT_IMG_SIZE: usize = 0xf00d;

// Dummy data for the SPL image data
let spl = [0xff; UBOOT_IMG_SIZE];

// Calculate the main CRC-32 rounds
let v = crc32(DEF_CRC32_IV, DEF_CRC32_SV, spl.as_ref());
// Calculate the final CRC-32 round
let crc = crc32_final(v);

let conf = HeaderConf::new().with_name("u-boot-spl.bin");

let hdr = UbootSplHeader::new()
    .with_bofs(conf.bofs())
    .with_vers(conf.vers())
    .with_fsiz(UBOOT_IMG_SIZE as u32)
    // Set calculated CRC-32 in the header
    .with_crcs(crc);

// Convert header to bytes
let _hdr_bytes: [u8; SPL_HEADER_LEN] = hdr.into();

// ... do cool stuff with your SPL header
// ... usually, prepend it to the SPL image data in a new SPL image file

安装

CLI 应用程序需要 cli 功能

$ cd spl_tool
$ cargo install --features cli --path .

no-std 兼容性

spl_tool 库部分默认与 no-std 兼容,并可用于嵌入式/裸机环境中。

替代方案

许可

spl_tool Rust 使用与原始 C 实现相同的 GPLv2+ 许可证。

依赖项

~0–7.5MB
~52K SLoC