7

我正在制作一个小型内核模块,以提供对 ARMv7 芯片(特别是缓存控制)的一些仅内核模式功能的用户空间访问。我正在阅读Corbet、Rubini 和 Hartman 的Linux Device Drivers 。他们在其中描述了如何制作完整的驱动程序+设备+总线。我根本不想创建公共汽车驱动程序。事实上,我正在制作的“驱动程序”根本不需要与设备定义匹配——它隐式地与平台的 CPU 匹配。谁能给我解释一下:

  1. 我的属性应该放在 sysfs 的什么位置?它应该在我的模块条目中/sysfs/modules/mymodule吗?/sys/devices/platform似乎也很有希望,/sys/devices/system/cpu.
  2. 如果有一个现有的地方我应该放置我的kobject/属性,我该如何插入它?我如何获得必要的kset?我见过的所有示例都创建了一个kset然后链接到它kobject- 我还没有看到用于请求现有命名的 API kset

对不起,如果这只是不可能显而易见的,或者如果在某个地方有一些非常简单且容易发现的示例,但由于某种原因我没有发现。任何人都可以对此有所了解吗?

4

1 回答 1

8

我没有过多地使用 sysfs,但我发现了一个看起来很简单的示例,它与您正在做的非常相似(当然,它也在 ARM 下)。看一下arch/arm/mach-omap1/pm.c,特别是idle_show/ idle_storesysfs 文件。它被注册(使用sysfs_create_file())为/sys/power/sleep_while_idle并使用全局/sys/powerkobj(定义在 中include/linux/kobject.h)。那里还定义了一些其他全局 kobj 供您使用,尽管我认为没有一个适合您的驱动程序。

这将成为平台驱动程序吗?作为一个不适合任何公共汽车的司机,这似乎是一个很好的选择。平台驱动程序在 /sys/devices/platform 下有自己的目录,并且可以在那里拥有属性。看一下drivers/hwmon/coretemp.c, 它有temp1_crit, temp1_crit_alarm,temp1_input等作为属性。它看起来相当简单:创建属性(可能使用__ATTR()?),将它们全部列在一个数组中,定义一个attribute_groupsysfs_create_group()在函数中注册它,然后在函数probe()中注销它。sysfs_remove_group()remove()

sysfs_create_group如果您需要其他示例,可能还有其他平台驱动程序定义属性(搜索)。希望这可以帮助!

于 2011-10-13T08:00:54.330 回答