#linux-gpio #gpio #testing #linux #gpiochip #library

gpiosim

一个用于驱动GPIO模拟器进行GPIO软件测试的库

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 中使用

Apache-2.0 OR MIT

32KB
563 代码行

gpiosim

Build Status github crate LICENSE

一个用于创建和控制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-2.0许可证定义,都应按上述方式双重许可,不得附加任何额外条款或条件。

依赖项

~3–12MB
~143K SLoC