字符设备、块设备、网络设备
设备模型
设备驱动的代码量占内核程序的50%
设备模型的意义:
为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核所规定的数据结构的填充和实现。
因为硬件设备多种多样,使得设备驱动程序繁多,设备模型将硬件设备分类,抽象出一套标准的数据结构和接口。
一、字符设备
1.特点
一个字节一个字节读写的设备,
读取数据需要按照先后数据(顺序读取)
常见的字符设备有鼠标、键盘、串口、控制台和LED设备
每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备。
2.上层应用如何调用底层驱动?
1.应用层的程序open(“/dev/xxx”,mode,flags)打开设备文件,进入内核中,即虚拟文件系统中。
2.VFS层的设备文件有对应的struct inode,其中包含该设备对应的设备号,设备类型,返回的设备的结构体。
3.在驱动层中,根据设备类型和设备号就可以找到对应的设备驱动的结构体,用i_cdev保存。该结构体中有很重要的一个操作函数接口file_operations。
4.在打开设备文件时,会分配一个struct file,将操作函数接口的地址保存在该结构体中。
5.VFS层 向应用层返回一个fd,fd是和struct file相对应,这样,应用层可以通过fd调用操作函数,即通过驱动层调用硬件设备了。
二、块设备
1.特点
数据以固定长度进行传输,比如512K
从设备的任意位置(可跳)读取,但实际上,块设备会读一定长度的内容,而只返回用户要求访问的内容,所以随机访问实际上还是读了全部内容。
块设备包括硬盘、磁盘、U盘和SD卡等
每个块设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作块设备。
块设备可以容纳文件系统,比如磁盘
三、网络设备
1.特点
面向报文而不是面向流的,因此将网络接口映射到文件系统的节点比较困难
内核调用一套和数据包相关的函数,而不是read,write。
网络接口没有像字符设备和块设备一样的设备号,只有唯一的名字,如eth0,eth1
主要通过socket操作,打开通常用命令行,
2.关系
网络协议接口层:网络层,IP
网络设备接口层:将协议和各种网络驱动连接在一起,这一层提供一组通用函数供底层网络设备驱动使用。
网络驱动接口层:数据链路层,提供对物理层访问的设备驱动程序,这可以是各种介质,例如串口链路或以太网设备。包括LLC和MAC层
物理层:PHY层
————————————————
版权声明:本文为CSDN博主「qq_27840681」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27840681/article/details/77567094