module_init宏是什么?

module_init是 Linux 内核中用于指定模块初始化函数的宏。当内核加载模块时,这个初始化函数将被调用。module_init宏定义在kernel/include/linux/module.h里,它是一个宏函数,其原型如下:

c 复制代码
#define module_init(x)	__initcall(x);

这个宏的作用是将一个函数注册为模块的初始化函数,当内核加载该模块时,该初始化函数将被调用,从而完成模块的初始化工作。模块的初始化函数中可以包含各种初始化代码,例如分配内存、注册设备等,通过module_init,开发者可以在模块加载时执行一些必要的初始化操作,确保模块能够正常工作。

在编写设备驱动程序时,使用这个宏可以注册一个初始化函数,当模块被加载的时候,内核负责执行这个初始化函数。module_initmodule_exit是驱动中最常用的两个接口,主要用来注册、注销设备驱动程序。module_init宏的主要作用是告诉内核,当模块被加载时,应该运行哪个函数。

在动态模式下,驱动是.ko文件,是一种特殊的文件格式,不是 ELF 也不是 lib 文件,但它可以理解为是一个特殊的 lib 文件,它是由内核解析并加载的,通常是由insmod/modprobe通过sys_init_module系统调用来完成驱动加载。内核会去解析它的 ELF 文件并遍历寻找init_module然后调用它。module_init宏的使用是强制性的。这个宏在模块的目标代码中添加了一个特殊的部分,说明模块的初始化函数在哪里。没有这个定义,你的初始化函数永远不会被调用。

相关推荐
hour_go1 天前
用户态与内核态的深度解析:安全、效率与优化之道
笔记·操作系统
LUCIAZZZ2 天前
HTTPS优化简单总结
网络·网络协议·计算机网络·http·https·操作系统
weixin_468466852 天前
树莓派32位与64位系统安装teamviewer远程软件
linux·单片机·自动化·树莓派·远程控制·vnc·teamviewer
算法打盹中3 天前
基于树莓派与Jetson Nano集群的实验边缘设备上视觉语言模型(VLMs)的性能评估与实践探索
人工智能·计算机视觉·语言模型·自然语言处理·树莓派·多模态·jetson nano
小草cys4 天前
在树莓派集群上部署 Distributed Llama (Qwen 3 14B) 详细指南
python·llama·树莓派·qwen
fakerth4 天前
【OpenHarmony文件管理子系统】文件访问接口解析
操作系统·openharmony
Layflok5 天前
第三章 内存管理
笔记·操作系统·内存管理·王道笔记
fakerth7 天前
【OpenHarmony文件管理子系统】文件访问接口mod_fileio解析
操作系统·openharmony
fakerth7 天前
【OpenHarmony文件管理子系统】文件访问接口mod_file解析
操作系统·openharmony
IT成长日记7 天前
【Linux基础】Linux系统管理:深入理解Linux运行级别及其应用
linux·运维·服务器·操作系统·运行级别