随笔分类 -  Linux中断异常

Concurrency Managed Workqueue(四)workqueue如何处理work
摘要:一、前言 本文主要讲述下面两部分的内容: 1、将work挂入workqueue的处理过程 2、如何处理挂入workqueue的work 二、用户将一个work挂入workqueue 1、queue_work_on函数 使用workqueue机制的模块可以调用queue_work_on(有其他变种的接 阅读全文

posted @ 2018-02-21 21:57 AlanTu 阅读(669) 评论(0) 推荐(0) 编辑

Concurrency Managed Workqueue(三)创建workqueue代码分析
摘要:一、前言 本文主要以__alloc_workqueue_key函数为主线,描述CMWQ中的创建一个workqueue实例的代码过程。 二、WQ_POWER_EFFICIENT的处理 __alloc_workqueue_key函数的一开始有如下的代码: if ((flags & WQ_POWER_EF 阅读全文

posted @ 2018-02-21 21:56 AlanTu 阅读(818) 评论(0) 推荐(0) 编辑

Concurrency Managed Workqueue(二)CMWQ概述
摘要:一、前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的问题?在新的cmwq又是如何解决这些问题的呢?它接口是如何呈现的呢(驱动工程师最关心这个了)?如何兼 阅读全文

posted @ 2018-02-21 21:55 AlanTu 阅读(599) 评论(0) 推荐(0) 编辑

Concurrency Managed Workqueue(一)workqueue基本概念
摘要:一、前言 workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c的代码膨胀到5000多行,为 阅读全文

posted @ 2018-02-21 21:54 AlanTu 阅读(600) 评论(0) 推荐(0) 编辑

中断唤醒系统流程
摘要:1. 前言 曾几何时,不知道你是否想过外部中断是如何产生的呢?又是如何唤醒系统的呢?在项目中,一般具有中断唤醒的设备会有一个interrupt pin硬件连接到SoC的gpio pin。一般来说,当设备需要唤醒系统的时候,会通过改变interrupt pin电平状态,而SoC会检测到这个变化,将So 阅读全文

posted @ 2018-02-13 22:51 AlanTu 阅读(4810) 评论(0) 推荐(0) 编辑

Linux系统休眠和设备中断处理
摘要:一、设备IRQ的suspend和resume 本小节主要解决这样一个问题:在系统休眠过程中,如何suspend设备中断(IRQ)?在从休眠中唤醒的过程中,如何resume设备IRQ? 一般而言,在系统suspend过程的后期,各个设备的IRQ (interrupt request line)会被di 阅读全文

posted @ 2018-02-13 22:42 AlanTu 阅读(1971) 评论(0) 推荐(0) 编辑

Linux中断 - softirq
摘要:一、前言 对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),是全程关闭中断的,另外一部分是deferable task(bottom half),属于不那么紧急需要处理的事情。在执行bottom half的时候,是开中断的。有多种bottom half的 阅读全文

posted @ 2018-02-13 21:50 AlanTu 阅读(1679) 评论(0) 推荐(0) 编辑

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

posted @ 2018-02-13 21:50 AlanTu 阅读(343) 评论(0) 推荐(0) 编辑

Linux中断 - GIC代码分析
摘要:一、前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1~V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结 阅读全文

posted @ 2018-02-13 21:49 AlanTu 阅读(3180) 评论(0) 推荐(0) 编辑

Linux中断 - ARM中断处理过程
摘要:一、前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述: 1、第二章描述了中断处理的准备过程 2、第三章描述了当发生中的时候,ARM硬件的行为 3、第四章描述了ARM的中断进入过程 4、第五章描述了ARM的中断退出过程 本文 阅读全文

posted @ 2018-02-13 21:48 AlanTu 阅读(4321) 评论(0) 推荐(1) 编辑

Linux中断 - High level irq event handler
摘要:一、前言 当外设触发一次中断后,一个大概的处理过程是: 1、具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler 2、machine driver对应的中断处理handler中会根据硬件的信息获取HW interrupt ID 阅读全文

posted @ 2018-02-13 21:47 AlanTu 阅读(1146) 评论(0) 推荐(0) 编辑

Linux中断 - 驱动申请中断API
摘要:一、前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述。第三章主要描述了驱动申请 阅读全文

posted @ 2018-02-13 21:47 AlanTu 阅读(3938) 评论(0) 推荐(0) 编辑

Linux中断 - IRQ number和中断描述符
摘要:一、前言 本文主要围绕IRQ number和中断描述符(interrupt descriptor)这两个概念描述通用中断处理过程。第二章主要描述基本概念,包括什么是IRQ number,什么是中断描述符等。第三章描述中断描述符数据结构的各个成员。第四章描述了初始化中断描述符相关的接口API。第五章描 阅读全文

posted @ 2018-02-13 21:46 AlanTu 阅读(3775) 评论(1) 推荐(0) 编辑

Linux中断 - IRQ Domain介绍
摘要:一、概述 在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断: 1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。 2、HW i 阅读全文

posted @ 2018-02-13 21:45 AlanTu 阅读(2700) 评论(0) 推荐(0) 编辑

Linux中断 - 综述
摘要:一、前言 一个合格的linux驱动工程师需要对kernel中的中断子系统有深刻的理解,只有这样,在写具体driver的时候才能: 1、正确的使用linux kernel提供的的API,例如最著名的request_threaded_irq(request_irq)接口 2、正确使用同步机制保护驱动代码 阅读全文

posted @ 2018-02-13 21:44 AlanTu 阅读(613) 评论(0) 推荐(0) 编辑

Linux中断的系统调用
摘要:早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用。 为了支持 阅读全文

posted @ 2018-02-13 16:32 AlanTu 阅读(2970) 评论(0) 推荐(0) 编辑

导航