Linux kernel
文章平均质量分 73
人在路上……
人在路上...
展开
-
Linux IRQ Sub System VI
GIC-V3分析GIC-V3概述GIC:The Generic Interrupt ControllerARM架构下GIC支持好几个版本,GIC-v1, GIC-v2, GIC-v3, GIC-v4在此重点聚焦在GIC-V3版本,而GIC-V3版本的典型代表就是GIC-500.关于GIC-500的特性.GIC-500可以最大支持128Cores.GIC-500目前只支持ARMv8架构.GIC支持四种中断类型.支持CPU-Interface, Distributor如下,GIC-500和C原创 2021-11-14 22:41:23 · 682 阅读 · 0 评论 -
Linux IRQ Sub System V
驱动申请中断APIrequest_irq框架流程图如下所示:具体流程如下所示;request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) return request_threaded_irq(irq, handler, NULL, flags, name, dev);/*/** * request_threaded_irq - allocate原创 2021-11-14 22:29:52 · 595 阅读 · 0 评论 -
Linux IRQ Sub System IV
High level irq event handler综述当外设触发一次中断后,一个大概的处理过程是:1)具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler2)machine driver对应的中断处理handler中会根据硬件的信息获取hwirq,并且通过irq domain模块翻译成virq3)调用该virq 获取对应中断描述数组,并获取对应的handle_irq,在这个high level的handler中,会通过原创 2021-11-14 22:23:23 · 614 阅读 · 0 评论 -
Linux IRQ Sub System III
IRQ number和中断描述符综述在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们称之中断描述符(struct irq_desc)。linux kernel中会有一个数据结构保存了关于所有IRQ的中断描述符信息,我们称之中断描述符DB。当发生中断后,首先获取触发中断的hwirq,然后通过irq domain翻译成virq,然后通过virq就可以获取对应的中断描述符(以virq为数组irq_desc[virq]的下标获取对应的irq_desc)。调用中原创 2021-11-14 22:19:24 · 592 阅读 · 0 评论 -
Linux IRQ Sub System II
IRQ Domain概述在 linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:1)IRQ number,即virq.CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。2)HW interrupt ID,hwirq.对于 interrupt controller 而言,它收集了多个外设的中断信号并向上传递,因此,interrupt controller 需要原创 2021-11-14 22:13:23 · 217 阅读 · 0 评论 -
Linux IRQ Sub System I
引言目的一个合格的linux驱动工程师需要对kernel中的中断子系统有深刻的理解,只有这样,在写具体driver的时候才能:1)正确的使用linux kernel提供的的API,例如最著名的request_threaded_irq(request_irq)接口2)正确使用同步机制保护驱动代码中的临界区3)正确的使用kernel提供的softirq、tasklet、workqueue等机制来完成具体的中断处理基于上面的原因,我希望能够通过本篇文档来描述清楚linux kernel中的中断子系统方原创 2021-11-14 21:56:51 · 851 阅读 · 0 评论 -
等待队列概念以及使用
等待队列概念以及使用1.等待队列 wait_queue_head_t2.使用过程3.简单例子4.总结1.等待队列 wait_queue_head_t 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当事件发生后由内核自动唤醒。 等待队列是一种实现阻塞和唤醒的内核机制,很早就作为一个基本的功能单位出现在Linux内核中,它以队列为基础数据结构, 与进...原创 2020-04-30 17:03:52 · 791 阅读 · 0 评论 -
高分辨率定时器
高分辨率定时器1.定时器的工作模式2.高分辨率kernel定时器使用流程3.高分辨率定时器的一个简单使用例子1.定时器的工作模式enum hrtimer_mode { HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ 绝对时间 HRTIMER_MODE_REL = 0x1, /* Time value is relative to...原创 2020-04-30 17:00:56 · 574 阅读 · 0 评论 -
怎样基于power supply class编写PSY driver
(1)根据硬件spec,确定PSY设备具备哪些特性,并把他们和 enum power_supply_property 对应。(2)根据实际情况,实现这些 properties 的 get/set 接口。(3)定义一个struct power_supply 变量,并初始化必要字段后,调用power_supply_register或者power_supply_register_no_ws,...原创 2020-04-30 16:57:03 · 192 阅读 · 0 评论 -
BC协议总结
BC协议总结1、 问:为什么要引入这个规范?答:原有USB2.0规范并没有考虑到使用USB接口为便携式设备的电池进行充电的需求,而这样的需求却越来越多。BC规范要解决的就是这个问题,符合规范的设备和系统即向下兼容USB2.0标准,又针对充电做出了特别的优化。2、 问:BC的内容是什么答:BC规范的核心内容就是引入了充电端口识别机制。3、 问:便携式设备有几种USB充电接口?答:有三...原创 2020-04-30 16:23:35 · 1467 阅读 · 0 评论 -
V4L2框架分析
V4L2框架分析NO_1. 术语讲解 V4L2 即: video for Linux version 2 uvc: usb video class NO_2. 硬件相关的 uvc_driver.c static int __init uvc_init(void) ret = usb_register(&uvc_driver.driver); struct u...原创 2020-04-23 14:22:14 · 267 阅读 · 0 评论 -
Linux Kernel IIC 实战
Linux Kernel IIC 实战1.驱动源码2.测试源码1.驱动源码#include <linux/module.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include...原创 2020-04-20 15:31:51 · 197 阅读 · 0 评论 -
Linux Kernel IRQ 实战
Linux Kernel IRQ 实战1.驱动实例2.测试实例1.驱动实例备注:1.0 以mtk平台为参考点;2.0 以按键的IRQ方式为用例参考#include <linux/module.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/fs.h>...原创 2020-04-20 15:14:53 · 419 阅读 · 0 评论 -
Linux kernel定时器timer_list
Linux kernel定时器timer_list1.简单介绍一下定时器timer_list:2.实例演示3.总结1.简单介绍一下定时器timer_list:1.0 所在头文件:linux/timer.h1.1 结构体: struct timer_list { /* * All fields that change during normal runtime grouped to...原创 2020-04-20 11:10:17 · 758 阅读 · 0 评论