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

Linux内核v6.6中如何替代of_get_named_gpio_flags设置GPIO电平

替代of_get_named_gpio_flags实现GPIO初始电平配置(Linux内核v6.6)

Linux内核v6.6中,旧的of_get_named_gpio系列API已被基于gpio_desc的新接口取代,要实现从设备树读取GPIO并按配置设置初始电平,可按以下方式处理:

1. 使用gpiod_get_index()获取GPIO描述符

gpiod_get_index可以一次性完成GPIO描述符的获取,并自动解析设备树中的标志配置,替代原有的of_get_named_gpio和of_get_named_gpio_flags组合。示例代码:

struct gpio_desc *gpiod;

// 按设备树配置获取GPIO并应用初始电平
gpiod = gpiod_get_index(np, "my-gpio", 0, GPIOD_ASIS);
if (IS_ERR(gpiod)) {
    // 错误处理,返回对应错误码
    return PTR_ERR(gpiod);
}

2. 设备树参数对应关系

你的设备树定义my-gpio = <&gpio4 20 0>;中,第三个数值0对应GPIO的极性标志:

  • 0代表GPIO_ACTIVE_HIGH,初始电平为高
  • 若为1则代表GPIO_ACTIVE_LOW,初始电平为低

3. 手动控制电平的写法

如果需要显式获取标志并设置电平,可先以GPIOD_ASIS获取描述符,再提取标志:

struct gpio_desc *gpiod;
enum gpiod_flags flags;

gpiod = gpiod_get_index(np, "my-gpio", 0, GPIOD_ASIS);
if (IS_ERR(gpiod)) {
    return PTR_ERR(gpiod);
}

flags = gpiod_get_flags(gpiod);
// 根据标志设置电平,例如判断是否为ACTIVE_HIGH后调用gpiod_set_value
gpiod_set_value(gpiod, !(flags & GPIOD_FLAGS_ACTIVE_LOW));

注意事项

  • 使用完毕后需调用gpiod_put(gpiod)释放GPIO资源
  • 新的gpiod接口支持GPIO动态管理与上下文跟踪,安全性优于旧的gpio_*系列函数,建议全面替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:27:07