字符设备驱动程序主编号和次编号
文章目录
在前面的文章中,介绍了如何给内核驱动程序在加载时传递参数和参数变化时通知回调函数的使用。本文将详细介绍字符设备驱动程序主编号和次编号。
1、字符设备及驱动介绍
通常,操作系统旨在向用户应用程序隐藏底层硬件详细信息。 但是,应用程序确实需要能够访问硬件外围设备捕获的数据,以及能够通过输出驱动外围设备。 由于外设寄存器只能由 Linux 内核访问,因此只有内核能够收集这些外设捕获的数据流。
Linux 需要一种机制将数据从内核空间传输到用户空间。 这种数据传输是通过设备节点(也称为虚拟文件)处理的。 设备节点存在于根文件系统中,尽管它们不是真正的文件。 当用户从设备节点读取时,内核将底层驱动程序捕获的数据流复制到应用程序内存空间中。 当用户写入设备节点时,内核将应用程序提供的数据流复制到驱动程序的数据缓冲区中,最终通过底层硬件输出。 这些虚拟文件可以由用户应用程序使用标准系统调用“打开”、“读取”或“写入”。
每个设备都有一个独特的驱动程序,用于处理最终传递给核心的用户应用程序的请求。 Linux支持三种类型的设备:字符设备、块设备和网络设备。 虽然概念相同,但这些设备中的每一个的驱动程序的不同之处在于文件“打开”和“读取”或“写入”的方式。 字符设备是最常见的设备,无需缓冲,直接读写,如键盘、显示器、打印机、串口等。 块设备只能以块大小的倍数写入和读取,通常为 512 或 1024 字节。 它们可以被随机访问,即任何块都可以读取或写入,无论它在设备上的哪个位置。 块设备的一个典型示例是硬盘驱动器。 网络设备通过 BSD 套接字接口和网络子系统访问。