pinctrl子系统 和 GPIO子系统
pin controller
pin controller 是用来设置引脚上下拉、三态、驱动强度、复用功能的,作为一个设备树节点,如 testgrp
iomuxc: pinctrl@20e0000 { compatible = "fsl,imx6ul-iomuxc"; reg = <0x020e0000 0x4000>; }; &iomuxc { pinctrl_test: testgrp { fsl,pins = < MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 config /*config 是具体设置值*/ >; };
pinctrl作为一个设备节点,必然一个驱动程序以之对应,由芯片厂商提供,在linux kernel中搜索 "fsl,imx6ul-iomuxc" 即可
参考文档:
Documentation\devicetree\bindings\pinctrl\fsl,imx-pinctrl.txt
Documentation\devicetree\bindings\pinctrl\fsl,imx6ul-pinctrl.txt
gpio controller
gpio1: gpio@73f84000 { compatible = "fsl,imx35-gpio"; reg = <0x73f84000 0x4000>; interrupts = <50 51>; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; };
gipo作为一个设备节点,必然有一个驱动程序以之对应,由芯片厂商提供,在linux kernel 中搜索 "fsl,imx35-gpio" 即可
#gpio-cells = <2>:引用 gpio controller 的语句称为 gpio-specifier,比如 "led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>",#gpio-cells是用来指示 gpio-specifier 带几个参数的,此处 2 对应的参数是 3 和 GPIO_ACTIVE_LOW。
参考文档:
Documentation\devicetree\bindings\gpio\gpio.txt
Documentation\devicetree\bindings\gpio\fsl-imx-gpio.yaml
client device
如果某个设备节点需要设置 pin,此设备节点称为 client device。
client device 设置 pin 的方法为引用 pin controller
gpioled { #address-cells = <1>; #size-cells = <1>; compatible = "atkalpha-gpioled"; pinctrl-0 = <&pinctrl_led>; led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; status = "okay"; };
参考文档:
Documentation\devicetree\bindings\pinctrl\pinctrl-bindings.txt
以上的节点属性,只有 led-gpio 是自定义的,在 gpioled 的驱动程序中,我们就可以指定节点属性 led-gpio,从而获得此 gpio 的编号,最后控制此 gpio 的电平。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2019-02-12 AZ ------ 注册笔记
2017-02-12 HTTP ------ HTTP协议
2017-02-12 Express学习