linux - 初始化内核模块变量

标签 linux linux-kernel wifi linux-device-driver

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

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

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

感谢您的帮助!

欧麦尔

最佳答案

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

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

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

关于linux - 初始化内核模块变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497202/

相关文章:

linux - SVN。访问权

linux - 在 D 中向用户显示消息框的简单方法

c++ - 在 Linux 上使用 kbhit() 和 getch()

linux-kernel - Linux 内核 - 内核中的哪些数据 block 物理写入特定磁盘分区?

android - 如何检查我是否连接到某个 wifi 网络?

python - UNIX 命名的 PIPE 文件结尾

Linux DMA API : specifying address increment behavior?

linux - 如何知道哪个是当前内核模块?

ios - 仅通过Wifi测试iOS连接

c# - 检测wlan是否关闭