Linux内核(内核模块)的加载过程

yizhihongxing

首先要理解Linux内核的加载过程。当计算机启动时,系统会将一部分内核代码加载到内存中。可以将内核代码分为两部分:在编译期间静态编译进内核的代码和编译为模块的代码。前者出现在内存中,称为内核镜像,对于后者,内核在运行时才会加载和卸载,这些代码则称为内核模块。下面,我们将详细阐释内核模块的加载过程。

内核模块的自动加载通常发生在如下情况下:

  • 一个硬件设备在系统中被检测到,需要相应的驱动程序。
  • 一个特定的命令被执行时(如,modprobe命令)。

接下来,我们来看看这个自动加载的过程及其中涉及到的步骤。

  1. 内核建立模块列表 - 内核会遍历系统上的目录/lib/modules//下的目录和所有子目录,来寻找可用的内核模块。在这个过程中,内核会读取每个模块的描述文件,来确定这个模块要执行的操作。一般来说,这些操作是驱动程序和系统支持库的形式。

  2. 模块的依赖关系 - 模块间的依赖关系非常重要,因为它可以帮助内核确保模块正确加载。内核会读取每个模块的描述文件,了解其依赖关系,确保按顺序加载依赖的模块。

  3. 加载模块 - 在确定好模块的依赖关系后,内核才回到模块所在目录,按顺序加载模块到内核镜像中。如果模块出现了任何问题,内核会发出相应的警告消息,并停止这个模块的运行。

举一个例子来说明,给出模块的代码。

#include<linux/module.h> //模块相关头文件 
static int hello_init(void)//模块初始化 
{
    printk(KERN_ALERT "Hello World\n");   //利用 printk 写入日志系统内核日志   
    return 0;
} 
static void hello_exit(void)//模块卸载 
{
    printk(KERN_ALERT "Goodbye cruel world\n");
} 
module_init(hello_init);//入口宏,当初始化函数被调用 
module_exit(hello_exit);//出口宏,当卸载函数被调用 
MODULE_AUTHOR("OSChina Community"); 
MODULE_DESCRIPTION("Hello World Example");
MODULE_LICENSE("GPL");//许可证类型 

上述示例中,使用了module_initmodule_exit这两个函数将hello_inithello_exit与内核模块关联起来。在初始化时,将调用hello_init函数并在成功时返回0,在卸载时,将调用hello_exit函数。同时,建议在操作系统启动时查看系统日志来了解哪些模块已自动加载。

总结一下,Linux内核的内核模块加载过程通常分为三个部分:建立模块列表、识别模块之间的依赖关系和加载模块。内核模块一般在硬件检测到后自动加载,也可以使用modprobe手动加载。要编写自己的内核模块,需要了解在模块代码中使用的宏和函数。除此之外,模块描述文件也是实现模块的重要部分,需要指定模块的依赖关系和其他系统参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux内核(内核模块)的加载过程 - Python技术站

(0)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • 详解Linux kill命令:杀死进程

    Linux中kill命令是用来发送特定信号给指定的进程,以便对进程进行控制。下面是kill命令的使用方法及相关的参数。 命令格式 kill [options] <pid> […] 命令参数 参数 作用 -a, –all 按照给出的pid,逐一发送kill信号 -u, –user <用户名> 按照给出的用户名,逐一发送kill信…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux LV逻辑卷(创建、查看、调整大小及删除)

    下面是关于Linux LV逻辑卷的完整攻略。 LV逻辑卷简介 LVM(逻辑卷管理器)是Linux下用于管理硬盘分区的系统服务,它通过对物理分区(PV)和逻辑卷(LV)的动态管理,实现了对硬盘容量的动态扩展和缩减,以及对数据的动态迁移和备份。LV逻辑卷则是LVM逻辑卷管理器管理的基本数据逻辑单位。 LV逻辑卷的创建 新建逻辑卷的步骤可以概括为以下几个步骤: 先…

    Linux高级文件系统管理 2023年3月25日
    00
  • 详解Linux chage用法:修改用户密码状态

    Linux chage命令用来更改用户密码过期相关参数。在 Linux 系统中,我们经常会使用 sudo chage -l username 命令来查看一个用户的密码过期相关设置,而使用 chage 命令则可以修改这些设置。 使用方法: sudo chage [选项] 用户名 常用选项: -d, –lastday LAST_DAY:设置上次修改密码的日期。…

    Linux用户和用户组管理 2023年3月25日
    00
  • 详解Linux rmmod命令:卸载内核模块

    关于Linux中rmmod命令的使用方法和作用,我为您提供完整攻略如下: 1. 简介 rmmod命令是Linux中常用的命令之一,它的作用是卸载(移除)一个已经装载的Linux内核模块(module)。当你不再需要这个模块时,可以使用rmmod命令将其从内核中移除,以释放系统资源。 2. 语法 rmmod命令的基本语法如下: rmmod [-f] [-v] …

    Linux函数大全 2023年3月24日
    00
  • 给Linux系统挂载U盘

    以下是给Linux系统挂载U盘的完整攻略: 1.识别U盘设备名 首先需要插入U盘并等待系统识别。可以通过以下命令查看已连接的存储设备: sudo fdisk -l 通常可以看到像/dev/sda,/dev/sdb,/dev/sdc等设备名。通常,U盘设备名是以“sd”开头,后面跟着字母,如sdb或sdc。 2.创建挂载点 在Linux中,U盘需要“挂载”到文…

    Linux文件系统管理 2023年3月25日
    00
  • Linux如何建立交换分区(swap分区)?

    建立交换分区(swap分区)是Linux系统调整内存使用的一种方式。以下是建立swap分区的完整攻略: 1.查看系统已有的分区 使用命令cat /proc/partitions可以查看系统中已有的分区,分区的大小和名称都会显示出来。 2.创建一个分区 使用fdisk命令创建一个新分区。例如,要创建/dev/sda3分区,可以执行以下命令: sudo fdis…

    Linux文件系统管理 2023年3月25日
    00
  • 详解Linux split命令:将文件拆分成多个部分

    当我们需要将文件分割为多个小文件时,可以使用Linux split命令。该命令能够将一个大文件拆分成多个小文件,每个小文件的大小设置可以自定义,也可以设置拆分后小文件的名称。 命令格式 split [选项] [–] [文件] [前缀名称] 选项说明 -a, –suffix-length=长度:指定拆分后小文件名称后缀的长度,默认值为2 -b, –byt…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux fg命令:把后台命令恢复在前台执行

    Linux fg命令是用于将后台运行的作业转入前台,并将其放到终端最前面的命令,其作用可以帮助我们控制当前正在运行的任务。 1. 命令格式 fg [作业编号] 2. 使用方法 当你想把后台运行的命令放到前台时,需要使用到fg命令。 使用方法如下: 1.在终端输入Ctrl + Z,将当前正在运行的命令暂停并放入后台。 2.输入命令fg,将当前正在运行的命令转为…

    Linux系统管理 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部