本文主要是介绍pinctrl和gpio子系统获取 GPIO 编号失败(嵌入式linux),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
gpioled major = 249, minor = 0
can’t find led gpio
gpioled major = 248, minor = 0
------------[ cut here ]------------
WARNING: CPU: 0 PID: 68 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x54/0x74()
sysfs: cannot create duplicate filename ‘/class/gpioled’
Modules linked in: gpioled(O+)
CPU: 0 PID: 68 Comm: modprobe Tainted: G O 4.1.15 #4
出现了类似问题是因为of_get_named_gpio 函数申请gpio的编号失败了
解决方案
打开dts设备树文件查看相应节点
gpioled{compatible = "guozhijiang,gpioled";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpioled>;led-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;status = "okay";};pinctrl_gpioled: ledgrp {fsl,pins = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10b0>;};
1.of_get_named_gpio的输入参数要和节点对应,比如图中
“led-gpios”为第二个输入参数,填错的话回导致查找失败
2.检查复用,也就是pinctrl设置,全局搜索一下GPIO1_IO03有没有在其他pinctrl里面被使用过,把他注释掉
3.检查gpio使用,全局搜索gpio1 3,会发现&tsc{}节点里面用到了gpio1 3。这是恩智浦板子触摸屏使用的,我们直接注释掉就好了。
这篇关于pinctrl和gpio子系统获取 GPIO 编号失败(嵌入式linux)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!