使用gpio 的/sys 属性来模拟调试信号的操作
现实中,程序很可能来不及写,或者根本不想写,想通过操作设备节点的方式来简单的配置信号做一些实验,看看信号的变化效果,可以选择/sys 设备树中gpio 属性来简单的操作
比如,需要将红框内的gpio 信号拉高,通过dts文件可以知道该pin是gpio0 这个控制模块内,pin 的编号是RK_PA5, 激活状态是高。

源码中检索到该pin 编号是5,也就是gpio0 的pin5
![]()
然后
一、先明确gpiochip0管理的 GPIO 范围
# 查看控制器起始GPIO编号(base)
cat /sys/devices/platform/pinctrl/gpio/gpiochip0/base
# 示例输出:0(表示该控制器从GPIO0开始)# 查看控制器管理的引脚数量(ngpio)
cat /sys/devices/platform/pinctrl/gpio/gpiochip0/ngpio
# 示例输出:32(表示管理GPIO0~GPIO31,共32个引脚)
二、操作步骤:以具体引脚(如 GPIO5)为例
1. 导出(export)GPIO 引脚
要操作某个 GPIO,需先将其从控制器 “导出”(创建操作节点)
# 导出GPIO5(编号为5,需在gpiochip0的管理范围内)
echo 5 > /sys/class/gpio/export # 导出成功后,会生成对应的操作节点:/sys/class/gpio/gpio5
# (该节点也可能链接到 /sys/devices/platform/pinctrl/gpio/gpiochip0/gpio5)
2. 配置 GPIO 方向(输入 / 输出)
通过 direction 文件设置引脚为输入(in)或输出(out)
# 设置为输出模式
echo "out" > /sys/class/gpio/gpio5/direction # 或设置为输入模式
echo "in" > /sys/class/gpio/gpio5/direction
3. 读写 GPIO 电平(输出 / 输入)
-
若为输出模式:通过
value文件设置电平(0 = 低电平,1 = 高电平) -
# 输出高电平 echo 1 > /sys/class/gpio/gpio5/value # 输出低电平 echo 0 > /sys/class/gpio/gpio5/value -
若为输入模式:通过
value文件读取当前电平(0 = 低,1 = 高): -
cat /sys/class/gpio/gpio5/value
5. 取消导出(unexport)
不再使用时,可取消导出以释放资源:
echo 5 > /sys/class/gpio/unexport
以上汇总的简单操作示例如下:

三、关键文件说明
gpiochip0 控制器目录下的核心文件:
base:控制器起始 GPIO 编号(如 0);ngpio:控制器管理的引脚总数(如 32);label:控制器标签(如 “px30-gpio0”,标识硬件来源)。
导出后的 GPIO 节点(如gpio5)下的核心文件:
direction:配置方向(in/out);value:读写电平(0/1);active_low:设置极性(0 = 不反相,1 = 反相);edge:配置中断触发方式(如rising/falling/both,仅输入模式有效)。
四、注意事项
- 权限问题:操作 GPIO 需要 root 权限(用
sudo或切换至 root 用户); - 引脚复用冲突:需确保该 GPIO 未被其他功能(如 PWM、I2C)占用(需提前在设备树中配置为 GPIO 功能);
- 路径差异:部分系统中,
/sys/class/gpio是/sys/devices/platform/pinctrl/gpio/的符号链接,操作两者效果一致; - 中断配置:若需用 GPIO 触发中断,可通过
edge文件设置触发边沿(如上升沿、下降沿),再结合poll机制监听value变化。
