作者:wowo 发布于:2017-9-1 10:46
分类:电源管理子系统
大家都知道,复杂IC内部有很多具有独立功能的硬件模块,例如CPU cores、GPU
cores、USB控制器、MMC控制器、等等,出于功耗、稳定性等方面的考虑,有些IC在内部为这些硬件模块设计了复位信号(reset
signals),软件可通过寄存器(一般1个bit控制1个硬件)控制这些硬件模块的复位状态。
Linux kernel为了方便设备驱动的编写,抽象出一个简单的软件框架----reset
framework,为reset的provider提供统一的reset资源管理手段,并为reset的consumer(各个硬件模块)提供便捷、统一的复位控制API。
reset
framework的思路、实现和使用都非常简单、易懂(参考kernel有关的API--include/linux/reset-controller.h、include/linux/reset.h可知),不过麻雀虽小,五脏俱全,通过它可以加深对Linux
kernel的设备模型、驱动框架、分层设计、provider/consumer等设计思想的理解,因此本文将对其进行一个简单的罗列和总结。
作者:wowo 发布于:2017-5-18 21:56
分类:Linux内核分析
本文将从provider的角度,介绍怎样在linux kernel dmaengine的框架下,编写dma controller驱动。
作者:wowo 发布于:2017-3-30 22:01
分类:Linux内核分析
前面文章介绍“Linux MMC
framework”的时候,涉及到了MMC数据传输,进而不可避免地遭遇了DMA(Direct Memory
Access)。因而,择日不如撞日,就开几篇文章介绍Linux的DMA Engine framework吧。
本文是DMA Engine framework分析文章的第一篇,主要介绍DMA
controller的概念、术语(从硬件的角度,大部分翻译自kernel的document[1])。之后,会分别从Provider(DMA
controller驱动)和Consumer(其它驱动怎么使用DMA传输数据)两个角度,介绍Linux DMA engine有关的技术细节。
作者:wowo 发布于:2017-1-10 22:24
分类:通信类协议
由[1]中MMC、SD、SDIO的介绍可知,这三种技术都是起源于MMC技术,有很多共性,因此Linux kernel统一使用MMC framework管理所有和这三种技术有关的设备。
本文将基于[1]对MMC技术的介绍,学习Linux kernel MMC framework的软件架构。
作者:wowo 发布于:2016-12-12 22:04
分类:通信类协议
串口设备(serial or uart,后面不再区分)是TTY设备的一种,Linux kernel为了方便串口驱动的开发,在TTY
framework的基础上,封装了一层串口框架(serial
framework)。该框架尽可能的屏蔽了TTY有关的技术细节(比较难懂),驱动工程师在编写串口驱动的时候,只需要把精力放在串口以及串口控制器本身即可。
本文将通过对serial framework的简单分析,理解上面的概念,并掌握基于该框架编写串口驱动的方法和步骤。
作者:wowo 发布于:2016-11-16 22:09
分类:X Project
本文是“X
Project”串口驱动开发的第二篇,将以“bubblegum-96”开发板为例,介绍在linux serial
framework的框架下,编写串口driver以及console driver的方法和步骤(暂不涉及实现细节)。
注1:有关串口、TTY、console等概念,可参考本站“TTY子系统[1]”的文章。Linux serial
framework的分析,会在后续的文档中补充(这里故意颠倒,以便让大家理解kernel framework的妙处)。
作者:linuxer 发布于:2016-4-21 19:23
分类:电源管理子系统
之前,wowo同学已经发表了关于CCF(Common Clock Framework)的三份文档,相信大家对CCF有一定的了解了,本文就是在阅读那三份文档的基础上,针对Linux 4.4.6内核的内核代码实现,记录自己对CCF的理解,并对CCF进行系统结构层面的归纳和整理。
本文内容包括三个部分,第二章给出了整个CCF相关的block diagram图,随后在第三章对各个模块进行功能层面的描述。最后,第四章给出了各个block之间的接口描述。
另外,在阅读CCF代码的过程中,我准备用两份文档来分享我对CCF的理解。这一份是系统结构,另外一份是逻辑解析。
作者:wowo 发布于:2016-2-14 22:01
分类:通信类协议
I2C协议是嵌入式系统中广泛使用的一类通信协议,主要用于CPU和各种外设之间的低速数据通信。Linux kernel使用I2C
framework抽象、管理相应的资源,并以各种形式,向各类使用者提供API。另外,作为总线(bus)的一种,I2C framework的实现体现了linux设备模型的精髓,值得研究与学习。这就是攥写“Linux
I2C framework”系列文章的缘由和目的。
按照分析各类framework的老规矩,蜗蜗会从4个角度分4篇文章介绍I2C framework:
1)Linux I2C framework的整体介绍,包括基础知识、软件框架、API汇整等。就是本文。
2)从Provider的角度,介绍怎么借助I2C framework管理I2C相关的SOC资源。换句话说,就是怎么编写一个I2C
driver。具体可参考“Linux I2C framework(2)_I2C provider”。
3)从Consumer的角度,介绍I2C framework为使用者提供了哪些功能、哪些API,以及怎样利用I2C
framework编写程序。具体可参考“Linux I2C framework(3)_I2C consumer”。
4)从内部实现的角度,分析I2C framework的实现逻辑。具体可参考“Linux I2C framework(4)_I2C
core”。
作者:linuxer 发布于:2015-5-21 19:26
分类:时间子系统
在内核中,有cpuidle
framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态。当然
CPU的idle状态有深有浅,当CPU睡的比较深入的时候,有可能会关闭本地的timer硬件。这样就会引入一个很有意思的问题:local
timer将无法唤醒CPU,该cpu上的所有的software timer将无法唤醒cpu。tick broadcast
framework就是用来解决这个问题的。
本文中的代码来自linux kernel 4.0。
作者:wowo 发布于:2015-4-16 22:18
分类:电源管理子系统
本文从regulator driver的角度,描述怎样基于regulator framework编写regulator驱动。同时,以此为契机,学习、理解regulator有关的物理特性,以便能够更好的使用它们。
1 2