当前位置: 首页 > news >正文

Linux下通过sysfs读写GPIO的一个注意事项

背景

我司一个项目用的zynq-7000平台,PL端将一个硬件开关状态通过EMIO路由到PS端的GPIO控制器,PS计划通过sysfs访问,这样就不必写驱动了。

PL选择的EMIO编号为0,对应zynq gpio控制器的118个IO口的第54个,于是按照网上的这篇文章操作步骤,执行

echo 54 > /sys/class/gpio/export

结果报错

-sh: echo: write error: Invalid argument

于是定位了2天,终于找到原因。

gpio device和gpio chip的关系

内核的gpio驱动中间件gpiolib为所有类型的gpio控制器抽象出了一个硬件无关的对象struct gpio_device,即每个struct gpio_chip创建一个,但是二者的引脚编号有差异:前者是所有gpio_device共享同一套编号,不会重复,后者是各自有独立的编号,不同的gpio_chip内的号段可能重复。

gpio_chip的base字段注释:

identifies the first GPIO number handled by this chip;
or, if negative during registration, requests dynamic ID allocation.
DEPRECATION: providing anything non-negative and nailing the base
offset of GPIO chips is deprecated. Please pass -1 as base to
let gpiolib select the chip base in all possible cases. We want to
get rid of the static GPIO number space in the long run.

gpio_device的base字段注释:

 GPIO base in the DEPRECATED global Linux GPIO numberspace, assigned
at device creation time.

于是我们可以这么理解:

gpio引脚编号的映射
当系统存在多个GPIO控制器时,这种管理方案是非常合理的。

解决

echo 960 > /sys/class/gpio/export

这次就会执行成功

正点原子开发板的坑

有些朋友如果用的正点原子的开发板里的设备树,则EMIO0恰好分配给了led,则上述命令会报错

-sh: echo: write error: Device or resource busy

解决办法就是删除project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件里的led内容,或者分配到别的IO上。

export成功后,当作输入还是输出,都可以按照网上教程来了,略。

总结

  1. sysfs这种GPIO编号貌似要被废弃了,所以仅在5.4以下的老内核适用
  2. gpio_device引脚的最大编号是1023,这让我怀疑它分配引脚号时,是倒序分配的😏
http://www.dtcms.com/a/614089.html

相关文章:

  • Metasploitable2靶场全部漏洞超详细讲解(含Metasploitable2靶场下载)
  • 复变函数与积分变换 第三章——复变函数的积分
  • 国内优秀网站设计工商查询系统
  • ES6(ECMAScript 2015)语法特性详解
  • 前端微前端性能优化,资源加载策略
  • c语言编译器gcc下载 | 完整安装步骤与配置指南
  • 收录网站是什么意思湛江网站开发公司
  • Qt QHostInfo::lookupHost()函数,10分钟讲清楚
  • DOM 添加节点
  • 餐饮行业做网站的好处佛山市网站建设哪家好
  • 从算法到产品:《自然语言处理实战》如何用Hugging Face落地NLP应用
  • 凡客网站规划与建设ppt青岛建站
  • 低成本开发者工作生存手册
  • 网站集约化建设意义linux网站服务器配置
  • Go语言编译型 | 理解Go语言的编译特性与优势
  • SSM交通违章举报平台lxsqm(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Java 基于Java语法实验专题
  • Android并发编程三剑客:深入理解CountDownLatch、CyclicBarrier和Semaphore
  • OS进程控制
  • datax的shell脚本常见报错
  • Java在线编译C语言 | 快速高效的跨语言在线编译工具
  • 前端响应式图片实现,srcset与sizes
  • 品牌网站建设解决期货软件定制开发公司
  • OpenCV(二十五):方盒滤波与均值滤波
  • Vscode 配置C++ Mingw调试、编译环境-无需修改系统PATH变量的VS Code配置方法
  • superset_config.py 配置文件的参数详解
  • 搭建本地deepseek大模型
  • 阳泉 网站建设合作网页设计心得体会2000字
  • 网站程序授权码电商网站经营性备案
  • 自动化测试任务或者定义AI AGENT(智能体)任务,通过使用它可以操作浏览器来执行特定操作,如访问网页、单击按钮、提取网页信息等。 ...