我是内核和驱动程序编程的新手,所以我希望我的问题不是太简单。
我正在使用一个madwifi驱动程序,以便添加我自己的一些功能。在我的代码中,我添加了一些需要在实际代码开始之前初始化的变量和结构 工作时我遇到了以下问题: 在哪里是负责初始化这个变量/结构的函数的最佳位置? 据我所知,有一个特殊的宏* module_init *在将模块加载到内核时执行,但是,我在madwifi驱动程序代码中找不到它。我找到的是另一个着名的宏,* exit_module *虽然。 所以我的问题是:
感谢您的帮助!
欧麦
答案 0 :(得分:4)
每个模块(驱动程序)都定义了两个函数,一个在模块加载到内核时调用,另一个函数在移除模块时调用。
module_init()
和module_exit()
是两个特殊的内核宏,用于为这些角色声明两个函数。
我想你的驱动程序有init函数。 init()
函数通常用于初始化或注册您的驱动程序。
同时检查probe()
功能。如果您的驱动程序可以支持多个设备,则一旦注册了驱动程序,内核将为每个设备调用probe()
一次。此探测功能启动每个设备的初始化:初始化硬件,分配资源,以及将内核注册为块或网络设备或其他任何内容。
答案 1 :(得分:1)
正如我在评论中所说,初始化代码可以在init_module
函数中。
关于你的问题:
init_module
)是正确的
驱动程序级初始化的地方。建议使用它,
除非你的需求对C静态变量足够微不足道
初始化。 cleanup_module
)
确保驱动程序已释放它已分配的任何资源。
这是免费分配任何东西的合适场所
初始化。