<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[蜗窝科技]]></title> 
<description><![CDATA[慢下来，享受技术。]]></description>
<link>http://www.wowotech.net/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
	<title>linux内核中的GPIO系统之（5）：gpio subsysem和pinctrl subsystem之间的耦合</title>
	<link>http://www.wowotech.net/gpio_subsystem/pinctrl-and-gpio.html</link>
	<description><![CDATA[<p>
	按理说，kernel中gpio subsystem和pinctrl subsystem的关系应该非常清楚：
</p>
<blockquote>
	<p>
		pinctrl subsystem管理系统的所有管脚，GPIO是这些管脚的用途之一，因此gpio subsystem应该是pinctrl subsystem的client（也可叫做backend、consumer），基于pinctrl subsystem提供的功能，处理GPIO有关的逻辑。&nbsp;
	</p>
</blockquote>
<p>
	不过，实际情况却不是这么简单，它们之间有着较为紧密的耦合（看一看kernel中pinctrl和gpio相关的实现就知道了）。本文将对这种耦合进行一个简单的分析，解释为什么要这样设计。
</p> <a href="http://www.wowotech.net/gpio_subsystem/pinctrl-and-gpio.html">阅读全文&gt;&gt;</a>]]></description>
	<pubDate>Thu, 10 Aug 2017 14:17:49 +0000</pubDate>
	<author>wowo</author>
	<guid>http://www.wowotech.net/gpio_subsystem/pinctrl-and-gpio.html</guid>

</item>
<item>
	<title>linux内核中的GPIO系统之（4）：pinctrl驱动的理解和总结</title>
	<link>http://www.wowotech.net/gpio_subsystem/pinctrl-driver-summary.html</link>
	<description><![CDATA[本站之前的三篇文章<sup><span style="font-size:x-small;">[1][2][3]</span></sup>介绍了pin controller（对应的pin controller subsystem）、gpio controller（对应的GPIO subsystem）有关的基本概念，包括pin multiplexing、pin configuration等等。本文将基于这些文章，单纯地从pin controller driver的角度（屏蔽掉pinctrl core的实现细节），理解pinctrl subsystem的设计思想，并掌握pinctrl驱动的移植和实现方法。 <a href="http://www.wowotech.net/gpio_subsystem/pinctrl-driver-summary.html">阅读全文&gt;&gt;</a>]]></description>
	<pubDate>Tue, 27 Jun 2017 14:30:11 +0000</pubDate>
	<author>wowo</author>
	<guid>http://www.wowotech.net/gpio_subsystem/pinctrl-driver-summary.html</guid>

</item>
<item>
	<title>linux内核中的GPIO系统之（2）：pin control subsystem</title>
	<link>http://www.wowotech.net/gpio_subsystem/pin-control-subsystem.html</link>
	<description><![CDATA[<p>
	在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况：
</p>
<p>
	（1）启动一个新的项目后，需要根
据硬件平台的设定进行pin 
control相关的编码。例如：在bootloader中建立一个大的table，描述各个引脚的配置和缺省状态。此外，由于SOC的引脚是可以复用
的，因此在各个具体的driver中，也可能会对引脚进行的配置。这些工作都是比较繁琐的工作，需要极大的耐心和细致度。
</p>
<p>
	（2）发现某个driver不能正常工作，辛辛苦苦debug后发现仅仅是因为其他的driver在初始化的过程中修改了引脚的配置，导致自己的driver无法正常工作
</p>
<p>
	（3）即便是主CPU是一样的项目，但是由于外设的不同，我们也不能使用一个kernel image，而是必须要修改代码（这些代码主要是board-specific startup code）
</p>
<p>
	（4）代码不是非常的整洁，cut-and-pasted代码满天飞，linux中的冗余代码太多
</p>
<p>
	作
为一个嵌入式软件工程师，项目做多了，接触的CPU就多了，摔的跤就多了，之后自然会去思考，我们是否可以解决上面的问题呢？此外，对于基于ARM 
core那些SOC，虽然表面上看起来各个SOC各不相同，但是在pin 
control上还有很多相同的内容的，是否可以把它抽取出来，进行进一步的抽象呢？新版本中的内核（本文以3.14版本内核为例）提出了pin 
control subsystem来解决这些问题。
</p> <a href="http://www.wowotech.net/gpio_subsystem/pin-control-subsystem.html">阅读全文&gt;&gt;</a>]]></description>
	<pubDate>Sat, 26 Jul 2014 10:24:15 +0000</pubDate>
	<author>linuxer</author>
	<guid>http://www.wowotech.net/gpio_subsystem/pin-control-subsystem.html</guid>

</item>
<item>
	<title>Linux内核中的GPIO系统之（3）：pin controller driver代码分析</title>
	<link>http://www.wowotech.net/gpio_subsystem/pin-controller-driver.html</link>
	<description><![CDATA[<p>
	对于一个嵌入式软件工程师，我们的软件模块经常和硬件打交道，pin control subsystem也不例外，它驱动的硬件叫做pin 
controller（一般ARM soc的datasheet会把pin controller的内容放入GPIO 
controller的章节中），主要功能包括：
</p>
<p>
	（1）pin multiplexing。基于ARM 
core的嵌入式处理器一般会提供丰富的功能，例如camera interface、LCD 
interface、USB、I2C、SPI等等。虽然处理器有几百个pin，但是这些pin还是不够分配，因此有些pin需要复用。例如：127号
GPIO可以做一个普通的GPIO控制LED，也可以配置成I2C的clock信号，也可以配置成SPI的data 
out信号。当然，这些功能不可能同时存在，因为硬件信号只有一个。
</p>
<p>
	（2）pin configuration。这些配置参数包括：pull-up/down电阻的设定， tri-state设定，drive-strength的设定。
</p>
<p>
	本
文主要描述pin control subsystem中的low level driver，也就是驱动pin 
controller的driver。具体的硬件选用的是S3C2416的硬件平台。既然是代码分析，本文不是非常多的描述框架性的内容，关于整个pin
 control subsystem软件结构的描述请参考TODO。
</p>
<p>
	阅读本文需要device tree的知识，建议首先阅读<a href="http://www.wowotech.net/linux_kenrel/dt-code-analysis.html">device tree代码分析</a>。
</p> <a href="http://www.wowotech.net/gpio_subsystem/pin-controller-driver.html">阅读全文&gt;&gt;</a>]]></description>
	<pubDate>Tue, 22 Jul 2014 12:37:33 +0000</pubDate>
	<author>linuxer</author>
	<guid>http://www.wowotech.net/gpio_subsystem/pin-controller-driver.html</guid>

</item>
<item>
	<title>linux内核中的GPIO系统之（1）：软件框架</title>
	<link>http://www.wowotech.net/gpio_subsystem/io-port-control.html</link>
	<description><![CDATA[<p>
	作为一个工作多年的系统工程师，免不了做两件事情：培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生，一般在开始的时候总是分配一些非
常简单的任务，例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO 
ports的章节都是比较简单的，非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单，没有复杂的协议，不过，对于软件抽象而言，其分层次的
软件思想是每个嵌入式软件工程师需要掌握的内容。
</p>
<p>
	我更倾向使用GPIO系统这个名字来代替GPIO driver这个名字，GPIO 
driver仅仅包含了pin signal状态控制和读取的内容，而GPIO系统包括了pin multiplexing、pin 
configuration、GPIO control、GPIO interrupt 
control等内容。本文主要是以3.14内核作为例子，讲述linux kernel中GPIO系统的软件框架。
</p> <a href="http://www.wowotech.net/gpio_subsystem/io-port-control.html">阅读全文&gt;&gt;</a>]]></description>
	<pubDate>Mon, 21 Jul 2014 06:40:58 +0000</pubDate>
	<author>linuxer</author>
	<guid>http://www.wowotech.net/gpio_subsystem/io-port-control.html</guid>

</item></channel>
</rss>