linux device driver
cxiaolei1992
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动之中断---介绍
中断中断是cpu在执行过程中,出现了某些突发情况,cpu必须暂停当前的任务,去处理紧急的事件,处理结束后继续处理刚才暂停的任务。分类:从中断源看:内部中断:来源于cpu内部,例如软件中断指令、溢出、除法错误等 外部中断:来源于cpu外部,外设提出请求从是否可屏蔽看:可屏蔽中断:中断被屏蔽后不再相应 不可屏蔽中断:NMI从跳转入口看:向量中断:cpu通常为不同的中断分配不同的中断入口地址,当检测到原创 2017-12-21 21:02:07 · 1407 阅读 · 0 评论 -
Linux设备驱动之字符设备---poll/select机制
写在前面poll机制是基于等待队列wait_queue的,我个人的理解,poll机制是对wait_queue的补充,等待队列会一直等待,直到condition满足条件并且wake_up队列头。 如果不满足,程序会一直阻塞。 poll机制让wait_queue有了超时机制,如果阻塞一定时间后会直接返回。poll机制中几个重要的函数设备驱动file_operations中要添加对应的.poll头原创 2017-12-26 15:47:41 · 1634 阅读 · 0 评论 -
Linux设备驱动之字符设备\interrupt\wait_queue实现
这篇文章是前几篇文章的总结,同时实现了中断,等待队列,都放在了字符设备的read中。 可以使用cat /dev/char_interrupt 类似于getevent 代码就不添加注释了,比较简单,下篇文章会在此基础上添加poll机制。#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#incl原创 2017-12-26 14:09:32 · 429 阅读 · 0 评论 -
Linux设备驱动之字符设备
写在前面字符设备是Linux设备驱动中最简单的设备,也是入门级驱动。网上已经有很详细的讲解,这篇文章侧重代码实现,提供了一个完整驱动框架的代码实现。理论知识重要结构体字符设备驱动结构:struct cdev { struct kobject kobj; struct module *owner; //一般为THIS_MODULE c原创 2017-12-25 17:12:42 · 423 阅读 · 0 评论 -
Linux设备驱动之阻塞与非阻塞---等待队列
废话一堆以前由于项目需要,临时做过windows的虚拟串口驱动,当时只实现了write,没有实现read(不需要read)。当时不知道如何实现read操作,因为不知道设备什么时候才会有数据,我驱动中该什么时机读呢?难道我read程序中要写一个while循环,一直去读取吗? 现在才明白,可以使用操作系统中的阻塞和非阻塞原理解决上面的问题。正题原创 2017-12-22 14:42:06 · 826 阅读 · 0 评论 -
Linux设备驱动之中断---thread使用示例
前几篇文章介绍了中断的原理、基本框架、上下部使用之工作队列,这篇文章介绍另一种方法—线程化中断 thread.我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_threaded.c#include <linux/kernel.h>#include <linux/module.h>#include <linux/原创 2017-12-22 10:27:45 · 1107 阅读 · 0 评论 -
Linux设备驱动之中断---tasklet使用示例
前几篇文章介绍了中断的原理、基本框架、上下部使用之工作队列、线程化中断,这篇文章介绍另一种方法—线程化中断 tasklet。 此方法运行在中断上下文,不可休眠,延时。我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_tasklet.c#include <linux/kernel.h>#include <linux原创 2017-12-22 10:36:15 · 2358 阅读 · 0 评论 -
Linux设备驱动之中断---work_queue使用示例
前两篇文章介绍了中断的原理和基本框架,但是实际使用过程中会用到中断上下文的编程方法,这里介绍work_queue.我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_work_queue.c#include <linux/kernel.h>#include <linux/module.h>#include <li原创 2017-12-21 21:28:48 · 2192 阅读 · 0 评论 -
Linux设备驱动之中断---基本代码框架
原理已经在上一篇文章中介绍了,这篇文章主要介绍最基本的使用方法,后面的文章有其他使用示例我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。#include <linux/kernel.h>#include <linux/module.h>#include <linux/interrupt.h>#include <linux/irq.h>#inc原创 2017-12-21 21:17:51 · 561 阅读 · 0 评论 -
Linux设备驱动之timer定时器与延时
理论知识原理介绍软件意义上的定时器是依赖硬件定时器实现的,内核在时钟中断发生后检测各个定时器是否到期,如果到期,将到期的定时器的处理函数作为软中断的下半部执行。实质上,时钟中断处理程序会唤醒TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。timer定时器的重要数据结构struct timer_list { /*原创 2018-01-26 14:03:47 · 2015 阅读 · 0 评论