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

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

概述获取 Linux内核模块中现有设备类(struct class)的指针 大家好! 我正在尝试在现有设备类中注册设备,但是我无法获取指向现有类的指针.内核版本是Linux 3.3.6. 我可以在模块中创建一个类,获取指向它的指针,然后使用它来注册设备: *cl = class_create(THIS_MODULE, className);dev_ret = device_create(*cl, N 获取 Linux内核模块中现有设备类(struct class)的指针

大家好!

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

*cl = class_create(THIS_MODulE,classname);dev_ret = device_create(*cl,NulL,*dev,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.
我看到的所有函数都需要一个指向kobject或kset的指针来开始遍历.但是我甚至没有指针到sysfs或内核对象的根,所以我无法开始遍历树来获取类指针.

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

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

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

最好的祝福!

总结

以上是内存溢出为你收集整理的获取Linux内核模块中现有设备类(struct class)的指针全部内容,希望文章能够帮你解决获取Linux内核模块中现有设备类(struct class)的指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存