获取Linux内核模块中现有设备类(结构类)的指针
获取Linux内核模块中现有设备类(获取Linux内核模块中现有设备类(结构类)的指针,linux,driver,device,Linux,Driver,Device,获取Linux内核模块中现有设备类(struct class)的指针 大家好 我试图在现有设备类中注册设备,但在获取指向现有类的指针时遇到问题。内核版本是Linux3.3.6。 我可以在模块中创建一个类,获取指向该类的指针,然后使用该类将设备注册到: *cl = class_create(THIS_MODULE, className); dev_ret = device_create(*cl, NULL, *dev, NULL, driverName); 但是,我需要在同一个类中向另一个模块注
struct class
)的指针
大家好
我试图在现有设备类中注册设备,但在获取指向现有类的指针时遇到问题。内核版本是Linux3.3.6。
我可以在模块中创建一个类,获取指向该类的指针,然后使用该类将设备注册到:
*cl = class_create(THIS_MODULE, className);
dev_ret = device_create(*cl, NULL, *dev, NULL, driverName);
但是,我需要在同一个类中向另一个模块注册另一个设备,但是我找不到一种方法来获取指向现有类的指针。我无法在另一个模块中再次创建该类,因为类已经存在class\u create
返回NULL,而不是指向device\u create
所需的类的指针。
我发现:
按名称返回指向类的指针的函数:
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
。
我看到的所有函数都需要指向kobject
或kset
的指针才能开始遍历。但是我甚至没有指向sysfs
或内核对象的根的指针,因此我无法开始遍历树以获取类指针
有人能给我指出正确的方向吗?我想输入核心就是这样做的,下面是代码片段 看看:
致以最良好的祝愿 您引用的链接描述了一个从未进入Linux内核的补丁——这就是为什么您无法调用
class\u find
。这是相关的LKML线程:。您好,您解决了这个问题吗?我也陷入了这个问题。