4.8 实验4-2:“class字符设备”模块
在这个内核模块实验中,你将使用之前开发的helloworld_imx_char_driver
。但是这次设备节点的创建将由设备文件系统负责而不是手动创建。
在当前驱动代码中添加一个条目到/sys/class/
目录。/sys/class/
目录将设备驱动按类别分组。
当支持特定主设备编号的驱动通过register_chrdev_region()
函数注册到内核时,并没有指定任何关于驱动类型的信息。因此也不会在/sys/class/
目录下创建新的条目。/sys/class
目录下的条目对于在/dev
目录下创建设备节点的设备文件系统来说是必需的。在/sys
目录下,驱动有一个类别名,而每一个设备都有一个设备名。
驱动使用下面的内核API创建/销毁类别:
驱动使用下面的内核API创建设备节点:
当前驱动和之前开发的helloworld_imx_char_driver
驱动的主要区别描述如下:
1. 包含下面的头文件以创建类别和设备文件:
2. 你的驱动将包含一个类别名和一个设备名;hello_class
用作类别名,mydev
作为设备名。这将导致设备文件出现在文件系统的/sys/class/hello_class/mydev
位置。为设备和类别名添加如下定义:
3. hello_init()
函数比helloworld_imx_char_driver
驱动中的实现要更长一些。因为现在我们使用alloc_chrdev_region()
函数自动地给设备分配一个主设备号。同时我们需要注册设备类别并创建设备节点。
在接下来的代码清单4-4中查看针对i.MX7D处理器的“class字符设备”驱动源代码(helloworld_imx_class_driver.c
)。
注意:针对SAMA5D2(helloworld_sam_class_driver.c
)和BCM2837(helloworld_rpi_class_driver.c
)的驱动源代码可以从本书的GitHub仓库下载。