module_init宏是什么?

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

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

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

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

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

相关推荐
流浪00113 小时前
Linux系统篇39——线程(四) pthread库的由来和线程的创建与等待
linux·操作系统·线程·pthread库
流浪00121 小时前
Linux系统篇42——线程(七) pthread库管理线程的工作流,从创建到回收
linux·操作系统·线程·线程创建到销毁
encoderlee1 天前
ubuntu server 如何播放视频显示网页
linux·ubuntu·音视频·树莓派·ubuntu server·arm嵌入式
云计算练习生1 天前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix
云计算练习生2 天前
什么是上下文切换?进程切换时 CPU 到底在保存什么
linux·服务器·操作系统·进程切换
Raspberry_Pi_官方账号3 天前
Raspberry Pi 官方分享:利用 14MB 的 Function-Calling LLM 实现端侧自然语言硬件控制
python·树莓派·raspberry pi
CS创新实验室4 天前
为什么三台机器就能选出一个“带头大哥“?——Raft 一致性算法,一次讲透
分布式·操作系统
sweet丶4 天前
iOS 为什么没有内存交换分区(swap)
操作系统
我爱cope10 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统
菲斯奇10 天前
老骥伏枥:树莓派 4B 重装 64 位系统后接管日常
树莓派