• <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系?#25345;?):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) 浏览(73683)

    Linux内核中的GPIO系?#25345;?):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等?#21462;?#34429;然处理器有几百个pin,但是这些pin还是不够分配,因此?#34892;﹑in需要复用。例如: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) 浏览(63421)

    linux内核中的GPIO系?#25345;?):软件框架

    作者: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) 浏览(47195)

    ACCESS_ONCE宏定义的解释

    作者:linuxer 发布于:2014-7-17 12:34 分类:进程管理

    在阅读RCU代码的时候遇到了ACCESS_ONCE这个宏定义,感觉比较有意思,因此独立出来一篇文档来描述它。

    阅读全文>>

    标签: ACCESS_ONCE

    评论(0) 浏览(12274)

    智慧家庭之我见_多媒体篇

    作者:wowo 发布于:2014-7-9 9:01 分类:技术漫谈

    引子:这是一个移动互联的时代,最后的胜者,一定具备超强的整合能力。 

    蜗蜗关注智慧家庭由来已久,只是这些年从事着完全不同的行业,道不同,不相谋。可能是传说中的七年之痒吧,终于决定对自己的工作以及职业规划做出一个变动。以此为契机,将自己对智慧家庭的一些思考,记录于此。可能会很?#23383;桑?#24076;望各位看官不要见笑,并不吝赐教。

    本文主要?#23884;?#26234;慧家庭中的多媒体设备的思考。何为多媒体设?#25913;兀?#30475;看下面的事物:智能路由器,智能?#21482;琍C,?#22987;?#26412;电脑,平板电脑,智能电视?#26657;?#26234;能电视,智能手表,云存储。相信大家都已经很熟悉了,它们就是本文谈论的对象。它们的本质,就是以满足人?#23884;?#27807;通、影音、?#34583;貳?#20241;闲、娱乐为目的,在性能和便携性(重量和大小)之间摇摆与妥协。

    阅读全文>>

    标签: 智慧家庭 整合 多媒体 plan9

    评论(13) 浏览(5716)

    GIC驱动代码分析(废弃)

    作者:linuxer 发布于:2014-7-4 14:34 分类:中断子系统

    GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。

    具体的分析方法是按照source code为索引,逐段分析。对于每一段分析的代码,力求做到每个细节都清清楚楚。这不可避免要引入很多对GIC的?#24067;?#25551;述,此外,具体GIC中断控制器的 驱动代码和linux kernel中断子系统的交互也会描述,但本文不会描述linux kernel的generic interrupt subsystem。

    本文以OMAP4460这款SOC为例,OMAP4460内?#32771;?#25104;了GIC的功能。具体的linux kernel的版本是linux3.14.。

    阅读全文>>

    标签: GIC 代码分析

    评论(19) 浏览(27167)

    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>
  • 足球半全场胜负 新疆福利彩票25选7走势图 国际彩票快乐赛车 皇家赛马会女士 3d如何判断组三组六 黑子的篮球 辽宁体彩快乐扑克玩法 澳门梭哈游戏怎么玩 时时彩梭哈计算器 双色球开奖直播17085 网上哪里可以购买江西快三 两码中特期期准永两码中特期期准 天津11选5走势图前三基本走势图 排列三走势图带连线坐标 云南快乐十分二十期开