Linux设备分成三种基本类型:
- 字符设备
- 块设备
- 网络设备
设备驱动程序也分为对应的三类:字符设备驱动程序、块设备驱动程序和网络设备驱动程序。
在Linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是Linux内核对设备的抽象,一个设备节点就是一个文件。应用程序通过一组标准化的调用执行访问设备,这些调用独立于任何特定的驱动程序。而驱动程序负责将这些标准调用映射到实际硬件的特有操作。
设备节点,驱动,硬件设备是如何关联到一起的呢?
这是通过设备号实现的,包括主设备号和次设备号。当我们创建一个设备节点时需要指定主设备号和次设备号。应用程序通过名称通过名称访问设备,而设备号指定了对应的驱动程序和对应的设备。主设备号标识设备对应的驱动程序,次设备号由内核使用,用于确定设备节点所指设备。
设备号的分配
在建立设备前,驱动首先要做的就是获得一个或者多个设备编号。一部分主设备号已经静态分配给了大部分常见设备,在Documentation/devices.txt文件中可以查到设备清单。设备号的分配有两种方式:1)简单选定一个未被使用的编号。调用intregister_chrdev_region(dev_t first, unsigned int count, char *name) 进行静态注册。这种方式选定的主设备号一旦驱动程序被广泛使用,可能造成