Linux reset framework

作者: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等设计思想的理解,因此本文将对其进行一个简单的罗列和总结。

阅读全文>>

标签: Linux Kernel 内核 framework reset

评论(0) 浏览(957)

系统休眠(System Suspend)和设备中断处理

作者:linuxer 发布于:2017-4-21 12:02 分类:电源管理子系统

本文主要描述系统休眠过程是如何和中断子系统交互的,全文的结构保持和内核文档中的power/suspend-and-interrupts.txt一致,当然,本质上也可以说这份文档是对suspend-and-interrupts.txt的翻译。

阅读全文>>

标签: suspend irq

评论(20) 浏览(2980)

Common Clock 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的理解。这一份是系统结构,另外一份是逻辑解析。

阅读全文>>

标签: framework clock common

评论(7) 浏览(3764)

Linux进程冻结技术

作者:itrocker 发布于:2015-11-24 15:01 分类:电源管理子系统

什么是进程冻结

进程冻结技术(freezing of tasks)是指在系统hibernate或者suspend的时候,将用户进程和部分内核线程置于“可控”的暂停状态。

为什么需要冻结技术

假设没有冻结技术,进程可以在任意可调度的点暂停,而且直到cpu_down才会暂停并迁移。这会给系统带来很多问题:

阅读全文>>

标签: Linux freeze

评论(28) 浏览(8298)

linux cpufreq framework(5)_ARM big Little driver

作者:wowo 发布于:2015-11-10 22:04 分类:电源管理子系统

也许大家会觉得奇怪:为什么Linux kernel把对ARM big·Lttile的支持放到了cpufreq的框架中?

众所周知,ARM的big·Little架构,也称作HMP(具体可参考“Linux CPU core的电源管理(2)_cpu topology”中相关的介绍),通过在一个chip中封装两种不同类型的ARM core的方式,达到性能和功耗的平衡。这两类ARM Core,以cluster为单位,一类为高性能Core(即big core),一类为低性能Core(即Little core),通过它们的组合,可以满足不同应用场景下的性能和功耗要求,例如:非交互式的后台任务、或者流式多媒体的解码,可以使用低功耗的Little core处理;突发性的屏幕刷新,可以使用高性能的big core处理。

那么问题来了,Linux kernel怎么支持这种框架呢?

注1:本文很多理论性的表述,或多或少的理解并翻译自:“http://lwn.net/Articles/481055/”,感兴趣的读者可以自行阅读。

注2:本文基于linux-3.18-rc4内核,其它版本内核可能会稍有不同。

阅读全文>>

标签: Linux ARM cpufreq hmp big little

评论(35) 浏览(5609)

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) 浏览(11769)

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

评论(30) 浏览(5195)

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

评论(4) 浏览(5308)

Linux CPU core的电源管理(3)_cpu ops

作者:wowo 发布于:2015-7-17 22:15 分类:电源管理子系统

由“ARMv8-a架构简介”中有关的介绍可知,ARMv8(包括ARMv7的一些扩展)引入了Virtualization、Security等概念。在这些概念之下,传统的CPU boot、shutdown、reset、suspend/resume等操作,不再那么简单和单纯。因此,ARM将这些底层操作抽象为一些operations,在以统一的方式向上层软件提供API的同时,可以根据不同的场景,有不同的实现。这就是本文要描述的cpu ops。

注1:由“Linux CPU core的电源管理(1)_概述”的描述可知,cpu ops属于arch-dependent的部分,本文基于ARM64平台。

阅读全文>>

标签: Linux SMP cpu operations spin_table psci

评论(18) 浏览(8673)

Linux cpufreq framework(2)_cpufreq driver

作者:wowo 发布于:2015-6-19 22:27 分类:电源管理子系统

本文从平台驱动工程师的角度,介绍怎么编写cpufreq驱动。

注1:本文基于linux-3.18-rc4内核,其它版本内核可能会稍有不同。

阅读全文>>

标签: Linux driver cpufreq

评论(3) 浏览(5658)

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