[实战]zynq7000设备树自动导出GPIO

zynq7000设备树自动导出GPIO

今天无聊,掏出我82年产的microzed玩一玩。玩啥好呢,要不点个灯吧。于是,三下五除二,通过linux sys接口以及echo,很快就点亮了。无聊按了一下复位按键,发现系统重新先加载后,灯又不亮了。这不能忍,于是继续深入,发现导出的gpio都没了。

linux sys 接口,对GPIO实行的export操作,是临时性质的,因此每次重启系统,都需要重新进行export。通常可以通过制作脚本,在系统加载后或者用户登录后自动export,但今天,我想借这个事情,聊一条怎么用linux设备树解决这个问题。

添加设备树节点

相关的基础知识,可以参考我的博客
[Linux实战] Linux设备树原理与应用详解
[实战]Zynq设备树详细教程
[实战] 深入解析Petalinux下Zynq7000设备树开发:从理论到实战

zynq的用户自定义设备树,在{petalinux工程}/project-spec/meta-user/recipes-bsp/device-tree/files/ 下,那个叫 system-user.dtsi 就是, 用文本编辑工具打开它,会发现它是这样的:

/include/ "system-conf.dtsi"
/ {
};

这是一个空文件,里面没有任何节点,用户自定义的节点,只需要添加在这里面就行。

对于gpio自动导出,只需要新建一个gpio-export节点,并设置好必要属性,具体内容如下

/include/ "system-conf.dtsi"
/ {
     gpio-export {
         compatible = "gpio-export";
         #gpio-cells = <2>;
         
         gpio47 {
             gpio-export,name = "custom_gpio47";
             gpio-export,output = <0>;
             gpios = <&gpio0 47 0>;
         };
     };
};
  • gpio-export { … }‌

‌作用‌:创建一个名为gpio-export的子节点,用于管理GPIO导出功能。

  • compatible = “gpio-export”;‌

‌作用‌:绑定Linux内核的gpio-export驱动,该驱动负责将GPIO导出到用户空间。
‌验证‌:可通过内核源码查找COMPATIBLE_STR匹配(如drivers/gpio/gpio-export.c)。

  • #gpio-cells = <2>;‌

‌作用‌:声明每个GPIO描述需要2个参数(控制器、引脚号、激活电平)。
‌背景‌:与GPIO控制器的#gpio-cells定义一致,确保语法匹配。

  • gpio47 { … }‌

‌作用‌:定义GPIO 47的导出配置,子节点名称通常与GPIO编号对应。

  • ‌gpio-export,name = “custom_gpio47”;‌

‌作用‌:指定用户空间看到的GPIO名称(在/sys/class/gpio/下生成同名目录)。
‌用户空间路径‌:

/sys/class/gpio/custom_gpio47/
  • ‌‌gpio-export,output = <0>;‌

‌作用‌:初始化方向为输入(0=输入,1=输出)。
‌扩展‌:若需初始化为输出,需添加gpio-export,init = <0/1>;设置默认电平。

  • ‌‌gpios = <&gpio0 47 0>;‌

‌作用‌:关联硬件GPIO控制器和引脚,格式为:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客不孤独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值