<![CDATA[蜗窝科技]]> http://hnrongyi.com/ zh-cn www.emlog.net linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合 http://hnrongyi.com/gpio_subsystem/pinctrl-and-gpio.html 1分pk10 按理说,kernel中gpio subsystem和pinctrl subsystem的关系应该非常清楚:

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

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

阅读全文>>]]>
Thu, 10 Aug 2017 14:17:49 +0000 wowo http://hnrongyi.com/gpio_subsystem/pinctrl-and-gpio.html
linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结 http://hnrongyi.com/gpio_subsystem/pinctrl-driver-summary.html [1][2][3]介绍了pin controller(对应的pin controller subsystem)、gpio controller(对应的GPIO subsystem)有关的基本概念,包括pin multiplexing、pin configuration等等。本文将基于这些文章,单纯地从pin controller driver的角度(屏蔽掉pinctrl core的实现细节),理解pinctrl subsystem的设计思想,并掌握pinctrl驱动的移植和实现方法。 阅读全文>>]]> Tue, 27 Jun 2017 14:30:11 +0000 wowo http://hnrongyi.com/gpio_subsystem/pinctrl-driver-summary.html linux内核中的GPIO系统之(2):pin control subsystem http://hnrongyi.com/gpio_subsystem/pin-control-subsystem.html 在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况:

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

1分pk10 (2)发现某个driver不能正常工作,辛辛苦苦debug后发现仅仅是因为其他的driver在初始化的过程中修改了引脚的配置,导致自己的driver无法正常工作

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

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

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

阅读全文>>]]>
Sat, 26 Jul 2014 10:24:15 +0000 linuxer http://hnrongyi.com/gpio_subsystem/pin-control-subsystem.html
Linux内核中的GPIO系统之(3):pin controller driver代码分析 http://hnrongyi.com/gpio_subsystem/pin-controller-driver.html 1分pk10 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,它驱动的硬件叫做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信号。当然,这些功能不可能同时存在,因为硬件信号只有一个。

1分pk10 (2)pin configuration。这些配置参数包括:pull-up/down电阻的设定, tri-state设定,drive-strength的设定。

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

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

阅读全文>>]]>
Tue, 22 Jul 2014 12:37:33 +0000 linuxer http://hnrongyi.com/gpio_subsystem/pin-controller-driver.html
linux内核中的GPIO系统之(1):软件框架 http://hnrongyi.com/gpio_subsystem/io-port-control.html 1分pk10 作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非 常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的 软件思想是每个嵌入式软件工程师需要掌握的内容。

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

阅读全文>>]]>
Mon, 21 Jul 2014 06:40:58 +0000 linuxer http://hnrongyi.com/gpio_subsystem/io-port-control.html