linux inotify研究5

上次监测/dev目录,只有在鼠标插拔的时候,event0文件属性才会发生变化,移动鼠标、按键都是没有反应的,这是为什么呢?

Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备")。每个设备在 /dev 目录下都有一个对应的文件(节点)。可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。内核能够识别的所有设备都记录在原码树下的 Documentation/devices.txt 文件中。在 /dev 目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西没有主/次设备号。

首先,/dev目录下都是设备节点。

设备节点举例:

0 未命名设备(例如:挂载的非设备)
0 = 为空设备号保留
1 char 内存设备
1 = /dev/mem 直接存取物理内存
2 = /dev/kmem 存取经过内核虚拟之后的内存
3 = /dev/null 空设备。任何写入都将被直接丢弃,任何读取都将得到EOF。
4 = /dev/port 存取 I/O 端口
5 = /dev/zero 零字节源,只能读取到无限多的零字节。
7 = /dev/full 满设备。任何写入都将失败,并把errno设为ENOSPC以表示没有剩余空间。
8 = /dev/random 随机数发生器。完全由用户的输入来产生随机数。
如果用户停止所有动作,则停止产生新的随机数。
9 = /dev/urandom 更快,但是不够安全的随机数发生器。尽可能由用户的输入来产生随机数,、


字符设备在实现时,大多不使用缓存器。系统直接从设备读取/写入每一个字符。

鼠标和键盘都属于字符设备。遥控器也是。


创建节点

节点是由mknod系统调用创建的。在命令行中,有同名的程序来创建节点。rename和unlink系统调用可以用于移动和删除节点,相应的命令是mv和rm。在使用cp命令时加上-R-a参数,可以创建一个与原设备节点具有同样属性的节点

命名约定

在基于Linux的系统中,设备节点一般在/dev下,通常使用如下的前缀:


/dev设备文件存储目录,应用程序通过对些文件的读写和控制就可以访问实际的设备。


poll函数一般用于询问设备是否可被非阻塞地立即读写。当询问的条件未触发时,用户空间进行select和poll系统调用会引起进程的阻塞。

好好看看poll以及select的定义以及说明。说不定关键在这里。


阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。

open默认打开的时候,是阻塞式的。O_NONBLOCK是阻塞式的。


终于翻到了输入设备驱动。

输入设备(如按键、键盘、鼠标、触摸屏等)都是典型的字符设备。其一般的工作原理是底层在按键、触摸等动作发生时产生一个中断,

或者驱动通过timer定时查询,然后cpu通过spi,i2c或者玩不存储器总线读取键值、坐标等数据,放入一个缓冲区,字符设备驱动管理

这个缓冲区,而驱动的read()接口可以让用户读取键值,坐标等数据。


dfb里面针对每一类驱动,都启动了一个线程。用于分发按键或者鼠标事件



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值