linux - 获取 Linux 内核模块中现有设备类(结构类)的指针

标签 linux driver device

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

大家好!

我正在尝试在现有设备类中注册设备,但我无法获取指向现有类的指针。内核版本为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 或内核对象的根的指针,所以我无法开始遍历树来获取类指针。

谁能指出我正确的方向?

最佳答案

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

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

最好的问候!

关于linux - 获取 Linux 内核模块中现有设备类(结构类)的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16123973/

相关文章:

linux - Python : Import cairo error (2. 7 & 3.6) undefined symbol :cairo_tee_surface_index

windows - windows如何唯一识别一个USB设备?

c++ - 拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止

c++ - 没有得到正确的功能报告

swift - Xcode App仅在设备上崩溃-EXC_CRASH(SIGABRT)

linux - Spring Tool Suite 3.8.2 - 在 Ubuntu 上安装

linux - 如何在 Linux 中创建虚拟命令支持文件?

linux - 在 Linux 中合并文本文件的两列

linux - 检测用户空间模块是否从 Linux 驱动程序意外死亡

ios - 如何在 ipad 设备上调整导航栏高度