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

相关推荐
2CM_Embed2 天前
μC/OS-II 内核结构零基础详解(二):任务控制块、就绪表、调度器与中断切换
操作系统
MicrosoftCloud2 天前
操作系统 02|进程到底被谁推着走?
操作系统·线程·进程·pcb·408·进程状态·调度
坐看风云变幻2 天前
《系统架构师成长之路》第 2 期|计算机基础:从一次 malloc 看懂内存管理
操作系统
2401_872418782 天前
操作系统|进程管理、线程、系统调用、进程间通信与信号
操作系统·pcb·os
艾iYYY3 天前
【无标题】
linux·开发语言·网络·操作系统
打不了嗝 ᥬ᭄4 天前
计算机系统基础:异常、中断与 I/O 的完整脉络
操作系统·计算机系统基础·linux系统调用·异常与中断·io与dma
doujiaozh5 天前
我在 Win7 老电脑上从零手搓了一个操作系统内核:32位分页、中断接管与 Shell 终端
操作系统·汇编语言
打不了嗝 ᥬ᭄6 天前
计算机系统基础:程序的表示、转换与链接
操作系统·计算机系统基础
Coisinier7 天前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
云计算练习生8 天前
什么是内存分配算法?首次适应、最佳适应、最坏适应
操作系统·内存·内存分配算法·内存算法