7

获取struct classLinux 内核模块中现有设备类 ( ) 的指针

大家好!

我正在尝试在现有设备类中注册设备,但无法获取指向现有类的指针。内核版本为 Linux 3.3.6。我可以在模块中创建一个类,获取指向它的指针,然后使用它来注册设备:

*cl = class_create(THIS_MODULE, className);
dev_ret = device_create(*cl, NULL, *dev, NULL, driverName);

但是,我需要使用另一个模块在同一类中注册另一个设备,但我找不到获取指向现有类的指针的方法。而且我无法在另一个模块中再次创建该类,因为由于类已经存在class_create返回 NULL 而不是指向device_create. 我发现:

http://lwn.net/Articles/102500/

通过名称返回指向类的指针的函数:

struct class * class_find(char * name)

但是,当我尝试编译函数时,编译器说它不存在。我以为这个函数是由内核导出的(我的模块有 GPL 许可证),但它似乎不是。也许我需要包含一些标题?

我试图重写这个函数,因为它的代码在上面的链接中列出。但是当我尝试迭代class_subsys时:

list_for_each_entry(this_class, &class_subsys.kset.list, subsys.kset.kobj.entry)

class_subsys现在找不到符号。我再次认为它已导出到内核。

我不确定缺少什么。一些标题?我做错了吗?还有另一个功能可以做到吗?

我想如果我可以从头开始遍历sysfs,我可以获得指向现有类的指针。但我也没有找到如何开始遍历sysfs。我见过的所有函数都需要一个指向kobjectkset开始遍历的指针。但是我什至没有指向根sysfs对象或内核对象的指针,所以我无法开始遍历树来获取类指针。

谁能指出我正确的方向?

4

1 回答 1

0

我认为输入核心是这样完成的,这里是片段

看看:https ://github.com/torvalds/linux/blob/master/drivers/input/input.c#L1720

此致!

于 2014-01-08T15:44:06.087 回答