在一个项目中,我只有一个传感器,在其他项目中,只有两个传感器。我希望我的内核模块能够支持N个传感器,而不是固定数量的传感器。我在管理1个以上的struct i2c_客户端并为每个客户端创建sysfs条目方面存在问题。我是这样做的:
-
probe()
我得到的函数
struct i2c_client*
I2C_BOARD_INFO()
对于
-
kobject_create_and_add("tmp102", kernel_kobj)
获取中模块的主目录
系统文件系统
-
对于我正在创建的每个设备
sysfs_create_group()
它获取指向静态创建的属性的指针。属性具有
(*show)()
(*store)()
指针设置为静态函数,例如。
static ssize_t tmp102_sysfs_thigh_get_one(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
在这个函数中,我想通过I2C进行读取。问题是。。。我不知道怎么拿到
struct i2c_client *
输入,I2C地址在那里!
我应该如何正确地“链接”i2c_客户端
条目,以便我可以获得函数中的I2C地址?
理想情况下,我希望只有一组函数(每个属性一个)。这个
树应该是这样的:
/sysfs/kernel/tmp102
|
|-> <hex i2c address, e.g. /48>
| |
| |-> temperature
|
|
|-> /49
|
|-> temperature
我希望两个“温度”属性使用相同的函数,该函数能够确定它应该写入的I2C地址。
i2c_client
编辑:
struct device_attribute
attribute
s、 据我所知,获得
struct device
使用常规属性时的指针,与
struct i2c_client
. 它们不容易与
kobject
/sys/kernel
,其中我需要具有此项目的属性。
device_attribute
/sys/devices
-我用过
sysfs_create_group
并链接了我的设备
kobject公司
device_属性
组我用过
sysfs_create_link
,并链接我的设备的
kobject公司
和
/sys/kernel/tmp102
. 这样,我可以为每个设备创建一个文件夹(链接),指向中的原始属性文件夹