#linux-gpio #gpio #gpio-pin #command-line #cli #sysfs-gpio

bin+lib mecha-gpio-utils

Linux 系统下与 GPIO 交互的命令行工具。此工具将 sysfs_gpio 包封装成 Rust 应用或其他应用程序可用的形式

1 个不稳定版本

使用旧的 Rust 2015

0.3.0 2024年1月20日

#1692命令行工具

MIT/Apache

50KB
990

Linux GPIO 工具

Build Status Version License

GPIO 工具提供了方便访问 Linux 系统中 GPIO 的接口。该库基于内核暴露的 sysfs 接口构建,并为大多数嵌入式系统提供所需的基本功能。

安装

要安装 gpio 工具的最新发布版本,请确保已安装 Rust,然后运行

cargo install gpio-utils

功能

  • 提供系统 GPIO 命名的基础设施,提供映射到单个引脚的名称。这些名称(除 GPIO 编号外)可用于其他命令。
  • 能够以更简单的“GPIO 友好”名称导出/取消导出 GPIO 并创建符号链接。
  • 能够在每个引脚上设置输入/输出状态
  • 能够在每个引脚上设置低电平有效状态
  • 能够通过引脚号或名称(包括必要的临时导出)获取/设置 GPIO 值
  • 能够阻塞等待引脚状态变化(带有超时)
  • 能够设置导出 GPIO 的权限

系统集成

GPIO 工具提供两个主要组件,可以将其集成到最终系统中

  1. gpio 命令。这提供了 GPIO 工具的核心功能,并且其本身也很有用。
  2. gpio 初始化脚本/systemd 服务。可以将其集成到目标系统中,并确保在系统启动时导出配置的 GPIO(GPIO 命令会搜索 /etc/gpio.toml/etc/gpio.d/*.toml 配置)

GPIO 工具库是在 Rust sysfs-gpio 库的基础上构建的,该库可以独立于此项目使用。

GPIO 配置文件

GPIO 工具使用 TOML。配置有一定的灵活性,但以下示例展示了如何配置 GPIO 的基本方法。

#
# Example GPIO configuration (e.g. /etc/gpio.toml)
#
# The main configuration consists of zero or more pins, each of which may have
# the following keys:
#
# - `num`: Required.  The GPIO number.
# - `names`: Required.  One or more names for the GPIO
# - `direction`: Default: `"in"`.  Must be either "in" or "out"
# - `active_low`: Default: `false`.  If set to true, the polarity of the pin will
#    be reversed.
# - `export`: Default: `true`.  If true, this GPIO will be automatically
#    exported when `gpio export-all` is run (e.g. by an init script).
# - `user`: User that should own the exported GPIO
# - `group`: Group that should own the exported GPIO
# - `mode`: Mode for exported directory

[[pins]]
num = 73                 # required
names = ["reset_button"] # required (may have multiple)
direction = "in"         # default: in
active_low = false       # default: false (really means invert logic)
export = true            # default: true
user = "root"            # default: (OS Default - root)
group = "gpio"           # default: (OS Default - root)
mode = 0o664             # default: (OS Default - 0o644)

[[pins]]
num = 37
names = ["status_led", "A27", "green_led"]
direction = "out"

# ...

实现说明

与其他几种现有的解决方案不同,本项目采用Rust(一种与C语言处于同一级别的现代系统编程语言,但具有提供更高生产率和可靠性的类型系统)实现,并力求以最小的开销运行。

最低支持的Rust版本(MSRV)

本软件包保证在稳定版Rust 1.26.2及更高版本上编译。它可能可以在较旧版本上编译,但在任何新的补丁版本中可能会发生变化。

贡献

非常欢迎贡献。有关如何报告错误、提交更改、测试更改、获取支持等更多信息,请参阅CONTRIBUTING.md

许可证

以下任一许可证下授权

任选其一。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的您提交的任何有意包含在本作品中的贡献,均应如上所述双授权,不附加任何额外条款或条件。

行为准则

对本软件包的贡献是在Rust行为准则的条款下组织的,本软件包的维护者、嵌入式Linux团队承诺将介入以维护该行为准则。

依赖项

~8–18MB
~238K SLoC