Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Linux内核模块中现有设备类(结构类)的指针_Linux_Driver_Device - Fatal编程技术网

获取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); 但是,我需要在同一个类中向另一个模块注

获取Linux内核模块中现有设备类(
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线程:。您好,您解决了这个问题吗?我也陷入了这个问题。