Linux PWM framework(1)_简介和API描述

作者:wowo 发布于:2015-10-11 15:45 分类:通信类协议

PWM是Pulse Width Modulation(脉冲宽度调制)的缩写,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其本质是一种对模拟信号电平进行数字编码的方法。在嵌入式设备中,PWM多用于控制马达、LED、振动器等模拟器件。

PWM framework是kernel为了方便PWM driver开发、PWM使用而抽象出来的一套通用API,之所以要分析该framework,原因如下:

1)PWM接口,本质上一种通信协议,和I2C、SPI、USB、WIFI等没有任何差别。因此,本文将会是kernel通信协议有关framework的分析文章的第一篇。

2)它太简单了!但是,虽然简单,思路却大同小异,因而非常适合做第一篇。

3)我计划整理显示子系统的分析文章,而PWM,是显示子系统中最基础的那一个。

闲话少说,言归正传!

阅读全文>>

标签: Linux driver pwm

评论(20) 浏览(38822)

Linux vm运行参数之(二):OOM相关的参数

作者:linuxer 发布于:2015-9-28 12:10 分类:内存管理

本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。如果这个名词对你毫无压力,你可以直接 进入第三章,这一章是描述具体的参数的,除了描述具体的参数,我们引用了一些具体的内核代码,本文的代码来自4.0内核,如果有兴趣,可以结合代码阅读, 为了缩减篇幅,文章中的代码都是删减版本的。按照惯例,最后一章是参考文献,本文的参考文献都是来自linux内核的Documentation目录,该 目录下有大量的文档可以参考,每一篇都值得细细品味。

阅读全文>>

标签: oom

评论(20) 浏览(36728)

Linux vm运行参数之(一):overcommit相关的参数

作者:linuxer 发布于:2015-9-23 18:54 分类:内存管理

终于可以进入Linux kernel内存管理的世界了,但是从哪里入手是一个问题,当面对一个复杂系统的时候,有时候不知道怎么开始。遵守“一切以人为本”的原则,我最终选择先 从从userspace的视角来看内核的内存管理。最开始的系列文章选择了vm运行参数这个主题。执行ls /proc/sys/vm的命令,你可以看到所有的vm运行参数,本文选择了overcommit相关参数来介绍。

本文的代码来自4.0内核。

阅读全文>>

标签: overcommit

评论(3) 浏览(31373)

Linux CPU core的电源管理(5)_cpu control及cpu hotplug

作者:wowo 发布于:2015-9-19 21:39 分类:电源管理子系统

由“Linux CPU core的电源管理(1)_概述”的描述可知,kernel cpu control位于“.\kernel\cpu.c”中,是一个承上启下的模块,负责屏蔽arch-dependent的实现细节,向上层软件提供控制CPU core的统一API(主要包括cpu_up/cpu_down等接口的实现)。本文将基于这些API,从上到下,分析CPU core从启动到关闭的整个过程(主要是CPU hotplug),进一步理解系统运行过程中CPU core电源管理相关的行为。

注1:其实这一部分已经不属于电源管理的范畴了,而是系统级的软件行为(boot、调度、电源管理等等),之所以放到这里讲述,主要原因是,这些复杂行为的背后,目的只有一个----节电。因此,本文只会focus在CPU core power状态切换的过程上,涉及到得其它知识,如进程调度,只会一笔带过。

阅读全文>>

标签: Linux cpu hotplug cpu_up cpu_down smpboot

评论(17) 浏览(40171)

Linux内核同步机制之(六):Seqlock

作者:linuxer 发布于:2015-9-9 11:55 分类:内核同步机制

普通的spin lock对待reader和writer是一视同仁,RW spin lock给reader赋予了更高的优先级,那么有没有让writer优先的锁的机制呢?答案就是seqlock。本文主要描述linux kernel 4.0中的seqlock的机制,首先是seqlock的工作原理,如果想浅尝辄止,那么了解了概念性的东东就OK了,也就是第二章了,当然,我还是推荐 普通的驱动工程师了解seqlock的API,第三章给出了一个简单的例子,了解了这些,在驱动中(或者在其他内核模块)使用seqlock就可以易如反 掌了。细节是魔鬼,概念性的东西需要天才的思考,不是说就代码实现的细节就无足轻重,如果想进入seqlock的内心世界,推荐阅读第四章seqlock 的代码实现,这一章和cpu体系结构相关的内容我们选择了ARM64(呵呵~~要跟上时代的步伐)。最后一章是参考资料,如果觉得本文描述不清楚,可以参 考这些经典文献,在无数不眠之夜,她们给我心灵的慰籍,也愿能够给读者带来快乐。

阅读全文>>

标签: Seqlock

评论(34) 浏览(22941)

linux cpufreq framework(4)_cpufreq governor

作者:wowo 发布于:2015-8-23 21:15 分类:电源管理子系统

由“linux cpufreq framework(3)_cpufreq core”的描述可知,cpufreq policy负责设定cpu调频的一个大致范围,而cpu的具体运行频率,则需要由相应的cufreq governor决定(可自行调节频率的CPU除外,后面会再详细介绍)。那到底什么是cpufreq governor?它的运行机制是什么?这就是本文要描述的内容。

阅读全文>>

标签: Linux governor cpufreq

评论(33) 浏览(19955)

Concurrency Managed Workqueue之(四):workqueue如何处理work

作者:linuxer 发布于:2015-8-17 19:41 分类:中断子系统

本文主要讲述下面两部分的内容:

1、将work挂入workqueue的处理过程

2、如何处理挂入workqueue的work

阅读全文>>

标签: workqueue Concurrency Managed

评论(16) 浏览(22746)

Concurrency Managed Workqueue之(三):创建workqueue代码分析

作者:linuxer 发布于:2015-8-6 18:22 分类:中断子系统

本文主要以__alloc_workqueue_key函数为主线,描述CMWQ中的创建一个workqueue实例的代码过程。

阅读全文>>

标签: alloc_workqueue

评论(36) 浏览(25857)

Concurrency Managed Workqueue之(二):CMWQ概述

作者:linuxer 发布于:2015-7-31 12:29 分类:中断子系统

一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的问题?在新的 cmwq又是如何解决这些问题的呢?它接口是如何呈现的呢(驱动工程师最关心这个了)?如何兼容旧的驱动呢?本文希望可以解开这些谜题。

本文的代码来自linux kernel 4.0。

阅读全文>>

标签: CMWQ

评论(16) 浏览(29107)

linux cpufreq framework(3)_cpufreq core

作者:wowo 发布于:2015-7-30 20:58 分类:电源管理子系统

前文(Linux cpufreq framework(2)_cpufreq driver)从平台驱动工程师的角度,简单的介绍了编写一个cpufreq driver的大概步骤。但要更深入理解、更灵活的使用,必须理解其内部的实现逻辑。

因此,本文将从cpufreq framework core的角度,对cpufreq framework的内部实现做一个简单的分析。

阅读全文>>

标签: Linux core cpufreq

评论(10) 浏览(21285)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog