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 硬件支持
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
(C): https://github.com/starfive-tech/Tools/tree/master/spl_toolvf2-header
(Rust): https://github.com/jonirrings/vf2-header
许可
spl_tool
Rust 使用与原始 C 实现相同的 GPLv2+ 许可证。
依赖项
~0–7.5MB
~52K SLoC