You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需编写自定义驱动,能否自动导出并配置GPIO引脚为默认输出?

GPIO自动导出与配置方案

问题背景

我们拥有多个GPIO控制器,每个引脚仅承担单一功能,例如I2C扩展GPIO的设备树条目如下:

i2c_expander: pca9506@20 {
    compatible = "nxp,pca9505";
    reg = <0x20>;
    gpio-controller;
    #gpio-cells = <2>;
};

这类GPIO多作为二进制开关使用,当前切换开关需执行以下步骤:

  • 导出GPIO设备
  • 设置方向为输出
  • 写入数值
    由于前两步每次操作都要重复执行,十分繁琐。请问是否必须编写自定义内核驱动才能自动完成这两步?是否存在通用驱动可实现自动以输出方向导出指定GPIO引脚(如引脚4)?

解决方案

不需要编写自定义内核驱动,Linux内核本身提供了**GPIO Hogging(GPIO占用)**功能,可直接在设备树中配置,实现自动导出指定GPIO并设置方向、默认电平。

1. 设备树中配置GPIO Hog

在你的I2C扩展GPIO节点下添加hog子节点,以引脚4为例,配置为输出并默认低电平:

i2c_expander: pca9506@20 {
    compatible = "nxp,pca9505";
    reg = <0x20>;
    gpio-controller;
    #gpio-cells = <2>;

    /* 配置引脚4为输出,默认低电平 */
    gpio_hog_4: gpio-hog-4 {
        gpios = <4 GPIO_ACTIVE_HIGH>;
        output-low;
        line-name = "custom-switch-4";
    };
};
  • gpios:指定要配置的GPIO引脚(这里是引脚4)和有效电平
  • output-low:设置引脚为输出方向,默认输出低电平;若需要默认高电平则用output-high
  • line-name:为该GPIO设置名称,方便在sysfs中识别

配置完成后,内核启动时会自动完成引脚的导出和方向设置,你直接在/sys/class/gpio/custom-switch-4/value文件中写入0或1即可控制开关,无需再执行导出和方向设置步骤。

2. 其他可选方案

如果需要更灵活的用户态控制,也可以使用gpio-leds通用驱动,将GPIO模拟为LED设备,同样能自动完成导出和方向配置:

custom_leds: leds {
    compatible = "gpio-leds";
    switch-4 {
        gpios = <&i2c_expander 4 GPIO_ACTIVE_HIGH>;
        default-state = "off"; // 默认低电平
        label = "custom-switch-4";
    };
};

此时GPIO会被映射到/sys/class/leds/custom-switch-4/brightness,写入0或1即可控制电平,同样无需手动配置方向和导出。

内容的提问来源于stack exchange,提问作者Schottky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:57:09