11个版本
0.4.0 | 2024年4月9日 |
---|---|
0.3.2 | 2024年2月20日 |
0.3.1 | 2023年7月4日 |
0.3.0 | 2023年5月25日 |
0.1.2 | 2022年10月23日 |
#316 in Unix APIs
在 3 crate 中使用
32KB
563 代码行
gpiosim
一个用于创建和控制Linux GPIO uAPI(v1和v2)用户测试的GPIO模拟器的Rust库。
模拟器由Linux gpio-sim 内核模块提供,需要使用带有 CONFIG_GPIO_SIM 的最新内核(5.19或更高版本)构建。
模拟器包含一个或多个 Chip,每个 Chip 都有一系列被模拟的线路。一个 Builder 负责构建 Sim 并使其运行。配置模拟器涉及到向构建器添加表示芯片的 Bank。
一旦运行,Chip 会暴露出线路,用户空间可以通过 Chip pull方法控制模拟线路的电平。对于输出线路,Chip.get_level 方法返回用户空间驱动的模拟线路电平。
对于只需要单个芯片上线路的测试,Simpleton 提供了一个稍微简单的接口。
删除 Sim 会销毁模拟器,移除相应的 gpio-sim 配置和 gpiochips。
配置模拟器需要 configfs,并且操作运行中的芯片需要 sysfs,因此通常需要root权限来运行模拟器。
示例用法
创建一个包含两个芯片的模拟器,每个芯片分别有8条和42条线路,每条线路都有命名,并且有一条被占用
use gpiosim::{Bank, Direction, Level};
let sim = gpiosim::builder()
.with_name("some unique name")
.with_bank(
Bank::new(8, "left")
.name(3, "LED0")
.name(5, "BUTTON1")
.hog(2, "hogster", Direction::OutputLow)
)
.with_bank(
Bank::new(42, "right")
.name(3, "BUTTON2")
.name(4, "LED2")
.hog(7, "hogster", Direction::OutputHigh),
)
.live()?;
let chips = sim.chips();
let c = &chips[0];
c.set_pull(5, Level::High);
let level = c.get_level(3)?;
使用 Simpleton 创建一个包含12条线路的单芯片模拟器,不需要多个芯片或命名线路
let s = gpiosim::Simpleton::new(12);
s.set_pull(5, Level::High);
let level = s.get_level(3)?;
许可
根据您的选择,许可协议可以是
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交的任何贡献,根据Apache-2.0许可证定义,都应按上述方式双重许可,不得附加任何额外条款或条件。
依赖项
~3–12MB
~143K SLoC