字符设备驱动、块设备驱动和网络设备驱动
字符设备驱动、块设备驱动和网络设备驱动是操作系统中三种不同类型的设备驱动程序。它们主要根据所管理的硬件类型及其与系统交互的方式而有所不同。下面是这些驱动类型的主要差异:
①字符设备驱动(Character Device Drivers)
数据传输方式:通常以字节流的形式进行数据传输,没有固定大小的数据块。
操作方式:支持读写操作,但不支持随机访问或定位到特定位置的能力。
应用场景:串行端口、打印机、鼠标、键盘等。
API接口:通常使用文件系统的read()和write()等标准I/O函数进行交互。
probe函数的具体执行过程:
交叉编译过程:选择目标平台-》准备交叉编译链-》配置编译环境-》交叉编译-》链接-》运行
字符设备驱动动态申请设备号是:int alloc_chrdev_region 静态申请和注册设备号:int register_chrdev_region(事先定义主次设备号)
当修改设备树后烧录后,在sys目录下的bus下的i2c总线会看到我们创建的设备,当使用指令insmod加载驱动文件的时候,驱动使用i2c_add_driver()将自身注册到I2C总线上,当内核检测到与该驱动相匹配的I2C设备时,会调用此sht30_probe函数来进行设备的初始化和设置。
②块设备驱动(Block Device Drivers)
数据传输方式:以固定大小的数据块进行读取和写入操作。
操作方式:支持随机访问,即可以立即跳转到任何指定的块位置进行读写。
应用场景:硬盘、SSD、CD/DVD驱动器等存储介质。
API接口:除了基本的读写操作外,还可能提供一些高级功能,如格式化、分区管理等。
③网络设备驱动(Network Device Drivers)
数据传输方式:处理数据包(通常是IP数据包),这些数据包包含头部信息以及有效载荷。
操作方式:负责接收和发送数据包,并处理网络层协议栈中的数据传输。
应用场景:网卡、路由器、交换机等网络设备。
API接口:通过操作系统提供的网络堆栈接口进行交互,例如TCP/IP堆栈。
④总结
数据结构:字符设备通常以字节为单位;块设备则以固定大小的块为单位;网络设备以数据包为单位。
访问模式:字符设备支持顺序访问;块设备支持随机访问;网络设备通常支持基于连接或无连接的数据传输。
用途:字符设备用于简单的输入输出设备;块设备用于存储设备;网络设备用于通信。