第1章 Linux字符设备驱动程序.ppt
文本预览下载声明
* 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * Irq_key_open函数,主要完成8个按键对应的8个外部中断的申请 六、内核等待队列 * 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * * 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * 六、内核等待队列 * 嵌入式操作系统 * * 嵌入式操作系统 * 本章贯穿字符设备驱动,再一次的学习字符设备驱动,让大家能够更加熟悉字符设备驱动的编写流程,并引出Linux操作系统下的终端系统,有兴趣的同学可以《Linux设备驱动第三版》第十章中断处理。 通过中断按键驱动实例让大家懂得如何编写带中断的字符设备驱动。要明白,应用程序与驱动程序之前的数据是怎么传输的。 谢谢大家 * * * 嵌入式操作系统 * 合理使用Printk 四、驱动调试技术 * 嵌入式操作系统 * 合理使用Printk 四、驱动调试技术 * 嵌入式操作系统 * 合理使用Printk 四、驱动调试技术 * 嵌入式操作系统 * 第2章 Linux字符设备驱动程序 一、驱动程序介绍 二、字符设备驱动程序 提纲 三、字符驱动实例分析 四、驱动调试技术 五、Linux内核中断 六、内核等待队列 * 嵌入式操作系统 * 1、查询方式的按键驱动程序 五、Linux内核中断 分析second_drv.c 和 second_drv_test.c 查询方式,即CPU不停地去读IO口的状态——非常占用CPU的资源! * 嵌入式操作系统 * 中断概念 五、Linux内核中断 * 嵌入式操作系统 * Linux有一套非常成熟的中断系统。Linux内核将所有的中断统一编号,使用一个irq_desc结构体数组来描述这些中断,每个数组项对应一个中断,里面记录中断的名字、中断的状态、中断flags、底层硬件访问函数,中断处理函数入口等,通过它可以调用用户注册的中断处理函数。 2、中断方式的按键驱动程序 五、Linux内核中断 * 嵌入式操作系统 * 五、Linux内核中断 * 嵌入式操作系统 * 中断处理流程如下: (1)发生中断时,CPU执行异常向量vector_irq的代码。 (2)在 vector_irq里面,最终会调用中断处理的总入口函数 asm_do_IRQ。 (3) asm_do_IRQ根据中断号调用irq_desc数组项中的handle_irq。 (4) handle_irq会使用chip成员中的函数来设置硬件,比如清除中断、禁止中断、重新使能中断等。 (5) handle_irq逐个调用用户在action链表中注册的处理函数。 中断体系结构的初始化就是构造这些数据结构,比如irq_desc数组项中的handle_irq、chip等成员;用户注册中断时就是构造action链表;用户卸载中断时就是从action链表中去除不需要的项。 五、Linux内核中断 * 嵌入式操作系统 * 中断实现 五、Linux内核中断 * 嵌入式操作系统 * 中断注册 驱动程序通过request_irq函数向内核注册中断处理函数, request_irq函数根据中断号找到irq_desc数组项,然后在它的action链表中添加一个表项。 五、Linux内核中断 * 嵌入式操作系统 * 中断注册(参数) 五、Linux内核中断 * 嵌入式操作系统 * 中断注册(中断标志) 在flags参数中,可以选择一些与中断管理有关的选项,(声明在内核源代码的include/linux/interrupt.h中)如: IRQF_DISABLED 如果设置该位,表示是一个“快速”中断处理过程;如果没有设置这位,那么是一个“慢速”中断处理过程。 IRQF_SHARED 该位表明中断可以在设备间共享 五、Linux内核中断 * 嵌入式操作系统 * 快速/慢速中断 五、Linux内核中断 * 嵌入式操作系统 * 共享中断 五、Linux内核中断 * 嵌入式操作系统 * 共享中断 五、Linux内核中断 * 嵌入式操作系统 * 共享中断 五、Linux内核中断 * 嵌入式操作系统 * 五、Linux内核中断 * 嵌入式操作系统 * 释放中断 五、Linux内核中断 * 嵌入式操作系统 * 分配一个irqaction 把这个结构放入irq_desc[irq]——action链表 设置引脚 使能中断 出链 禁止中断 五、Linux内核中断 * 嵌入式操作系统 * 中断处理程序 五、Linux内核中断 * 嵌入式操作系统 *
显示全部