获取此模块的结构设备指针?
Get struct device pointer for this module?
有没有办法为内核驱动程序中的当前模块获取指向 "struct device" 的指针?
没有。模块中没有 "current device" 的广义概念。模块只是一种将代码动态添加到内核的方法。它不一定包含(仅)单个设备驱动程序,甚至根本不包含设备驱动程序——尽管这是它最常见的功能。
您可以自由声明您自己的全局变量,指向您选择的结构设备。
在Linux设备驱动模型(LDDM)中,内核驱动的probe
方法以第一个参数作为设备被调用。但是第一个参数的类型取决于您的驱动程序所针对的设备class。
例如,UART 平台设备驱动程序将具有 int (*probe)(struct platform_device *);
。
所以第一个参数 platform_device
是 LDDM 标准 struct device
结构的包装器,它将指向底层硬件检测到的当前设备。
如果您的内核模块驱动程序支持多个设备,那么您可能希望维护所有 struct device
结构的链表或在全局驱动程序私有变量(声明为静态以保护其他内核驱动程序模块访问此链表并破坏您的设备操作)。
有没有办法为内核驱动程序中的当前模块获取指向 "struct device" 的指针?
没有。模块中没有 "current device" 的广义概念。模块只是一种将代码动态添加到内核的方法。它不一定包含(仅)单个设备驱动程序,甚至根本不包含设备驱动程序——尽管这是它最常见的功能。
您可以自由声明您自己的全局变量,指向您选择的结构设备。
在Linux设备驱动模型(LDDM)中,内核驱动的probe
方法以第一个参数作为设备被调用。但是第一个参数的类型取决于您的驱动程序所针对的设备class。
例如,UART 平台设备驱动程序将具有 int (*probe)(struct platform_device *);
。
所以第一个参数 platform_device
是 LDDM 标准 struct device
结构的包装器,它将指向底层硬件检测到的当前设备。
如果您的内核模块驱动程序支持多个设备,那么您可能希望维护所有 struct device
结构的链表或在全局驱动程序私有变量(声明为静态以保护其他内核驱动程序模块访问此链表并破坏您的设备操作)。