2

我是内核和驱动程序编程的新手,所以我希望我的问题不是太简单。

我正在使用 madwifi 驱动程序,以添加我自己的一些功能。在我的代码中,我添加了一些需要在实际代码开始之前初始化的变量和结构。
在工作时,我遇到了以下问题:将负责初始化此变量/结构的函数放在哪里最好?据我所知,在将模块加载到内核时会执行一个特殊的宏 *module_init*,但是,我在 madwifi 驱动程序代码中找不到它。我发现的是另一个著名的宏,*exit_module*。所以我的问题是:

  1. 是否建议添加一个 init_module 并在那里进行所有初始化?
  2. 是否建议使用 exit_module 来释放分配的内存?

谢谢您的帮助!

奥马尔

4

2 回答 2

5

每个模块(驱动程序)定义了两个函数,一个在模块加载到内核时调用,另一个在模块被删除时调用。 module_init()并且module_exit()是两个特殊的内核来为这些角色声明两个函数。

我想你的驱动程序有初始化功能。init()函数通常用于初始化或注册您的驱动程序。

还要检查probe()功能。如果您的驱动程序可以支持多个设备,则一旦注册了驱动程序,内核probe()就会为每个设备调用一次。这个探测函数启动每个设备的初始化:初始化硬件,分配资源,以及将设备注册到内核作为块设备或网络设备或其他任何设备。

于 2013-03-19T11:56:21.253 回答
2

正如我在评论中所说,初始化代码可以在init_module函数中。

关于你的问题:

  1. 模块初始化函数 ( init_module) 是驱动级初始化的正确位置。建议使用它,除非您的需求对于 C 静态变量初始化来说是微不足道的。
  2. 清理函数 ( cleanup_module) 必须确保驱动程序已释放它分配的任何资源。这是释放初始化期间分配的任何内容的正确位置。
于 2013-03-19T12:11:17.137 回答