通过sysfs访问Linux驱动程序
我正在制作一个小型内核模块,以提供用户空间访问ARMv7芯片(特别是缓存控制)的某些内核模式特性。我正在阅读Corbet,Rubini和Hartman的Linux设备驱动程序。其中他们描述了如何制作完整的驱动程序+设备+总线。我根本不想创造一个公共汽车司机。事实上,我所做的'驱动程序'并不需要完全匹配设备定义 - 它隐含地与平台的CPU相匹配。任何人都可以向我解释:通过sysfs访问Linux驱动程序
- 哪里在sysfs应该我的属性去?是否应该在
/sysfs/modules/mymodule
的模块条目中?/sys/devices/platform
似乎也很有希望,/sys/devices/system/cpu
也是如此。 - 如果现有的地方应该放置我的
kobject
/属性,我该如何将它插入它?我如何获得必要的kset
?我见过的所有示例创建了一个kset
,然后从kobject
链接到它 - 我还没有看到用于请求现有名为kset
的API?
很抱歉,如果这仅仅是不可能明显,或如果有一些非常简单和容易的地方发现的例子,我还没有发现由于某种原因。任何人都可以对此有所了解吗?
我还没有用过很多的sysfs,但是我发现了一个看起来很简单的例子,它与你正在做的很相似(当然,它也在ARM下)。看看arch/arm/mach-omap1/pm.c
,特别是idle_show
/idle_store
sysfs文件。它获得注册(使用sysfs_create_file()
)作为/sys/power/sleep_while_idle
并使用全局 kobj(在include/linux/kobject.h
中定义)。还有一些其他的全球kobj在那里定义,你可以使用,但我认为任何一个都不适合你的驱动程序。
这是一个平台驱动程序吗?作为不适合任何巴士的司机,这似乎是一个不错的选择。平台驱动程序在/ sys/devices/platform下获得自己的目录,并且可以在那里有属性。看看drivers/hwmon/coretemp.c
,它有temp1_crit
,temp1_crit_alarm
,temp1_input
等属性。它看起来相当简单:创建属性(可能与__ATTR()
?),将它们全部列在数组中,定义attribute_group
,在probe()
函数中用sysfs_create_group()
注册它,并在remove()
函数中用sysfs_remove_group()
取消注册。
如果您需要其他示例,可能还有其他定义属性的平台驱动程序(搜索sysfs_create_group
)。希望这可以帮助!
我会看看coretemp.c驱动程序。谢谢! –
更新 - coretemp模块是完美的模板。我有一些sysfs属性工作得很好。再次感谢。 –