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子系统的函数。

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

    关注

    4982

    文章

    18281

    浏览量

    288463
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • 软件
    +关注

    关注

    67

    文章

    4348

    浏览量

    85622
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50570
  • 系统
    +关注

    关注

    1

    文章

    981

    浏览量

    21036
收藏 人收藏

    评论

    相关推荐

    一文搞懂Linux pinctrl/gpio子系统

    注: 所有文章基于linux-3.13以上,本系列主要介绍 GPIO的一些基本知识,驱动操作GPIO的接口,应用层通过sysfs操作GPIO的接口,
    发表于 06-09 09:52 1519次阅读

    基于J2EE的数据通用性操作框架研究与实现

    基于J2EE的数据通用性操作框架研究与实现数据操作是基于J2EE的多级应用开发中常见而又具有通用性的重要一部分,而框架技术的研究可以实现软件
    发表于 06-17 09:35

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

    %的开发工作量,而你只需要完成20%的开发工作量。Linux平台上的各个子系统,如设备驱动模型、input子系统、I2C总线、frame buffer驱动等等都属于软件框架,它是针对特
    发表于 03-11 14:45

    需求的角度去理解嵌入式Linux:总线、设备和驱动

    应用消息处理、UI控件显示和处理、资源管理等等。软件框架带来的好处就是对于解决某个领域问题,框架会帮你完成80%的开发工作量,而你只需要完成20%的开发工作量。Linux
    发表于 12-11 16:34

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

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

    Linux系统的功耗研究

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

    如何利用Boot to Qt软件实现Qt5呢

    关键词:摘要:Qt是一个领先的跨平台应用和UI 开发框架(Framework),使用标准C++,适用于桌面,嵌入式和移动平台。本文着重就利用Boot to Qt软件
    发表于 11-04 06:24

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

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

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

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

    《SoC底层软件低功耗系统设计与实现》基于Linux专门讲解软件低功耗框架和设计的书籍

    和细节都可以参考。 内容充实 基于Linux,讲解了其涉及低功耗各个框架模块的设计和实现,后面的扩展知识点,低功耗问题定位及优化思路都是干货内容,都是工程实践相关的内容,内容比较充实。 目录也可以看出
    发表于 09-08 23:38

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

    针对现有 IPSec VPN 系统在效率和可靠性方面存在的问题,提出并改进了一种基于Linux最新内核平台的 IPSec VPN网关系统。给出Linux 的XFRM 框架结构和函数调用
    发表于 04-13 09:31 31次下载

    基于Linux的实时平台研究

    主要介绍了一个基于Linux 操作系统的实时平台的技术研究和实现方法。所研究的实时平台以X86 体系PC 为硬件环境,
    发表于 06-01 10:31 11次下载

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

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

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

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

    嵌入式Linux LED GPIO

    文章目录前言LED终端脚本C语言GPIO子系统微信公众号前言这是前2篇:嵌入式Linux i.MX开发板嵌入式Linux NFS嵌入式Linux 交叉编译工具链
    发表于 11-01 17:05 11次下载
    嵌入式<b class='flag-5'>Linux</b> LED <b class='flag-5'>GPIO</b>