首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux系统驱动之链式中断控制器驱动程序编写

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 链式中断控制器驱动程序编写 资料下载 视频观看 1....驱动提供 屏蔽GIC 33中断:调用irq_dataA的irq_chip的函数,irq_dataA由GIC驱动提供 细分并处理某个GPIO中断: 读取GPIO寄存器得到hwirq,通过...驱动提供 handleC:处理GPIO 2中断,handleC由GPIO驱动提供 屏蔽GPIO 2中断:调用irq_dataB的irq_chip的函数,由GPIO驱动提供 处理:调用actions...链表中用户注册的函数 清除GPIO 2中断:调用irq_dataB的irq_chip的函数,由GPIO驱动提供 1.2 irq_domain的核心作用 怎么把handleB、GPIO Domain、handleC

1.6K30

Linux系统驱动之层级中断控制器驱动程序编写

层级中断控制器驱动程序编写 1. 层级中断控制器的重要函数和结构体 1.1 回顾处理流程 1.2 irq_domain的核心作用 2. 硬件模型 3....下图中: handleA、irq_dataA由GIC驱动提供 irq_dataB由GPIO驱动提供,不需要handleB 假设GPIO模块下有4个引脚,都可以产生中断,分别链接到GIC的100~103...中断 GPIO就是一个层级中断控制器 对于GPIO模块中0~3这四个hwirq,分配四个irq_desc,用到时再分配 假设这4个irq_desc的序号为234~237 在GIC domain...按下KEY时: 程序从GIC中读取寄存器知道发生了102中断,通过GIC irq_domain可以知道virq为236 处理virq 236中断:调用irq_desc[236].handle_irq...对于这些虚拟的中断控制器,我们没有真实按键,通过devmem指令写GIC的PENDING寄存器触发中断。 3. 编程 会涉及2个驱动程序:虚拟的中断控制器驱动程序,按键驱动程序,以及对应的设备树。

1.4K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux系统驱动之GIC驱动程序对中断的处理流程

    视频观看 百问网驱动大全 GIC驱动程序对中断的处理流程 资料下载 视频观看 1....一级中断控制器处理流程 2. 多级中断控制器处理流程 参考资料: linux kernel的中断子系统之(七):GIC代码分析 使用逐步演进的方法才能形象地理解。 1....假设GIC可以向CPU发出161019中断,这些数字被称为hwirq。015用于Process之间通信,比较特殊。...假设要使用UART模块,它发出的中断连接到GIC的32中断,分配的irq_desc序号为16 在GIC domain中会记录(32, 16) 那么注册中断时就是:request_irq(16, ......多级中断控制器处理流程 假设GPIO模块下有4个引脚,都可以产生中断,都连接到GIC的33中断 GPIO也可以看作一个中断控制器,对于它的4个中断 对于GPIO模块中0~3这四个hwirq,一般都会一下子分配四个

    2.2K20

    Linux驱动开发-外部中断的注册使用(按键为例)

    外部中断介绍 前面有篇文章使用杂项设备完成了按键驱动的编写,实现了按键轮询检测,通过read函数向应用层传递按键值,这篇文章使用按键为例,介绍Linux内核里中断的注册方法,使用中断的方式检测按键是否按下...Linux内核提供了中断的注册接口: (1)注册中断 头文件 include\linux\interrupt.h 定义文件 include\linux\interrupt.h 函数原型 int...返回值 0 表示成功 -EINVAL (无效参数22)表示中断无效。 -EBUSY (设备或者资源忙16)表示中断已经被占用。...使能中断 void enable_irq(unsigned int irq); 参数:irq,要使能的中断对应的编号 (4)获取irq中断 int gpio_to_irq(unsigned gpio...获取中断*/ key_info[i].irq=gpio_to_irq(key_info[i].gpio); /*2.

    4.9K40

    获取Linux环境的硬盘序列

    因最近工作要求,需要获取Linux环境上的硬盘序列,经过多番尝试,最终得到满意的结果,先寻找过程梳理汇总如下。...最开始使用hdparam命令来获取,它是Linux获取或设置硬盘参数的工具,包括测试读写性能以及缓存性能等。...适用于SCSI的硬盘,下载sdparam后使用 sdparam --inquiry --page=sn /dev/sda 结果仍然是 猜测可能是在虚拟机上跑的linux,无法通过这两个命令获取,换个思路继续.../dev/cdrom是光驱设备,通过上述命令,可以获得光驱设备的序列,硬盘和光驱同属于存储设备,那么通过上述获取硬盘序列的命令,应该是可以获取的到,但实际获取为空,这是为什么呢?...总结 在linux上,可以通过lsblk --nodeps -no serial /dev/sda命令来获得硬盘序列,注意,在虚拟机上运行的linux获取到的结果为空。

    15.5K40

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断的处理过程。...,handler 的第一个参数是中断,第二个参数是设备对应的ID,第三个参数是中断发生时由内核保存的各个寄存器的值。...regs) { int irq = regs.orig_eax & 0xff; /* 获取IRQ */ int cpu = smp_processor_id(); irq_desc_t...return 1; } do_IRQ() 函数首先通过IRQ获取到其对应的 irq_desc_t 结构,注意的是同一个中断有可能发生多次,所以要判断当前IRQ是否正在被处理当中(判断 irq_desc_t...鉴于这个原因,Linux中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 的执行。

    6.6K20

    Linux中断 - IDT

    中断描述符项定义 当中断发生,cpu获取中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...; segment就是相应的段选择子,根据它在GDT中查找可以最终获取到段基地址; bits是该中断描述符的一些属性值: struct idt_bits { u16 ist : 3,...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...pushq $(~vector+0x80) /* Note: always in signed byte range */ jmp common_interrupt 即先将中断压栈...VECTOR_UNUSED); } } exiting_irq(); set_irq_regs(old_regs); return 1; } 首先根据中断向量获取到对应的中断描述符

    6.6K10

    深入浅出:Linux设备驱动中断与定时器

    ,我们在进行裸机开发学习的 时候,这几乎就是重难点,也是每个程序必要的模块信息,那么在Linux中,我们又怎么实现延时、计数,和中断呢?...Linux中断处理分为顶半部和底半部,顶半部完成尽可能少得的比较紧急的功能,往往只是简单的完成“登记中断”的工作,就是将底半部处理程序挂到该设备的底半部处理队列中去,中断处理机制如下图: ?...irqflags, const char *devname, void *dev_id) irq 是要申请的中断,handler是向系统登记的中断处理函数,irq_flags是中断处理的属性,可以指定中断的触发方式机处理方式...(与通常说的软中断(软件指令引发的中断),比如arm的swi是完全不同的概念) 在linux内核中,用softirq_action结构体表征一个软中断,这个结构体包含软中断处理函数指针和传递给函数的参数...驱动编程中,可以利用一组函数和数据结构来完成定时器触发工作或者某些周期性任务。

    3.1K102

    Linux驱动实践:中断处理中的【工作队列】 workqueue 是什么鬼?

    目录 工作队列是什么 驱动程序 编译、测试 别人的经验,我们的阶梯! 大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【中断处理中的下半部分机制-工作队列】。...工作队列是什么 工作队列是Linux操作系统中,进行中断下半部分处理的重要方式! 从名称上可以猜到:一个工作队列就好像业务层常用的消息队列一样,里面存放着很多的工作项等待着被处理。...驱动程序 之前的几篇文章,在驱动程序中测试中断处理的操作流程都是一样的,因此这里就不在操作流程上进行赘述了。 这里直接给出驱动程序的全貌代码,然后查看 dmesg 的输出信息。...#include #include #include static int irq;...说明:驱动程序的初始化函数 myirq_init 被调用了,并且成功注册了 1 中断的处理程序。 此时,按一下键盘上的 ESC 键。

    1.9K40

    (转载非原创)linux驱动获取设备树信息

    上一篇文章学习了字符设备的注册,操作过的小伙伴都知道上一篇文章中测试驱动时是通过手动创建设备节点的,现在开始学习怎么自动挂载设备节点和设备树信息的获取,这篇文章中的源码将会是我以后编写字符驱动的模板...drvdata:NULL fmt:设备节点的名称 三、获取设备树信息 为了帮助像我一样才接触linux驱动,对设备树不是很理解的小伙伴,所系这里就不对设备树进行详细的介绍。...我在驱动中读取设备树的主要函数有以下几个,想了解更多of函数的小伙伴可以了解linux设备树常用of操作函数。...*/ int major; /* 主设备 */ int minor; /* 次设备 */ struct cdev...\r\n", filename); } return 0; } 五、测试 将驱动文件和应用文件进行编译 make arm-linux-gnueabihf-gcc 将编译后的驱动文件可应用文件拷贝到开发板中

    1.5K00

    通过QQ获取绑定手机

    导语 偶有奇想,我们可以通过手机来搜索获取其对应的QQ,那么,反过来呢? 一.缩小范围 由于手机属于隐私数据,腾讯QQ并没有直接给出通过QQ查找对应手机的接口。...通过搜索“QQ 找回密码”,很容易可以进到找回密码的页面,输入对应的QQ,选择“验证密保找回密码”,得到如下弹窗: 通过密保手机找回密码 现在我们获取到了手机十一位数字中的五位(前三位与后两位)!...第一次更新 在上文中,已经提出了一种通过QQ获取绑定手机的方法,下面将对上文中的不足之处加以补全。...Point.2 针对上文中提及的“位置信息” 在上文中,我们在对手机进行筛选时用到了一个关键的信息:位置。那么,位置信息又该从何处获取呢?笔者于此提供两种思路。...另:有许多网友对获取信息的方式、思路很有兴趣,笔者将另写一篇文章详细阐述相关内容。

    35.6K102

    Linux驱动实践:一起来梳理【中断】的前世今生(附代码)

    目录 Linux 中断的知识点梳理 中断的分类 中断中断向量 中断服务程序ISR 上半部分和下半部分 中断处理的注册和注销 API 实操:捕获键盘中断 示例代码 驱动程序传参 IO编址:IO端口和IO.../module.h> #include // 中断 static int irq; // 驱动程序名称 static char * devname;...向驱动程序传参 示例代码中,在调用 request_irq 时,需要指定中断驱动程序的名称。 这两个参数是在加载驱动模块的时候,从命令行传入的。...: $ make 输出文件:driver_interrupt.ko 因为我们捕获的是键盘中断(中断:1),先看一下在加载驱动模块之前的中断驱动程序 head /proc/interrupts: 可以把...head /proc/interrupts 查看驱动程序: 在中断 1 的右侧,是不是看到了我们的驱动程序:my_irq?

    1.2K30

    linux 中断机制《Rice linux 学习笔记》

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。...其中:IRQ_EINT0:按键对应引脚的中断。与加载的中断一致。

    4.8K10

    linux内核缺页中断处理

    9.调度引发缺页中断的进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...* *这里不适用current因为有可能处于任务切换的中断内 */ pgd_paddr = read_cr3(); //从cr3获取页目录地址 //获取中间目录的地址,在i386下就是...), "=r" (x) : "m"(__m(addr)), "i"(errret), "0"(err)) //"m"(__m(addr)), "i"(4), "0"(4)) 经过以上分析,对linux

    10.8K22
    领券