浅析Linux内核模块自加载机制

news2024/11/15 23:30:49

文章目录

    • 概述
    • Linux内核模块管理
      • 内核模块存放目录
        • modules系列文件
      • 阻止模块启动时加载
    • systemd-module-load.service
      • 配置文件
      • 内核启动参数
    • udev动态加载机制
      • udev工作流程
      • udev配置示例:网卡重命名
    • 相关参考

概述

模块自加载用于配置系统在启动时自动加载所需要的模块,这在添加新的设备和驱动很有用。Linux系统中可以实现模块自加载的机制通常有两种方式:

  • 方式1:基于systemd提供的modules-load服务,使用静态配置。
  • 方式2:基于udev的动态加载机制。

Linux内核模块管理

在进一步说明上述机制前,对于Linux内核模块的管理需要有个基本的了解,内核模块所暴露的信息,是这两种机制正确加载模块所必不可少的一部分。

内核模块存放目录

所有的内核模块默认都会安装到在/lib/modules/uname -r路径下,通常包含的内容如下:
在这里插入图片描述
先看该路径下包含的目录信息,这些目录按照类别存放了不同的内核模块:

  • kernel:用于存放Linux源码中包含的内核模块;
  • extra:存放外部的内核模块
  • weak-updates:存放与当前安装内核kABI兼容的内核模块;
  • updates:NA
  • vdso:NA
modules系列文件

除了存放内核模块的目录外,/lib/modules/uname -r路径下还包含了一系列以modules开头的文件,这些文件描述内核模块的一些关键信息,例如模块命名、依赖关系、导出符号等。

  • modules.alias:记录模块的命名;
  • modules.dep:记录模块间的依赖关系,在使用modprobe加载模块时,会根据该文件查找依赖的内核模块;
  • modules.order:记录模块的加载顺序;
  • modules.symbols:记录模块导出的外部符号。

其它modules.*文件则保存了某一子系统的内核模块列表,比如modules.block就保存了块设备相关的模块,modules.builtin保存了编译进内核的模块。

阻止模块启动时加载

如果想要阻止一个内核模块在系统启动时加载,在文件夹/etc/modprobe.d目录下创建一个.conf文件,通过blacklist来屏蔽模块的自动加载,如下:

blacklist module_name

systemd-module-load.service

目前,所有必要模块的加载均由udev自动完成,但是,有些情况下可能需要在系统启动时加载某个额外的模块,这时就可以使用systemd-module-load.service。systemd-modules-load.service是systemd提供的一个开机自启动服务,用于在系统启动时根据静态的配置文件或者内核启动参数加载内核模块。
在这里插入图片描述

配置文件

systemd-modules-load.service支持识别以下目录中的配置文件:

  • /etc/modules-load.d/*.conf
  • /run/modules-load.d/*.conf
  • /lib/modules-load.d/*.conf
  • /usr/lib/modules-load.d/*.conf
  • /usr/local/lib/modules-load.d/*.conf

systemd-modules-load.service从上述目录中读取 *.conf 文件,这些 *.conf 文件中静态的包含了需要在系统启动时无条件加载的内核模块列表。

内核启动参数

除了配置文件,systemd-modules-load.service还支持识别以下的内核引导选项:

modules_load=, rd.modules_load=

上述选项通过接受一个内核模块列表,表示在系统启动的早期,无条件的加载这些内核模块。以 “rd.” 作为前缀的选项仅作用于 initial RAM disk 环境。

udev动态加载机制

udev是使用uevent机制来处理设备热插拔事件的用户空间程序,并取代原来的devfs机制。动态管理设备和驱动的加卸载是udev的基础功能。

udev工作流程

udev使用netlink机制与内核进行通信,它在系统启动时运行了一个后台程序udevd,监听内核发送的uevent事件,并通过一套规则匹配可发现的设备事件和属性,来执行相应的热拔插动作,支持创建/删除设备节点、加载/卸载驱动模块等。

在这里插入图片描述

udev配置示例:网卡重命名

对于多网卡命名需要在/etc/udev/rules.d/70-persistent-net.rules文件中,定义多条定义规则。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="24:6e:96:03:5c:8d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="24:6e:96:03:5c:8a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="24:6e:96:03:5c:8c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:58:0e:01", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

相关参考

  • modules-load.d 中文手册
  • Linux设备驱动模块自加载示例与原理解析
  • depmod (生成内核、模块、依赖关系列表和关联的映射文件)
  • udev高效、动态地管理 Linux 设备文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1438775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ctfshow-web11~20-WP

web11 根据提示,查询对ctfshow域名进行dns查询,查看TXT记录 阿里云查询链接:阿里云网站运维检测平台 获取flag成功 web12 根据题目提示,我们访问robots.txt,获取到后台地址 然后我们访问一下后台

算法效率的度量-时间空间复杂度

常对幂指阶 1.时间复杂度 事前预估 算法 时间开销 T(n) 与 问题规模 n 的关系( T 表示 “ time ”) 一般默认问题规模为n。 1.单循环 2.嵌套两层循环都为n 3.单层循环指数递增型 4.搜索型 链接 :第七章查找算法!&#xff01…

C语言数组与扫雷游戏实现(详解)

扫雷游戏的功能说明 使⽤控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷可以排查雷 ◦ 如果位置不是雷,就显示周围有几个雷 ◦ 如果位置是雷,就炸死游戏结束 ◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结…

PMP备考的三个阶段及学习方法分享

PMP证书是项目管理必备的关键技能证书,是具备进行项目管理的重要技能体现。无论升职加薪,还是从事项目管理工作,都非常重要。 个人主要从事产品开发工作,开始逐渐承担一些项目经理角色,但目前项目管理知识薄弱&#x…

政安晨:示例演绎Python语言外部库的使用

这篇咱们示例演绎Python的一个重要能力:导入、运算符重载和进入外部库世界的生存技巧。 在咱们这一篇中,你将学习Python中的导入,获取使用不熟悉的库(以及它们返回的对象)的一些技巧,并深入了解运算符重载…

0206作业

TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的网络传输协议。它们之间的主要区别在于: 可靠性:TCP 是一种可靠的传输协议,它提供了数据传输的确认、重传和排序功能。如果数据在传输过程…

24.云原生ArgoCD高级之钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具,它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子(Hooks)是一种机制&#x…

Damn Small Linux 停更16年后,2024 回归更新

Damn Small Linux(DSL) 发行版释出了最新的 2024 版本,并重新定义了什么叫“Damn Small”。 DSL 诞生于 2005 年,原本是尝试提供一个 50MB 大小的 LiveCD,2008 年开发停滞。 2024 年原作者 John Andrews 宣布 DSL 复活,在几乎所…

springboot基础案例(二)

文章目录 前言一.需求分析: 分析这个项目含有哪些功能模块二.库表设计(概要设计): 1.分析系统有哪些表 2.分析表与表关系 3.确定表中字段(显性字段 隐性字段(业务字段))2.1 创建一个库: ems-thymeleaf2.2 创建 2张表三.编码(环境搭建)1.创建一个springboot项目 项目名字: ems-t…

【IDEA】反编译Jar包

反编译步骤 使用IDEA安装decompiler插件 找到decompiler插件文件夹所在位置(IDEA安装路径/plugins/java-decompiler/lib ),将需要反编译的jar包放到decompiler插件文件夹下,并创建一个空的文件夹,用来存放反编译后的…

Docker 有哪些常见的用途?

Docker 是一种容器化技术,它允许应用程序在不同的环境之间具有一致的运行环境。这使得 Docker 在开发和运维领域中非常受欢迎,因为它简化了应用程序的部署和管理。以下是 Docker 的一些常见用途: 快速部署应用程序 Docker 允许开发人员和运…

【TCP】高频面试题

前言 在IT行业的求职过程中,传输控制协议(TCP)作为网络通信的核心协议之一,其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石,因此,对TCP有深入理解不仅能够帮助求职…

Linux大集合

Linux Linux是什么? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、 支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和 64位硬件。 Linux内核 是一个Linux系统…

Backtrader 文档学习- Sizers

Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法,即:buy,sell和close。看一下buy的定义: def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…

电路设计(13)——生产线易拉罐自动计数装置的proteus仿真

1.设计要求 使用指定元件,用模电、数电等有关知识,设计并制作一个易拉罐饮料计数自动化的模拟装置。生产单位常采用红外自动计数装置,将装有饮料的易拉罐放在马达带动的传动带上,在传动带运动的过程中让每个易拉罐依次同一方向地穿…

Linux第43步_移植ST公司uboot的第4步_uboot测试

uboot移植结束后,需要进行测试。 1、烧录程序 1)、将STM32MP157开发板的网络接口与路由器的网络接口通过网线连接起来。 2)、将开发板的串口和电脑通过USB线连接起来。 3)、将开发板的USB OTG接口和电脑通过USB线连接起来。 4)、将开发板上拨码开关拨到“000”…

RTthread线程间通信(邮箱,消息队列,信号/软件中断)---01实际使用API函数

layout: post title: “RT-Thread线程间通信” date: 2024-2-5 15:39:08 0800 tags: RT-Thread 线程间通信 这一篇是实际使用, 代码分析看后面的文章 一般可以使用全局变量以及线程间同步进行实现 RT-Thread也提供了一部分的通信机制 邮箱 一个线程发送, 另外的线程接受信息…

二叉树的最近公共祖先,力扣

目录 题目地址: 题目: 审题目事例提示: 解题方法: 解题分析: 解题思路: 代码实现: 补充说明: 代码优化: 代码实现(存储父节点) : 题目地址: 236. 二叉树的最近…

人工智能的运维服务有哪些?智能化运维发展方向有哪些

当前人工智能运维服务的主要类型和特点?智能化运维的未来发展趋势,包括但不限于技术进步、行业应用以及潜在的挑战和机遇。 目前人工智能运维服务的主要类型和优点包括: 基于规则的专家系统:根据事先定义的规则和逻辑进行故障检测和处理。特…

linux centos 安装teleport

效果 安装 1.创建目录 mkdir -p /opt/teleport/data cd /opt/teleport/2.下载解压文件 wget https://tp4a.com/static/download/teleport-server-linux-x64-3.6.4-b3.tar.gz tar -xvf teleport-server-linux-x64-3.6.4-b3.tar.gz3.安装 cd /opt/teleport/teleport-server-l…