我是内核和驱动程序编程的新手,所以我希望我的问题不会太简单。
我正在使用 madwifi 驱动程序,以添加我自己的一些功能。在我的代码中,我添加了一些需要在实际代码开始之前初始化的变量和结构。
在工作中我遇到了以下问题:
负责初始化此变量/结构的函数的最佳位置在哪里?
据我所知,有一个特殊的宏 *module_init* 在将模块加载到内核时执行,但是,我在 madwifi 驱动程序代码中找不到它。我发现的是另一个著名的宏,*exit_module*。
所以我的问题是:
- 是否建议添加一个 init_module 并在那里进行所有初始化?
- 是否建议使用 exit_module 来释放分配的内存?
感谢您的帮助!
欧麦尔
最佳答案
每个模块(驱动程序)都定义了两个函数,一个在模块加载到内核时调用,一个在模块被删除时调用。
module_init()
和 module_exit()
是两个特殊的内核宏,为这些角色声明了两个函数。
我想你的驱动程序有初始化函数。 init()
函数通常用于初始化或注册您的驱动程序。
还要检查 probe()
函数。如果您的驱动程序可以支持多个设备,一旦注册了驱动程序,内核就会为每个设备调用一次 probe()
。此探测函数启动每个设备的初始化:初始化硬件、分配资源以及将设备作为 block 或网络设备或其他任何内容向内核注册。
关于linux - 初始化内核模块变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497202/