• <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>
  • 中断唤醒系统流程

    作者:smcdef 发布于:2018-1-1 17:03 分类:中断子系统

    1) 设备唤醒cpu之后是立即跳转中断向量表指定的位置吗?如果不是,那么是什么时候才会跳转呢?

    2) 已经跳转到中断服务函数开始执行代码,后续就会调用你注册的中断handle 代码吗?如果不是,那中断服务函数做什么准备呢?而你注册的中断handle又会在什么时候才开始执行呢?
    3) 假如register_thread_irq方式注册的threaded irq中调用msleep(1000),睡眠1秒,请问系统此时会继续睡下去而没调度回来吗?因此导致msleep后续的操作没有执行。
    4) 如果在注册的中断handle中把主要的操作都放在delayed work中,然后queue delayed work,work延时1秒执行,请问系统此时会继续睡下去而没调度delayed work 吗?因此导致delayed work 中的操作没有执行呢?
    5) 如果4)成立的话,我们该如何编程避免这个问题呢?
    好了,本片文章就为你解答所有的疑问。
    注?#20309;?#31456;代码分析基于linux-4.15.0-rc3。

    阅读全文>>

    标签: 电源管理 中断处理 中断子系统 中断唤醒

    评论(11) 浏览(10263)

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

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

    本文主要讲述下面?#35762;?#20998;的内容:

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

    2、如何处理挂入workqueue的work

    阅读全文>>

    标签: workqueue Concurrency Managed

    评论(13) 浏览(10348)

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

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

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

    阅读全文>>

    标签: alloc_workqueue

    评论(34) 浏览(11737)

    Concurrency Managed Workqueue之(二):CMWQ概述

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

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

    本文的代码来自linux kernel 4.0。

    阅读全文>>

    标签: CMWQ

    评论(11) 浏览(13760)

    Concurrency Managed Workqueue之(一):workqueue的基本概念

    作者:linuxer 发布于:2015-7-15 18:47 分类:中断子系统

    workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c 的代码膨胀到5000多行,为了深入的理解CMWQ,单单一份文档很难将其描述的清楚,因此CMWQ作为一个主题将会产生一系列的文档,本文是这一系列文 档中的第一篇,主要是基于2.6.23内核的代码实现来讲述workqueue的一些基本概念(之所以选择?#31995;?#29256;本的内核,主要是因为代码简单,适合理解 基本概念)。

    阅读全文>>

    标签: workqueue

    评论(23) 浏览(16490)

    linux kernel的中断子系统之(九):tasklet

    作者:linuxer 发布于:2015-7-2 18:10 分类:中断子系统

    对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),属于不那么紧急需要处理的事情被推迟执行,我们称之deferable task,或者叫做bottom half,。具体如何推迟执行分成下面几种情况:

    1、推迟到top half执行完毕

    2、推迟到某个指定的时间片(例如40ms)之后执行

    3、推迟到某个内核线程被调度的时候执行

    对于第一种情况,内核中的机制包括softirq机制和 tasklet机制。第二种情况是属于softirq机制的一种应用场景(timer类型的softirq),在本站的时间子系统的系列文档中会描述。第 三种情况主要包括threaded irq handler以及通用的workqueue机制,当然也包括自己创建?#20204;?#21160;专属kernel thread(不推荐使用)。本文主要描述tasklet这种机制,第二章描述一些背景知识和和tasklet的思考,第三章结合代码描述tasklet 的原理。

    注:本文中的linux kernel的版本是4.0

    阅读全文>>

    标签: tasklet

    评论(5) 浏览(16206)

    linux kernel的中断子系统之(八):softirq

    作者:linuxer 发布于:2014-10-24 11:53 分类:中断子系统

    对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),是全程关闭中断的,另外一部分是deferable task(bottom half),属于不那么紧急需要处理的事情。在执行bottom half的时候,是开中断的。有多种bottom half的机制,例如:softirq、tasklet、workqueue或是直接创建一个kernel thread来执行bottom half(这在旧的kernel驱动中常见,现在,一个理智的driver厂商是不会这么做的)。本文主要讨论softirq机制。由于tasklet是 基于softirq的,因此本文?#19981;?#25552;及tasklet,但主要是?#26377;?#27714;层面考虑,不会涉及其具体的代码实现。

    在?#32960;?#30340;驱动中?#35805;?#26159;不会用 到softirq,但是由于驱动经常使用的tasklet是基于softirq的,因此,了解softirq机制有助于撰写更优雅的driver。 softirq不能动态分配,都是静态定义的。内核已经定义了若干种softirq number,例如网络数据的收发、block设备的数据访问(数据量大,通信带宽高),timer的deferable task(时间方面要求高)。本文的第二章讨论了softirq和tasklet这两种机制有何不同,分别适用于什么样的场景。第三章描述了一些 context的概念,这是要理解后续内容的基础。第四章是进入softirq的实现,对比hard irq来解析soft irq的注册、触发,调度的过程。

    注:本文中的linux kernel的版本是3.14

    阅读全文>>

    标签: 软中断 softirq

    评论(125) 浏览(49804)

    Linux kernel中断子系统之(五):驱动申请中断API

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

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

    阅读全文>>

    标签: request_threaded_irq

    评论(66) 浏览(64017)

    linux kernel的中断子系统之(七):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指令集的(例如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的通?#20040;?#30721;,而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) 浏览(67655)

    linux kernel的中断子系统之(四):High level irq event handler

    作者:linuxer 发布于:2014-8-28 20:00 分类:中断子系统

    当外设触发一次中断后,一个大概的处理过程是:

    1、具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler

    2、machine driver对应的中断处理handler中会根据?#24067;?#30340;信息获取HW interrupt ID,并且通过irq domain模块翻译成IRQ number

    3、 调用该IRQ number对应的high level irq event handler,在这个high level的handler中,会通过和interupt controller交互,进行中断处理的flow control(处理中断的嵌套、抢占等),当然最终会遍历该中断描述符的IRQ action list,调用外设的specific handler来处理该中断

    4、具体CPU architecture相关的模块会进行现场?#25351;础?

    上面的1、4这两个步骤在linux kernel的中断子系统之(六):ARM中断处理过程中已经有了较为细致的描述,步骤2在linux kernel的中断子系统之(二):irq domain介绍中介绍,本文主要描述步骤3,也就是linux中断子系统的high level irq event handler。

    阅读全文>>

    标签: 中断处理

    评论(41) 浏览(34499)

    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>
  • 120手机报马结果 体彩大乐透走势图带连线 体彩20选5胆拖金额表 京东彩票官网首页 吉林11选5几点开始 20102011德甲积分 年开奖特码表 中国体育彩票走势图表31选7 体彩p3预测总汇 澳洲幸运8单双走势 时时彩开奖应用 500彩票网股东 体彩哪个软件直播 博彩之家 内蒙古十一选五走势囹