1、内核提供了 pinctrl  和  gpio 子系统用于 gpio驱动。linux是一个庞大而又完善的系统  不可能 让你用裸板开发的方式 去 操作 gpio.

该系统是按照面向对象的设计思想设计的。

pinctrl 子系统主要工作内容如下:
①、获取设备树中 pin 信息。
②、根据获取到的 pin 信息来设置 pin 的复用功能
③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。
对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可,其他的初始
化工作均由 pinctrl 子系统来完成,pinctrl 子系统源码目录为 drivers/pinctrl。
要使用 pinctrl 子系统,我们需要在设备树里面设置 PIN 的配置信息,毕竟 pinctrl 子系统要
根据你提供的信息来配置 PIN 功能,一般会在设备树里面创建一个节点来描述 PIN 的配置信
息,这部分代码是由半导体厂商 软件工程师 写了这部分代码 由kernel 进行加载的。
gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO
为输入输出,读取 GPIO 的值等。
Linux 内核向驱动开发者屏蔽掉了 GPIO 的设置过程,极大的方便了驱动开发者使用 GPIO。
,设置好设备树以后就可以使用 gpio 子系统提供 的 API 函数来操作指定 的
GPIO,gpio 子系统向驱动开发人员屏蔽了具体的读写寄存器过程。这就是驱动分层与分离
的好处,大家各司其职,做好自己的本职工作即可。

iomuxc 节点的 imx6ul-evk 子节点下创建一个名为“pinctrl_led”的子节点
pinctrl_led: ledgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
>;
};
添加 LED 设备节点
在根节点“/”下创建 LED 灯节点,节点名为“gpioled”,
gpioled {
#address-cells = <1>;
#size-cells = <1>;
compatible = "atkalpha-gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led>;
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
检查 PIN 有没有被其他外设使用包括两个方
面:
①、检查 pinctrl 设置。
②、如果这个 PIN 配置为 GPIO 的话,检查这个 GPIO 有没有被别的外设使用
480 pinctrl_tsc: tscgrp {
481 fsl,pins = <
482 MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0
483 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0
484 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0
485 MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0
486 >;
487 };
检查 GPIO_IO03 这个 PIN 有没
有被其他的 pinctrl 节点使用 
和 C 语言一样,在要
屏蔽的内容前后加上“/*”和“*/”符号即可。
在 imx6ull-alientek-emmc.dts 中搜索 “gpio1 3”
723 &tsc {
724 pinctrl-names = "default";
725 pinctrl-0 = <&pinctrl_tsc>;
726 xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
727 measure-delay-time = <0xffff>;
728 pre-charge-time = <0xfff>;
729 status = "okay";
730 };

tsc 外设也使用了 GPIO1_IO03,同样我们需
要将这一行屏蔽掉。然后在继续搜索“gpio1 3”,看看除了本章的 LED 灯以外还有没有其他的
地方也使用了 GPIO1_IO03,找到一个屏蔽一个。
如果  cat  /sys/firmware/devicetree/base 可以看到节点信息  gpioled 子节点
那么 设备树修改成功。

pinctrl 和 gpio 子系统 终极总结相关推荐

  1. 使用pinctrl 和 gpio 子系统的字符设备驱动

    pinctrl 和 gpio 子系统的字符设备驱动 一. 修改设备树文件 二. LED 灯驱动程序编写 三.makefile 四.应用层代码 运行测试 一. 修改设备树文件 打开 imx6ull-al ...

  2. pinctrl 和 gpio 子系统

    内容来自<[正点原子]I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf> 目录 pinctrl 子系统 pinctrl 子系统简介 I.MX6ULL 的 pinctrl 子系统 ...

  3. linux系统中pinctrl 和gpio子系统使用方法(教你点灯)

    如何使用pinctrl和gpio子系统点亮led pinctrl 子系统作用 设备树PIN配置 gpio子系统介绍 配置gpio相关 编写驱动程序 编写应用程序 pinctrl 子系统作用 pinct ...

  4. pinctrl和gpio子系统

    目录 1.pinctrl子系统 1)pinctrl子系统简介 2)I.MX6ULL的的pinctrl子系统驱动 3)设备树中添加pinctrl节点模板 2.gpio子系统 1)gpio子系统简介 2) ...

  5. 【正点原子Linux连载】第四十五章 pinctrl和gpio子系统实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  6. 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. 以leds-gpio.c为例,浅谈device-tree、pinctrl和GPIO子系统

    一.前言 leds-gpio.c是内核源码drivers/leds/leds-gpio.c目录下的一个led驱动程序的例程(说明书位于Documentation/devicetree/bindings ...

  8. RK3399—pinctrl和gpio子系统

    1. 前言   记得以前在学习51单片机时,要控制一个GPIO输出高.低电平,就得根据对应IO寄存器每一bit的作用和含义进行配置,时钟.速率.方向.上下拉等等.51单片机是一款8位MCU,在配置寄存 ...

  9. 嵌入式Linux驱动开发(六)pinctrl和gpio子系统实验

    **目的:**简化GPIO驱动开发. ***注意点:***每当配置一个PIN为GPIO时,需要确定该GPIO是否有被别的外设使用.-----------在vscode里对DTS搜索 1. pinctr ...

最新文章

  1. Java基础之一组有用的类——生成日期和时间(TryDateFormats)
  2. mongoDB删除某个字段(key)
  3. easyui datagrid 后台分页,前端如何处理
  4. 1102 Invert a Binary Tree(甲级)
  5. 保留小数点后三位_【Meta分析】Stata制作森林图时,如何保留三位小数?
  6. 【WPF学习】第五十章 故事板
  7. java 命名参数动态替换_使用Kettle的命名参数动态执行作业
  8. AMFPHP基本安全问题
  9. ros学习-中国大学MOOC---《机器人操作系统入门》课程讲义
  10. Latex排版论文——傻瓜式操作一晚排出毕业论文
  11. 读书印记 - 《南北战争三百年》
  12. 教你如何写出高效整洁的 css 代码——css优化(转载)
  13. 情报研判分析系统开发,可视化大数据研判平台建设
  14. 小猪的Python学习之旅 —— 14.项目实战:抓取豆瓣音乐Top 250数据存到Excel中
  15. WINCE6.0下载地址
  16. Linux操作系统 df命令
  17. 图片尺寸压缩和图片质量压缩
  18. Echarts实现男女比例图表
  19. 使用json.dumps()处理中文时如何将内容存储为中文而不是unicode转义
  20. websocket的封装和使用

热门文章

  1. Three.js 模型闪烁重影(深度问题)
  2. kodi资源_kodi使用smb看局域网资源的几个过坑小技巧
  3. 英语四级常用单词(词频分析+爬虫翻译+csv文件保存)
  4. 抖音里面html相册代码大全,分享一下抖音上火的程序员女朋友相册代码
  5. 历届试题_DNA比对
  6. LeetCode刷题专栏第一篇--思维导图时间安排
  7. 计算机学院新闻部纳新稿子,社团纳新演讲稿
  8. 使用谷歌浏览器扩展查排名(开发谷歌浏览器扩展)
  9. Google排名新算法之 三
  10. 惠普(HP)打印机驱动安装+答题卡尺寸设置: LaserJet MFP M436n(史上最详细操作演示)