小编use*_*861的帖子

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

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

大家好!

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

*cl = class_create(THIS_MODULE, className);
dev_ret = device_create(*cl, NULL, *dev, NULL, driverName);
Run Code Online (Sandbox Code Playgroud)

但是,我需要在同一个类中注册另一个设备与另一个模块,但我找不到一种方法来获取指向现有类的指针.我不能在另一个模块中再次创建类,因为类已经存在,class_create返回NULL而不是指向所需类的指针device_create.我找到了:

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

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

struct class * class_find(char * name)
Run Code Online (Sandbox Code Playgroud)

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

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

list_for_each_entry(this_class, &class_subsys.kset.list, subsys.kset.kobj.entry)
Run Code Online (Sandbox Code Playgroud)

现在class_subsys没有找到符号.我再次认为它被导出到内核.

我不确定缺少什么.一些头?我这样做是错误的吗?还有另外一个功能吗?

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

有人能指出我正确的方向吗?

linux driver device

7
推荐指数
1
解决办法
2311
查看次数

标签 统计

device ×1

driver ×1

linux ×1