3个版本 (破坏性)
0.3.0 | 2019年9月8日 |
---|---|
0.2.0 | 2019年9月4日 |
0.1.1 | 2019年8月23日 |
0.1.0 |
|
#152 in 无标准库
19MB
198K SLoC
Rust对card10 CCCamp19徽章的支持
准备您的card10
越狱不再是必要的!
从固件v1.9开始,运行ELF二进制文件需要一个包含以下内容的 /card10.cfg
execute_elf=true
预构建的二进制文件
由于Gitlab的CI系统和NixOS,我们为您构建了 .elf
文件,您可以将其放入card10徽章的 apps/
目录。
对于此存储库中的每个提交,我们还构建了包含所需配置和示例二进制的完整固件镜像。
https://git.card10.badge.events.ccc.de/astro/rust-card10/-/jobs
先决条件
您需要Rust nightly和编译card10固件的配置,包括匹配的libc。
-
有关如何设置rust的说明,请参阅 https://rustup.rs.
请确保已安装最新的rust nightly工具链并添加
thumbv7em-none-eabi
目标。rustup toolchain install nightly rustup update rustup target add thumbv7em-none-eabi --toolchain nightly
-
有关如何设置card10固件的说明,请查看 https://firmware.card10.badge.events.ccc.de/how-to-build.html 中的依赖关系章节。
-
此外,您可能还需要llvm和libc i386 dev头文件的包。
-
使用
--recursive
克隆此存储库以获取子模块,否则之后更新它们git submodule update --init --recursive
构建和运行Rust可加载模块
设置
如果您想创建自己的基于rust的可加载模块crate,需要进行一些准备
-
设置新的crate存储库。
-
将
card10-l0dable = "^0.1"
作为依赖项添加到您的新的crate中。 -
更改
Cargo.toml
文件中默认的cargo发布配置[profile.release] opt-level = "s" panic = "abort"
-
在
$PROJECT/.cargo/config
中创建(或更新)thumbv7em-none-eabi
目标配置,并使用以下 rustflags[target.thumbv7em-none-eabi] rustflags = [ "-C", "linker=arm-none-eabi-gcc", "-C", "link-args=-Tl0dable.ld -n -pie -fPIC", "-C", "relocation-model=pic", ] [build] target = "thumbv7em-none-eabi"
-
确保你的包被标记为
non_std
项目,并让card10-l0dable
知道你的自定义主函数。这需要更新你的main.rs
文件如下。#![no_std] #![no_main] use card10_l0dable::main; main!(main); fn main() {}
编译
使用夜间工具链并定义正确的目标来编译项目。
cargo +nightly build --release --target thumbv7em-none-eabi
传输到 card10
然后,将目标目录 target/thumbv7em-none-eabi/release/example
中的结果可执行文件复制到你的徽章的 apps
目录。
注意:需要将可执行文件重命名为添加 elf
扩展名(例如,example
必须重命名为 example.elf
)。
包
包 | 文档 | 描述 |
---|---|---|
card10-sys | docs.rs | 为 l0dables 提供不安全的 C 绑定 |
card10-alloc | docs.rs | 为 l0dables 提供 alloc::* 支持 |
card10-l0dable | docs.rs | 用于构建 l0dables 的高级包 |
example | l0dable 示例 | |
rkanoid | Arkanoid 复制品 | |
draw-image | 将静态图像绘制到显示屏的示例 |
杂项
如何更新固件绑定
-
将
card10-sys/firmware
子模块更新到最新固件状态。 -
如上所述重新构建固件。
-
从项目根目录运行以下脚本
python card10-sys/firmware/epicardium/api/genapi.py -H card10-sys/firmware/epicardium/epicardium.h -c card10-sys/vendor/client.c -s card10-sys/vendor/server.c
-
重新构建你的应用程序 :)
lib.rs
:
依赖
~2.5–4.5MB
~56K SLoC