• <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合

    作者:wowo 发布于:2017-8-10 22:17 分类:GPIO子系统

    按理说,kernel中gpio subsystem和pinctrl subsystem的关系应该非常清楚:

    pinctrl subsystem管理系统的所有管脚,GPIO是这些管脚的用途之一,因此gpio subsystem应该是pinctrl subsystem的client(也可叫做backend、consumer),基于pinctrl subsystem提供的功能,处理GPIO有关的逻辑。 

    不过,实?#26159;?#20917;却不是这么简单,它们之间有着较为紧密的耦合(看一看kernel中pinctrl和gpio相关的实现就知道了)。本文将对这种耦合进行一个简单的分析,解释为什么要这样设计。

    阅读全文>>

    标签: GPIO subsystem pinctrl range

    评论(1) 浏览(8500)

    linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结

    作者:wowo 发布于:2017-6-27 22:30 分类:GPIO子系统

    本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem)、gpio controller(对应的GPIO subsystem)有关的基本概念,包括pin multiplexing、pin configuration等等。本文将基于这些文章,单纯地从pin controller driver的?#23884;齲?#23631;蔽掉pinctrl core的实现细节),理解pinctrl subsystem的设计思想,并掌握pinctrl驱动的移植和实现方法。

    阅读全文>>

    标签: Linux driver GPIO subsystem pinctrl

    评论(5) 浏览(16565)

    linux内核中的GPIO系统之(2):pin control subsystem

    作者:linuxer 发布于:2014-7-26 18:24 分类:GPIO子系统

    在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况:

    (1)启动一个新的项目后,需要根 据?#24067;?#24179;台的设定进行pin control相关的编码。例如:在bootloader中建立一个大的table,描述各个引脚的配置和缺省状态。此外,由于SOC的引脚是可以复用 的,因此在各个具体的driver中,也可能会对引脚进行的配置。这些工作都是比较繁琐的工作,需要极大的耐心和细致度。

    (2)发现某个driver不能正常工作,辛辛苦苦debug后发现仅仅是因为其他的driver在初始化的过?#35752;行?#25913;了引脚的配置,导致自己的driver无法正常工作

    (3)即便是主CPU是一样的项目,但是由于外设的不同,我们也不能使用一个kernel image,而是必须要修改代码(这些代码主要是board-specific startup code)

    (4)代码不是非常的整洁,cut-and-pasted代码满天飞,linux中的冗余代码太多

    作 为一个嵌入式软件工程师,项目做多了,接触的CPU就多了,摔的跤就多了,之后自然会去思考,我们是否可以解决上面的问题呢?此外,对于基于ARM core那些SOC,虽然表面上看起来各个SOC各不相同,但是在pin control上还有很多相同的内容的,是否可以把它抽取出来,进行进一步的抽象呢?新版本中的内核(本文以3.14版本内核为例)提出了pin control subsystem来解决这些问题。

    阅读全文>>

    标签: pin control

    评论(41) 浏览(71532)

    Linux内核中的GPIO系统之(3):pin controller driver代码分析

    作者:linuxer 发布于:2014-7-22 20:37 分类:GPIO子系统

    对于一个嵌入式软件工程师,我们的软件模块经常和?#24067;?#25171;交道,pin control subsystem也不例外,它驱动的?#24067;?#21483;做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括:

    (1)pin multiplexing。基于ARM core的嵌入式处理器一般会提供丰富的功能,例如camera interface、LCD interface、USB、I2C、SPI等等。虽然处理器有几百个pin,但是这些pin还是不够分配,因此有些pin需要复用。例如:127号 GPIO可以做一个普通的GPIO控制LED,也可以配置成I2C的clock信号,也可以配置成SPI的data out信号。?#27604;唬?#36825;些功能不可能同时存在,因为?#24067;?#20449;号只有一个。

    (2)pin configuration。这些配置?#38382;?#21253;括:pull-up/down电阻的设定, tri-state设定,drive-strength的设定。

    本 文主要描述pin control subsystem中的low level driver,也就是驱动pin controller的driver。具体的?#24067;?#36873;用的是S3C2416的?#24067;?#24179;台。既然是代码分析,本文不是非常多的描述框架性的内容,关于整个pin control subsystem软件结构的描述请参考TODO。

    阅读本文需要device tree的知识,建议首先阅读device tree代码分析

    阅读全文>>

    标签: driver pin controller

    评论(42) 浏览(60941)

    linux内核中的GPIO系统之(1):软件框架

    作者:linuxer 发布于:2014-7-21 14:40 分类:GPIO子系统

    作为一个工作多年的系统工程师,免不了做两件事情?#21495;?#35757;新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非 常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的?#24067;?#27604;较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的 软件思想是每个嵌入式软件工程师需要掌握的内容。

    我更倾向使用GPIO系统这个名字来代替GPIO driver这个名字,GPIO driver仅仅包含了pin signal状态控制和读取的内容,而GPIO系统包括了pin multiplexing、pin configuration、GPIO control、GPIO interrupt control等内容。本文主要是以3.14内核作为例子,讲述linux kernel中GPIO系统的软件框架。

    阅读全文>>

    标签: GPIO 软件框架

    评论(48) 浏览(45292)

    Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog
    连码三全中是什么
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>