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宏的使用是强制性的。这个宏在模块的目标代码中添加了一个特殊的部分,说明模块的初始化函数在哪里。没有这个定义,你的初始化函数永远不会被调用。

相关推荐
linhhanpy3 天前
自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)
c语言·汇编·c++·python·stm32·操作系统
Zevalin爱灰灰6 天前
FreeRTOS从入门到精通 第十三章(信号量)
stm32·单片机·嵌入式硬件·操作系统·freertos
未知陨落6 天前
冯诺依曼系统及操作系统
linux·操作系统
Zevalin爱灰灰7 天前
FreeRTOS从入门到精通 第十二章(FreeRTOS消息队列)
stm32·单片机·嵌入式硬件·操作系统·freertos
韩曙亮8 天前
【系统架构设计师】操作系统 ① ( 知识的三种层次 - 系统知识、高频考点、试题拆解 - 软考备考策略 | 操作系统涉及的软考知识点 | 操作系统简介 )
操作系统·文件管理·软考·进程管理·内存管理·系统架构设计师
做人不要太理性8 天前
【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计
linux·操作系统·冯诺依曼体系
Trouvaille ~10 天前
【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道
linux·学习·开源·操作系统·编程·命令行·基础入门
『往事』&白驹过隙;10 天前
操作系统(Linux Kernel 0.11&Linux Kernel 0.12)解读整理——内核初始化(main & init)之硬盘初始化
linux·c语言·数据结构·物联网·操作系统
『往事』&白驹过隙;12 天前
操作系统(Linux Kernel 0.11&Linux Kernel 0.12)解读整理——内核初始化(main & init)之缓冲区的管理
linux·c语言·数据结构·物联网·操作系统