pinctrl子系统与gpio子系统实验-解决申请IO失败问题

一. 简介

前面一篇文章对Led 驱动代码进行了测试,测试后驱动出现错误提示,提示 申请IO失败。文章地址如下:

pinctrl子系统与gpio子系统实验-对驱动进行测试-CSDN博客

本文来解决驱动代码中申请IO失败的问题。

二. Led驱动申请IO失败的解决思路

**申请IO的时候失败大部分原因是,这个IO被其他外设占用了。**检查设备树,查找有哪些使用同一IO的设备。检查如下两方面:

(1) 检查复用,也就是 pinctl 设置(复用与电器属性配置)。

(2) gpio的使用,例如,设备树节点中如下属性:

复制代码
 led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;

三. 具体解决方法

具体检查开发板所运行的设备树文件中,Led所使用的 GPIO是否被其他设备占用了。

1. 所添加的 Led设备节点

注意:这里所使用的开发板是正点原子 nand-Flash版 ALPHA开发板。所以,所对应设备树源文件为 imx6ull-alientek-nand.dts。

前面文章添加 Led设备节点时,我将 Led设备节点信息添加到了 imx6ull-14x14-evk.dts文件中设备树的根节点下(这里imx6ull-alientek-nand.dts设备树文件最终会调用到 imx6ull-14x14-evk.dts )。

设备树根目录下添加了 gpioled设备节点:

复制代码
/* WeiWuXian/2024/01/25*/
    gpioled{
        compatible = "alientek, gpioled";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_gpioled>;
        led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
        status = "okay";
    };

&iomuxc {}节点中,添加了如下 pinctrl节点信息。

复制代码
/*WeiWuXian//2024/01/25 */
        pinctrl_gpioled: ledgrp{
            fsl,pins = <
            MX6UL_PAD_GPIO1_IO03__GPIO1_IO03   0X10B0
            >;
        };

2. 具体解决 IO申请失败问题

(1) 首先,检查 pinctrl配置(即复用与电器属性配置)

在这个实验中, LED 灯使用的 PIN 为 GPIO1_IO03 ,因此,先检查 GPIO_IO03 这个 PIN 有没 有被其他的 pinctrl 节点使用。在 imx6ull-alientek-nand.dts 中找到如下内容:

复制代码
		pinctrl_tsc: tscgrp {
			fsl,pins = <
				MX6UL_PAD_GPIO1_IO01__GPIO1_IO01	0xb0
				MX6UL_PAD_GPIO1_IO02__GPIO1_IO02	0xb0
			/*	MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0xb0  */
				MX6UL_PAD_GPIO1_IO04__GPIO1_IO04	0xb0
			>;

可以看到,pinctrl_tsc 节点是 TSC(电阻触摸屏接口)的 pinctrl 节点,从第 5 行可以看出,默认情况下 GPIO1_IO03 作为了 TSC 外设的 PIN,复用为了GPIO功能。所以,需要屏蔽掉如上的 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 这一行。

(2) 其次,检查 gpio使用。

因为本实验中,我们将 GPIO1_IO03 这个 PIN 配置为了 GPIO ,所以还需要查找一下有没有 其他的外设使用了 GPIO1_IO03 ,在 imx6ull-alientek-nand.dts 中搜索 " gpio1 3 " ,找到如下内 容:

复制代码
&tsc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_tsc>;
/*	xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; */
	measure-delay-time = <0xffff>;
	pre-charge-time = <0xfff>;
	status = "okay";
};

tsc 是 TSC 的外设节点,从第 4 行可以看出, tsc 外设也使用了 GPIO1_IO03 ,同样我们需 要将这一行屏蔽掉。然后在继续搜索 " gpio1 3 ",看看除了 LED 灯以外还有没有其他的 地方也使用了 GPIO1_IO03,找到一个屏蔽一个。没有其他设备使用 GPIO1_IO03。

接下来就是编译设备树文件,开发板重新加载新编译的设备树文件进行测试。

相关推荐
TonyLee0171 小时前
Claude Code + DeepSeek:服务器安装与使用笔记
linux·服务器·deepseek·claude code
buhuizhiyuci1 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
骇客野人1 小时前
Linux 服务器 Python 版 MCP 服务部署整体方案(适配 Claude/Cursor/自研Agent)
linux·服务器·python
小绫网络安全2 小时前
Wireshark抓包完全入门教程:从零开始掌握网络分析
arm开发·测试工具·wireshark
天疆说2 小时前
04 稳定性与性能调优实录:OOM 崩溃、并发槽位、前缀缓存与 DSpark 调参
linux·运维·缓存
星卯教育tony2 小时前
NOI Linux 2.0 服务器多用户网页桌面部署方案(腾讯云轻量Ubuntu20.04专属版 CSP复赛比赛环境搭建免安装虚拟机 )
linux·服务器·腾讯云
Forever Nore3 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
拂拉氏3 小时前
【知识讲解】 Linux权限相关知识讲解
linux·权限
Shadow(⊙o⊙)3 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0
linux·网络·tcp/ip
Chief_fly3 小时前
【Windows 下载 ARM64 deb 包 麒麟 ARM 离线安装】
arm开发·windows