![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动
anton_99
这个作者很懒,什么都没留下…
展开
-
块设备驱动程序2
1 #include <linux/init.h> 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 5 #include <linux/fs.h> 6 #include <linux/slab.h> 7 #include <linux/genhd.h> 8 #include <linux/blkdev.h> 9 #include <.原创 2021-03-05 18:28:06 · 67 阅读 · 0 评论 -
块设备驱动程序
1 #include <linux/init.h> 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 5 #include <linux/fs.h> 6.原创 2021-03-05 18:26:57 · 96 阅读 · 0 评论 -
GIC检测中断的流程
GIC的分配器Distributor为每一个中断都维护了一个状态机,这些中断状态包括Active(正在处理)、Inactive(停止处理)、Pending(挂起)、Active and pending(处理与挂起),具体如图所示。结合图所示的中断状态转换,GIC检测中断的流程如下。(1)当GIC检测到一个中断产生时,会将中断标记为Pending状态(A1)。(2)GIC分配器Distributor从Pending状态的中断中选择一个优先级最高的中断,发送到确定的CPU Interface中。(3)原创 2020-11-16 08:22:55 · 1255 阅读 · 0 评论 -
按键抖动
按照正常的逻辑,按键从按键按下到抬起的过程中,任何中断触发方式(高/低电平触发、上升/下降沿触发)都只会产生一次,其电平变化如图所示。而在实际的情况中,按键产生的电平变化与图所示的理论电平变化具有一定差异,这是因为通常按键所用的开关都是机械弹性开关。当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会立刻稳定接通,在断开时不会立刻彻底断开,而是在闭合和断开的瞬间伴随着一连串的抖动。实际的电平状态变化如图所示。如图所示,按键稳定闭合时间长短是由操作人员决定的,通常会在100ms以上原创 2020-11-16 08:20:02 · 2245 阅读 · 0 评论 -
块设备
块设备对数据的处理是按照数据块的形式进行的。在大多数Linux操作系统中,进行I/O操作块设备时,每次只能传输一个或多个完整的块,而每块包含512字节(或更2的更高次幂)的数据。Linux可以让应用程序像字符设备一样读写块设备,允许一次传递任意多字节的数据。块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的(在内核中,字符驱动程序与块驱动程序具有完全不同的接口)。块设备具有请求缓冲区并且支持随机访问,不必按照顺序去存取数据。Linux下的磁原创 2020-09-21 08:39:29 · 664 阅读 · 0 评论 -
字符设备
字符设备对数据的处理是按照字节流的形式进行的,可以支持随机访问,也可以不支持随机访问。字符设备驱动程序通常至少要实现open、close、read、write等系统调用。字符设备可以通过文件系统节点(设备节点)来访问,这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以移动或定位访问位置,而大多数字符设备只能按照顺序访问数据。通常情况下,对字符设备只能按顺序按字节进行存取而不能随机访问(字符设备没有请求缓冲区,所有的访问请求都是按顺序执行的),但事实上现在一些高级字符设备也可以从指定位置一次读取一原创 2020-09-21 08:38:25 · 295 阅读 · 0 评论 -
内核模块与应用程序的区别
内核模块与普通的应用程序存在很大的差异,具体如下。(1)内核模块属于操作系统内核的一部分,运行在内核空间,应用程序运行在用户空间。(2)内核模块中的函数是被动调用的,如加载函数与卸载函数分别是在内核模块被加载和卸载时被调用,而应用程序则是顺序执行。(3)内核模块不能调用C库,应用程序可以随时调用C库。(4)内核模块必须要做一些清除性工作,如在卸载函数中将申请的内存空间释放,而应用程序忽略有些工作不会对系统造成影响,如应用程序执行结束前会自动释放使用的内存空间,因此释放内存的操作出现在程序结束前是可以原创 2020-09-14 08:44:47 · 2111 阅读 · 1 评论 -
内核模块的结构
一个完整的内核模块应该由以下结构组成。(1)模块加载(入口)函数(必需)。(2)模块卸载函数(必需)。(3)模块许可证声明(必需)。(4)模块参数(可选)。(5)模块导出符号(可选)。(6)模块作者等信息声明(可选)。...原创 2020-09-14 08:43:19 · 219 阅读 · 0 评论 -
内核模块
内核模块的编写有一定的格式要求,这样模块才能被内核识别,即加载成功。如例所示,为一个简单的内核模块程序。```c```c 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/kernel.h> 4 5 int init_module(void){ 6 printk(KERN_INFO "module init\n"); 7 return 0;原创 2020-08-02 11:00:31 · 131 阅读 · 0 评论 -
Linux内核模块概述
Linux操作系统的内核为单一体系结构(单内核),其与微内核(如Windows操作系统)的最大区别在于所有的内核功能都被编译在一起,成为一个单独的镜像文件。单内核的优点是效率非常高,内核中各个功能模块的交互是通过直接的函数调用来进行的。而微内核则只实现内核中关键和核心的一部分,其他的功能模块单独编译,功能模块之间的交互由微内核提供的通信机制来建立。对于Linux的单内核而言,其缺点就是要增加或删除内核的某种功能,将不得不重新编译整个内核,然后再重新启动,这对于驱动开发前期是非常不友好的。为了弥补这一缺点,L原创 2020-08-02 10:54:27 · 171 阅读 · 0 评论