首先,gpio_wdt.c
截至目前,这个驱动程序似乎不存在于主线内核中,因此很难评论它。
Sysfs(通常安装在/sys
)实际上非常容易使用。这是如何创建 Sysfs 属性的一个很好的例子。基本上,您创建属性(将成为 Sysfs 文件名)并使用两个定义的操作(回调)注册它们:store和show,它们等效于 resp。写和读。每次读取和存储Sysfs 文件(属性)时,都会调用show回调。
在编写属于现有类的设备驱动程序时(很可能是您的情况),您很少需要自己这样做。这是因为标准 Linux 设备类已经具有一组工作的 Sysfs 属性,您的驱动程序或多或少会间接使用这些属性。
例如,leds
您可以在其中找到设备的类(LED 设备),/sys/class/leds
每个 LED 都有一堆 Sysfs 属性,以便用户可以从用户空间读取/修改它们(亮度、最大亮度、触发器等)。现在,如果您查看 中的 LED 特定驱动程序/drivers/leds
,您将找不到手动 Sysfs 属性创建。但是,您会发现led_classdev_register
当驱动程序被探测时调用,它以 astruct led_classdev*
作为参数。此结构具有brightness_set
特定驱动程序需要提供的回调成员。当用户写入时/sys/class/leds/whatever-led/brightness
,将调用leds
类的store Sysfs 回调,进而调用特定驱动程序的brightness_set
回调。
我的观点是:在手动添加 Sysfs 属性之前,请确保您真正了解您的设备类。无论如何,当您将驱动程序提交给 LKML 时,您会很快知道这是一个好的决定。