0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从Linux平台来研究GPIO软件框架

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:Jasonangel 2023-09-28 16:05 次阅读

嵌入式 Linux 平台

先总结一句:不管是单片机还是高端 ARM 平台,最底层都是寄存器硬件之上就是寄存器,任何封装形式到最底层就是操作寄存器。

对于上了 Linux 系统的平台,我们有其他方法,让它可以像单片机一样简单的操作 IO 口,这得益于各路 Linux 大神对系统底层的封装。

在 Linux 中有 pinctrl 和 gpio 子系统,它们提供了 API 接口给你使用,让你方便的操控 GPIO 口。

Linux 内核针对 PIN 的配置推出了 pinctrl 子系统,对 GPIO 的配置推出了 gpio 子系统。

上面这句话很重要,我详细解释一下:这里是将 pin 脚和控制 IO 口输入输出分离。

pinctrl 子系统管理 200 个 IO 口的上拉下拉电阻电流驱动能力,是硬件底层的存在。如果 pinctrl 将某个 pin 脚初始化成了普通GPIO 而不是 IIC 或者 SPI,那么接下来我们就可以使用 gpio 子系统的 API 去操作 IO 口输出高低电平。

传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置 方式比较繁琐、而且容易出问题(比如 pin 功能冲突)。pinctrl子系统就是为了解决这个问题而引入的,pinctrl 子系统主要工作内容如下:

①、获取设备树中 pin 信息

②、根据获取到的 pin 信息来设置 pin 的复用功能

③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。

对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可,其他的初始化工作均由 pinctrl 子系统来完成,pinctrl子系统源码目录为 drivers/pinctrl。

注意,pinctrl 子系统也是一个标准的 platform 驱动,当设备和驱动匹配的时候,probe 函数会执行,只是 pinctrl 子系统采用的arch_initcall 去声明,而不是module_init(device_initcall),所以在系统起来的时候它会先加载。(具体原因看下面这篇文章)

Linux 驱动挂载顺序分析

图片

gpio

可以看出其实两者软件框架一样的,主要是 HW Abstract layer 具体实现不一样。

你以为两者是分离的,实际上不是的,gpio 子系统是基于 pinctrl 子系统的,gpio 的 API 接口的实现很多都是基于 pinctrl子系统的函数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4776

    文章

    17320

    浏览量

    277897
  • Linux
    +关注

    关注

    85

    文章

    10263

    浏览量

    205820
  • 软件
    +关注

    关注

    65

    文章

    3985

    浏览量

    83985
  • GPIO
    +关注

    关注

    15

    文章

    991

    浏览量

    49753
  • 系统
    +关注

    关注

    1

    文章

    887

    浏览量

    20852
收藏 人收藏

    评论

    相关推荐

    需求的角度去理解Linux系列:总线、设备和驱动

    Linux平台上的各个子系统,如设备驱动模型、input子系统、I2C总线、frame buffer驱动等等都属于软件框架,它是针对特定的硬件体系需求以面向
    发表于 03-11 14:45

    Windows平台迁移到Linux平台怎么实现?

    Windows平台迁移到Linux平台。所以我们正在尝试为先前的块设计重新生成位文件。但是我们遇到了异常错误。是否有任何过程编译这个。请建议我这样做
    发表于 08-28 12:38

    Linux系统的功耗研究

    Linux正在嵌入式领域发挥着越来越重要的作用。对于嵌入式设备尤其是移动设备来说,功耗是系统的重要指标,系统设计的重要目标之一就是要尽可能地降低功耗。现在,对功耗的研究主要集中在硬件解决方案上,而软件研究方...
    发表于 11-04 06:45

    Linux 驱动 = 软件框架 + 硬件操作

    Linux 驱动 = 软件框架 + 硬件操作  驱动程序依赖于 Linux 内核,你为开发板 A 开发驱动,那就先在 Ubuntu 中得到、 配置、编译开发板 A 所使用的 Linux 内核
    发表于 12-17 07:11

    如何计算i.MX8MQ平台上某个GPIO引脚的Linux GPIO编号?

    平台上某个 GPIO 引脚的 Linux GPIO 编号? 例如,i.MX8MQ
    发表于 05-06 07:41

    基于Linux的XFRM框架下IPSec VPN的研究

    Linux最新内核平台的 IPSec VPN网关系统。给出Linux 的XFRM 框架结构和函数调用结构的表述,其中包括XFRM框
    发表于 04-13 09:31 31次下载

    基于Linux的实时平台研究

    Linux 操作系统的实时平台的技术研究和实现方法。所研究的实时平台以X86 体系PC 为硬件环境,Linux 操作系统的标准内核加载RTAI 模块为软件环境,可为构建实时
    发表于 06-01 10:31 11次下载

    嵌入式Linux软件测试框架研究

    Linux 软件是最难测试的一类软件。在测试过程中通过使用有效的测试框架,可以显著提高测试效率,最终确保软件质量。通过对嵌入式软件测试方法、测试工具与测试流程的深入
    发表于 06-07 17:14 29次下载

    第8章 Linux软件开发平台软件配置

    Linux软件开发平台软件配置 8.1 
    发表于 04-11 14:38 3次下载

    TI达芬奇软件框架技术的研究与改进

    软件框架技术的研究与改进
    发表于 10-21 09:23 1次下载
    TI达芬奇<b>软件</b><b>框架</b>技术的<b>研究</b>与改进

    嵌入式Linux驱动开发基础到框架

    Linux驱动书中笔者最推崇宋宝华的《Linux设备驱动开发详解》,但他完全可以更进一步上升到驱动框架个例(比如USBwifi模块驱动)和应用层调用。有些书c语言基础谈起,真是莫名其妙
    发表于 11-01 16:58 13次下载
    嵌入式<b>Linux</b>驱动开发<b>从</b>基础到<b>框架</b>

    Linux DMA Engine框架的介绍

    设备驱动程序在Linux中使用DMA。 这包括内存分配,缓存控制和DMA设备控制。 详细介绍了
    的头像 发表于 11-23 06:29 5507次阅读

    Linux驱动分析之RTC框架

    Linux内核启动时,它会RTC中读取时间与日期,作为基准值。然后通过软件维护系统时间和日期。Linux系统中提供了RTC核心层,对于驱动开发者而言,操作起来就变得很简单了。我们来看看整体框架
    的头像 发表于 05-26 15:12 411次阅读
    <b>Linux</b>驱动分析之RTC<b>框架</b>

    一文搞懂Linux pinctrl/gpio子系统

    linux-3.13以上,本系列主要介绍 GPIO的一些基本知识,驱动操作GPIO的接口,应用层通过sysfs操作GPIO的接口,GPIO一些debug信息查看,以及对高通相关
    发表于 06-09 09:52 724次阅读

    硬件软件角度理解Gadget框架

    硬件软件角度理解 Gadget 框架 USB 传输的核心是 endpoint,使用 endpoint 可以收发数据。在 endpoint 之上,就可以模拟 USB 串口、USB 触碰屏
    的头像 发表于 07-13 11:32 312次阅读
    <b>从</b>硬件<b>软件</b>角度理解Gadget<b>框架</b>