嵌入式Linux设备驱动程序开发指南(原书第2版)
上QQ阅读APP看书,第一时间看更新

4.8 实验4-2:“class字符设备”模块

在这个内核模块实验中,你将使用之前开发的helloworld_imx_char_driver。但是这次设备节点的创建将由设备文件系统负责而不是手动创建。

在当前驱动代码中添加一个条目到/sys/class/目录。/sys/class/目录将设备驱动按类别分组。

当支持特定主设备编号的驱动通过register_chrdev_region()函数注册到内核时,并没有指定任何关于驱动类型的信息。因此也不会在/sys/class/目录下创建新的条目。/sys/class目录下的条目对于在/dev目录下创建设备节点的设备文件系统来说是必需的。在/sys目录下,驱动有一个类别名,而每一个设备都有一个设备名。

驱动使用下面的内核API创建/销毁类别:

086-02

驱动使用下面的内核API创建设备节点:

086-03

当前驱动和之前开发的helloworld_imx_char_driver驱动的主要区别描述如下:

1. 包含下面的头文件以创建类别和设备文件:

087-01

2. 你的驱动将包含一个类别名和一个设备名;hello_class用作类别名,mydev作为设备名。这将导致设备文件出现在文件系统的/sys/class/hello_class/mydev位置。为设备和类别名添加如下定义:

087-02

3. hello_init()函数比helloworld_imx_char_driver驱动中的实现要更长一些。因为现在我们使用alloc_chrdev_region()函数自动地给设备分配一个主设备号。同时我们需要注册设备类别并创建设备节点。

087-03

在接下来的代码清单4-4中查看针对i.MX7D处理器的“class字符设备”驱动源代码(helloworld_imx_class_driver.c)。

注意:针对SAMA5D2(helloworld_sam_class_driver.c)和BCM2837(helloworld_rpi_class_driver.c)的驱动源代码可以从本书的GitHub仓库下载。