Linux cpuidle framework(2)_cpuidle core
作者:wowo 发布于:2014-12-30 22:38 分类:电源管理子系统
cpuidle core是cpuidle framework的核心模块,负责抽象出cpuidle device、cpuidle driver和cpuidle governor三个实体,并提供如下功能(可参考“Linux cpuidle framework(1)_概述和软件架构”中的软件架构):
1)向底层的cpuidle driver模块提供cpudile device和cpuidle driver的注册/注销接口。
2)向cpuidle governors提供governor的注册接口。
3)提供全局的cpuidle机制的开、关、暂停、恢复等功能。
4)向用户空间程序提供governor选择的接口。
5)向kernel sched中的cpuidle entry提供cpuidle的级别选择、进入等接口,以方便调用。
本文会以这些功能为线索,逐一展开,分析cpuidle framework的实现思路和实现原理。
标签: Linux framework core cpuidle
Linux cpuidle framework(1)_概述和软件架构
作者:wowo 发布于:2014-12-17 23:04 分类:电源管理子系统
在计算机系统中,CPU的功能是执行程序,总结起来就是我们在教科书上学到的:取指、译码、执行。那么问题来了,如果没有程序要执行,CPU要怎么办?也许您会说,停掉就是了啊。确实,是要停掉,但何时停、怎么停,却要仔细斟酌,因为实际的软硬件环境是非常复杂的。
我们回到Linux kernel上,Linux系统中,CPU被两类程序占用:一类是进程(或线程),也称进程上下文;另一类是各种中断、异常的处理程序,也称中断上下文。
进程的存在,是用来处理事务的,如读取用户输入并显示在屏幕上。而事务总有处理完的时候,如用户不再输入,也没有新的内容需要在屏幕上显示。此时这个进程就可以让出CPU,但会随时准备回来(如用户突然有按键动作)。同理,如果系统没有中断、异常事件,CPU就不会花时间在中断上下文。
在Linux kernel中,这种CPU的无所事事的状态,被称作idle状态,而cpuidle framework,就是为了管理这种状态。
注:cpuidle framework系列文章会以ARM64作为示例平台,由于ARM64刚刚发布不久,较早版本的kernel没有相关的代码,因此选用了最新的3.18-rc4版本的kernel。
Linux common clock framework(3)_实现逻辑分析
作者:wowo 发布于:2014-11-24 22:31 分类:电源管理子系统
前面两篇clock framework的分析文章,分别从clock consumer和clock provider的角度,介绍了Linux kernel怎么管理系统的clock资源,以及device driver怎么使用clock资源。本文将深入到clock framework的内部,分析相关的实现逻辑。
注:本文使用的kernel版本为linux-3.10.29。虽然最新版本的kernel增加了一些内容,但主要逻辑没有改变,就不紧跟kernel的步伐了。
Linux PM domain framework(1)_概述和使用流程
作者:wowo 发布于:2014-11-13 22:09 分类:电源管理子系统
在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如:
1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。
2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。因此可以根据实际情况,使用不同的电压供电,例如CPU core只需1.2v左右即可,而大部分的I/O则需要3.3v左右。
3)系统运行的大部分时间,并不需要所有模块都处于power on状态,因此可以通过关闭不工作模块的供电,将它们的耗电降为最低。
4)等等
虽然电源域的好处多多,却不是越多越好,因为划分电源域是需要成本的(需要在PMU中使用模拟电路完成,包括金钱成本和空间成本)。因此,大多数系统会根据功能,设置有限的几个电源域,例如:CPU core(1、2、3…);GPU;NAND;DDR;USB;Display;Codec;等等。
这种设计引出一个问题:存在多个模块共用一个电源域的情况。因而要求在对模块power on/off的时候,考虑power共用的情况:只要一个模块工作,就要power on;直到所有模块停止工作,才能power off。
Kernel的PM domain framework(位于drivers/base/power/domain.c中),提供了管理和使用系统power domain的统一方法,在解决上面提到的问题的同时,结合kernel的suspend、runtime pm、clock framework等机制,以非常巧妙、灵活的方式,管理系统供电,以达到高效、节能的目的。
同样,作为一个framework,我们可以从三个角度分析:使用者(consumer)的角度;提供者(provider)的角度;内部实现。具体如下。
注:本文的linux kernel版本为3.18-rc4。一般情况下,对于那些相对稳定的framework,蜗蜗不会说明文章所使用的kernel版本,但本文是个例外,因为PM domain很多方便、易用的patch,只能在最新版本(当前为3.18-rc4)kernel上才能看到。
标签: Linux PM 电源管理 framework domain
新技能get: 订阅Linux内核邮件列表
作者:wowo 发布于:2014-11-4 22:37 分类:Linux应用技巧
本文给小伙伴们分享一下怎么订阅Linux内核邮件列表(Linux kernel mailing list,LKML)。标签: Linux Kernel mailing list LKML
Linux common clock framework(2)_clock provider
作者:wowo 发布于:2014-10-23 23:49 分类:电源管理子系统
本文接上篇文章,从clock driver的角度,分析怎么借助common clock framework管理系统的时钟资源。换句话说,就是怎么编写一个clock driver。
由于kernel称clock driver为clock provider(相应的,clock的使用者为clock consumer),因此本文遵循这个规则,统一以clock provider命名。
标签: Linux framework clock provider dts
arm64 linux移植
作者:forion 发布于:2014-10-23 17:02
arm64大潮来势汹汹,不知道大家有没有在搞64位cpu呢?
arm64 linux 只支持device tree了,大家要努力学好dt啦。可以去参考楼主之前的dt文章。
arm64 架构已经有很大的改变啦,不知道楼主什么时候给大家普及呢?哈哈。
Porting to ARM 64-bit.pdf
32-bit to 64-bit portingv3.pdf上面两篇pdf在网上可以找到,可以初步的了解aarch32与aarch64 porting注意事项。
Linux common clock framework(1)_概述
作者:wowo 发布于:2014-10-20 23:06 分类:电源管理子系统
common clock framework是用来管理系统clock资源的子系统,根据职能,可分为三个部分:
1)向其它driver提供操作clocks的通用API。
2)实现clock控制的通用逻辑,这部分和硬件无关。
3)将和硬件相关的clock控制逻辑封装成操作函数集,交由底层的platform开发者实现,由通用逻辑调用。
因此,蜗蜗会将clock framework的分析文章分为3篇:
第一篇为概述和通用API的使用说明,面向的读者是使用clock的driver开发者,目的是掌握怎么使用clock framework(就是本文);
第二篇为底层操作函数集的解析和使用说明,面向的读者是platform clock driver的开发者,目的是掌握怎么借助clock framework管理系统的时钟资源;
第三篇为clock framework的内部逻辑解析,面向的读者是linux kernel爱好者,目的是理解怎么实现clock framework。
注1:任何framework的职能分类都是如此,因此都可以按照这个模式分析。
Linux电源管理(11)_Runtime PM之功能描述
作者:wowo 发布于:2014-10-8 23:32 分类:电源管理子系统
终于可以写Runtime PM了,说实话,蜗蜗有点小激动。因为从个人的角度讲,我很推崇使用Runtime PM进行日常的动态电源管理,而不是suspend机制。
软件工程的基本思想就是模块化:高内聚和低耦合。通俗地讲呢,就是“各人自扫门前雪”,尽量扫好自己的(高内聚),尽量不和别人交互(低耦合)。而Runtime PM正体现了这一思想:每个设备(包括CPU)都处理好自身的电源管理工作,尽量以最低的能耗完成交代的任务,尽量在不需要工作的时候进入低功耗状态,尽量不和其它模块有过多耦合。每个设备都是最节省的话,整个系统一定是最节省的,最终达到无所谓睡、无所谓醒的天人合一状态。
讲到这里想到自己的一则趣事:大学时,蜗蜗是寝室长,但不爱打扫卫生,于是就提出一个口号,“不污染,不治理;谁污染,谁治理”。结果呢,大家猜就是了,呵呵。言归正传,开始吧。
Linux设备模型(9)_device resource management
作者:wowo 发布于:2014-9-24 23:28 分类:统一设备模型
蜗蜗建议,每一个Linux驱动工程师,都能瞄一眼本文。
之所以用“瞄”,因此它很简单,几乎不需要花费心思就能理解。之所有这建议,是因为它非常实用,可以解答一些困惑,可以使我们的代码变得简单、简洁。先看一个例子:
功能
最新评论
- wangjing
写得太好了 - wangjing
写得太好了! - DRAM
圖面都沒辦法顯示出來好像掛點了。 - Simbr
bus至少是不是还有个subsystem? - troy
@testtest:只要ldrex-modify-strex... - gh
Linux 内核在 sparse 内存模型基础上实现了vme...
文章分类
随机文章
文章存档
- 2025年4月(5)
- 2024年2月(1)
- 2023年5月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)