• <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设备模型(9)_device resource management

    作者:wowo 发布于:2014-9-24 23:28 分类:统一设备模型

    蜗蜗建议,每一个Linux驱动工程师,都能瞄一眼本文。

    之所以用“瞄”,因此它很简单,几乎不需要花费心思就能理解。之所有这建议,是因为它非常实用,可以解答一些困惑,可以使我们的代码变得简单、简洁。先看一个例子:

    阅读全文>>

    标签: Linux 设备模型 设备资源管理 devres

    评论(49) 浏览(45921)

    Linux kernel中断子系?#25345;?#20116;):驱动申请中断API

    作者:linuxer 发布于:2014-9-22 18:33 分类:中断子系统

    本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如?#34583;騆inux Kernel中的中断子系统注册中断处理函数?为了理解注册中?#31995;?#25509;口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述。第三章主要描述了驱动申请 interrupt line接口API request_threaded_irq的规格。第四章是进入request_threaded_irq的实现细节,分析整个代码的执行过程。

    阅读全文>>

    标签: request_threaded_irq

    评论(70) 浏览(67993)

    Linux电源管理(10)_autosleep

    作者:wowo 发布于:2014-9-18 23:42 分类:电源管理子系统

    Autosleep也是从Android wakelocks补丁集中演化而来?#27169;?a href="http://www.71402172.com/linux_kenrel/wakelocks.html">Linux电源管理(9)_wakelocks),用于取代Android wakelocks中的自动休眠功能。它基于wakeup source实现,从代码逻辑上讲,autosleep是一个简单的功能,但背后却埋藏着一个值得深思的话题:

    计算机的休眠(通常是STR、Standby、Hibernate等suspend操作),应当在什么时候由谁触发?

    蜗蜗在“Linux电源管理(2)_Generic PM之基本概念和软件架构”中有提过,在传统的操作场景下,如PC、笔记本电脑,这个问题很好回答:由用户、在其不想或不再使用时

    但在移动互联时代,用户随时随地都可能使用设备,上面的回答就不再成立,怎么办?这时,Android提出了“Opportunistic suspend(这个词汇太传神了,很难用简洁的中文去翻译,就不翻译了)”的理论,通俗的讲,就是“逮到机会就睡”。而autosleep功能,无论是基于Android wakelocks的autosleep,还是基于wakeup source的autosleep,都是为了实现“Opportunistic suspend”。

    相比较“对多样的系统组件单独控制”的电源管理方案(如Linux kernel的Dynamic PM),“Opportunistic suspend”是非常简单?#27169;?#21482;要检测到系统没有事情在做(逮到机会),就suspend整个系统。这对系统?#30446;?#21457;人员(特别是driver开发者)来说,很容易实现,几乎不需要特别处理。

    但困难的是,“系统没有事情在做”的判断依据是什么?能判断准确吗?会不会浪费过多的资源在"susend->resume-supsend…”的无聊动作上?如果只有一个设备在做事情,其它设备岂不是也得陪着耗电?等?#21462;?

    所以,实现“Opportunistic suspend”机制的autosleep功能,是充满争议的。说实话,也是不优雅的。但它可以解燃眉之急,因而虽然受非议,却在Android设备中广泛使用。

    其实Android中很多机制都是这样?#27169;?#22914;wakelocks,如binder,等等),可以这样比方:Android是设计中的现实主义,Linux kernel是设计中的理想主义,当理想和现实冲突时,怎么调和?不只是Linux kernel,其它的诸如设计、工作和生活,都会遇到类似的冲突,怎么?#28304;?#27809;有答案,但有一个原则:不要偏执,不要试图?#38750;?#38750;黑即白的真理!

    我们应?#20204;?#24184;有Android这样?#30446;?#28304;软件,让我们可以对比,可以思考。偏题有点远,言归正传吧,去看看autosleep的实现。

    阅读全文>>

    标签: Linux PM 电源管理 autosleep

    评论(47) 浏览(28883)

    Linux电源管理(9)_wakelocks

    作者:wowo 发布于:2014-9-14 23:17 分类:电源管理子系统

    wakelocks是一个有故事的功能。

    wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle、suspend等)。同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store。

    这种做法是相当不规范?#27169;?#23427;是典型的只求实现功能,不择手段。就像国内很多的Linux开发团队,要实现某个功能,都不去弄清楚kernel现有的机制、框架,牛逼哄哄的猛干一番。最后功能是实现了,可都不知道重复造了多少轮子,浪费了多少资源。到此打住,Android?#30446;?#21457;者不会这么草率,他们推出wakelocks机制一定有一些苦衷,我们就不评论了。

    但是,虽然有苦衷,kernel?#30446;?#21457;者可是有原则?#27169;?#27515;活不让这种机制合并到kernel分支(换谁也不让啊),直到kernel自身的wakeup events framework成熟后,这种僵局才被打破。因为Android开发者想到了一个坏点子:不让合并就不让合并呗,我用你的机制(wakeup source),再实现一个就是了。至此,全新的wakelocks出现了。

    所以wakelocks有两个,早期Android版本的wakelocks几乎已经销声匿迹了,不仔细?#19968;?#30495;找不到它的source code(这里有一个链接,但愿读者看到时还有效,drivers/android/power.c)。本文不打算翻那本旧?#35780;?#25152;以就focus在新的wakelocks上(drivers/power/wakelock.c,较新的kernel都支持)。

    阅读全文>>

    标签: Linux 电源管理 wakelock Android

    评论(38) 浏览(31818)

    Linux电源管理(8)_Wakeup count功能

    作者:wowo 发布于:2014-9-12 23:35 分类:电源管理子系统

    Wakeup count是Wakeup events framework的组成部分,用于解决“system suspend和system wakeup events之间的同步问题”。本文将结合“Linux电源管理(6)_Generic PM之Suspend功能”和“Linux电源管理(7)_Wakeup events framework”两篇文章,分析wakeup count的功能、实现逻辑、背后的思考,同时也?#23884;?#36825;两篇文章的复习和总结。

    阅读全文>>

    标签: Linux 电源管理 wakeup count

    评论(42) 浏览(27582)

    Linux电源管理(7)_Wakeup events framework

    作者:wowo 发布于:2014-9-9 22:43 分类:电源管理子系统

    本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题,是近几年Linux kernel最具争议的话题之一,在国外Linux开发论?#24120;?#32463;常可以看到围绕该话题的辩论。辩论的时间跨度和空间跨度可以持续很长,且无法达成一致。

    wakeup events framework是这个话题的一个临时性的解决方案,包括wake lock、wakeup count、autosleep等机制。它们就是本文的话题。

    阅读全文>>

    标签: Linux 电源管理 wakeup events framework

    评论(85) 浏览(45733)

    linux kernel的中断子系?#25345;?#19971;):GIC代码分析

    作者:linuxer 发布于:2014-9-4 16:59 分类:中断子系统


    GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1~V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构)。目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC?#24067;?#21450;其驱动。

    具体GIC?#24067;?#30340;实?#20013;?#24577;有两种,一种是在ARM vensor研发自己的SOC的时候,会向ARM公司购买GIC的IP,这些IP包括的型号有:PL390,GIC-400,GIC-500。其中 GIC-500最多支持128个 cpu core,它要求ARM core必须是ARMV8指令集?#27169;?#20363;如Cortex-A57),符合GIC architecture specification version 3。另外一?#20013;?#24577;是ARM vensor直接购买ARM公司的Cortex A9或者A15的IP,Cortex A9或者A15中会包括了GIC的实现,当然,这些实现也是符合GIC V2的规格。

    本文在进行?#24067;?#25551;述的时候主要是以GIC-400为目标,当然,?#19981;?#39034;便提及一些Cortex A9或者A15?#31995;腉IC实现。

    本 文主要分析了linux kernel中GIC中断控制器的驱动代码(位于drivers/irqchip/irq-gic.c和irq-gic-common.c)。 irq-gic-common.c中是GIC V2和V3的通用代码,而irq-gic.c是V2 specific的代码,irq-gic-v3.c是V3 specific的代码,不在本文的描述范围。本文主要分成三个部分:第二章描述了GIC V2的?#24067;?#31532;三章描述了GIC V2的初始化过程;第四章描述了底层的?#24067;all back函数。

    注:具体的linux kernel的版本是linux-3.17-rc3。



    阅读全文>>

    标签: GIC 代码分析

    评论(108) 浏览(70694)

    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>
  • 快乐10分今日开奖结果 六合彩tang 河南481怎么下载 刘伯温一肖中特,期期准 正规的捕鱼游戏网站 彩票代购 香港六合彩杀肖 一码中特免费版 特码卡片生肖 快速时时彩网址 内蒙古快三1000期走势图 幸运时时彩开奖结果查询 万达二分彩开奖号码 传统游戏玩法及规则100 广州最新麻将出千赌具批发