内核里的驱动一般不会主动完成对设备的操作,是用户层有需求的时候,用户层的应用程序操作硬件设备。用户提需求,内核代替用户执行对设备的操作。
用户层调函数,通过系统调用,陷入内核态,有内核代替应用层进程执行相应的操作。
驱动程序本身也是代码,但与应用程序不同,它不会主动去运行,而是被应用程序调用。
应用与驱动程序在系统中所处位置不同,决定了它们代码
运行模式也不一样。
应用程序运行在用户空间(用户态)。
驱动代码运行于内核空间(内核态)。
在linux操作系统中,驱动的作用:
操作硬件设备,给用户层提供操作设备的接口。
地位:
连接硬件设备与内核的桥梁。
linux内核将设备分成3大类:
1. 字符设备 --->>> 字符设备驱动
I/O传输过程中以字符为单位进行传输
用户对字符设备发出读/写请求时实际的硬件读/写操作一般紧接着发生
例如:鼠标、键盘、显示器、触摸屏......
2. 块设备 --->>> 块设备驱动
块设备与字符相反,它的数据传输以块(内存缓冲)为单位传输
用户对块设备读/写时,硬件上的读/写操作不会紧接着发生,即用户请求和硬件操作是异步的
存储设备,是块设备
3. 网络设备 --->>> 网络设备驱动
网络设备是一类特殊的设备,它不像字符设备或块设备那样通过对应的设备文件访问,也不能直接通过read或write进行数据请求,而是通过socket接口函数进行访问。