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

文章目录

    • 概述
    • 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 设备文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『运维备忘录』之 Ansible 自动化运维工具

一、简介 Ansible是基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能的自动化运维工具,广泛用于配置管理、应用部署以及任务协…

为什么要设置止损

2024年1月至2月7日,A股最令人瞩目的事件就是代表小微盘的中证500和中证1000雪球连续敲入,以及万得微盘指数的崩塌(1个月下跌50%)。 这次的这个过程中,止损很重要。一般情况下,如果设置了20%回撤止损的话&am…

Linux版Black Basta勒索病毒针对VMware ESXi服务器

前言 Black Basta勒索病毒是一款2022年新型的勒索病毒,最早于2022年4月被首次曝光,主要针对Windows系统进行攻击,虽然这款新型的勒索病毒黑客组织仅仅才出来短短两个多月的时间,就已经在其暗网平台上已经公布了几十个受害者之多&…

寒假作业-day6

1>请编程实现二又树的操作 1.1二又树的创建 1.2二又树的先序遍历 1.3二又树的中序遍历 1.4二又树的后序遍历 1.5二又树各个节点度的个数 1.6二叉树的深度 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h>typedef char datat…

[项目管理] 如何使用git客户端管理gitee的私有仓库

最近发现即使翻墙也无法g使用ithub了&#xff0c;需要把本地的项目搬迁到新的git托管平台。 gitee 是一个国内开源项目托管平台&#xff0c;是开源开发者、团队、个人进行 git 代码管理和协作的首选平台之一。本文将详细介绍如何向 gitee 提交私有项目。 注册 Gitee 账号并创建…

【芯片设计- RTL 数字逻辑设计入门 14 -- 使用子模块实现三输入数的大小比较】

文章目录 三输入数的大小比较问题分析verilog codeTestBench Code综合图仿真波形图 三输入数的大小比较 在数字芯片设计中&#xff0c;通常把完成特定功能且相对独立的代码编写成子模块&#xff0c;在需要的时候再在主模块中例化使用&#xff0c;以提高代码的可复用性和设计的层…

centos安装harbor

安装docker yum install epel-release yum-utils#docker官网源 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce -y 安装docker-compose curl -SL https://github.com/docker/compose/releases/download/v2…

【buuctf--被偷走的文件】

将 ftp 流量过滤下来&#xff0c;追踪 ftp 流量&#xff0c;得到下图 先解释一下这四行什么意思&#xff1a; PASV&#xff1a; 这是FTP的命令&#xff0c;用于告知服务器在数据连接中使用被动模式&#xff08;Passive Mode&#xff09;。在被动模式下&#xff0c;数据连接的…

【开源】JAVA+Vue+SpringBoot实现公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Merging of neural networks

Merging of neural networks 论文链接&#xff1a;https://arxiv.org/pdf/2204.09973v2.pdf源码链接&#xff1a;https://github.com/fmfi-compbio/neural-network-merging 简介 典型的神经网络训练从随机初始化开始&#xff0c;并进行训练&#xff0c;直到在某些局部最优中…

Golang数据库编程详解 | 深入浅出Go语言原生数据库编程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 Golang学习专栏&#xff1a;https://blog.csdn.net/qq_35716689/category_12575301.html 前言 对数据库…

提速MySQL:数据库性能加速策略全解析

提速MySQL&#xff1a;数据库性能加速策略全解析 引言理解MySQL性能指标监控和评估性能指标索引优化技巧索引优化实战案例 查询优化实战查询优化案例分析 存储引擎优化InnoDB vs MyISAM选择和优化存储引擎存储引擎优化实例 配置调整与系统优化配置调整系统优化优化实例 实战案例…

midnightsun-2018-flitbip:任意地址写

题目下载 启动脚本 启动脚本如下&#xff0c;没开启任何保护 #!/bin/bash qemu-system-x86_64 \-m 128M \-kernel ./bzImage \-initrd ./initrd \-nographic \-monitor /dev/null \-append "nokaslr root/dev/ram rw consolettyS0 oopspanic paneic1 quiet" 2>…

Bpmn-js自定义Palette元素

Bpmn-js作为一个流程编辑器&#xff0c;常规的我们可以将其划分为几个功能区域&#xff0c;每个区域对应的负责不同的功能实现&#xff0c;bpmn-js的设计给我们留下了大量的留白和可扩展区域&#xff0c;其每一部分都可进行组合拼装&#xff0c;同时也支持我们的各种不同层次需…

龙年到,好运绕!想在春节期间开融资融券账户,哪家证券公司支持且利率最低?

融资融券交易是一种杠杆交易&#xff0c;投资者可以借入资金进行股票交易&#xff0c;这样可以放大投资收益的同时也增加了风险。下面是一些融资融券交易的技巧&#xff1a; 选择合适的股票&#xff1a;选择具有投资价值和潜在增长空间的股票进行交易&#xff0c;同时要关注市场…

Map 集合

Map集合 1. 概述2. 方法3. 代码示例4. 输出结果5. 注意事项 实现类&#xff1a; HashTable、HashMap、TreeMap、Properties、LinkedHashMap 其他集合类 具体信息请查看 API 帮助文档 1. 概述 Map是Java中的一种数据结构&#xff0c;用于存储键值对&#xff08;key-value pair&…

学生速看:免费领取一台阿里云学生服务器2024申请入口

2024年阿里云学生服务器免费领取&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之前&#xff0c;完成实验与认证任务&#xff0c;还可以免费续费6个月&#xff0c;阿里云百科aliyunbaike…

【知识整理】管理即服务,识人、识己

1. 背景 一个人的力量是有限的&#xff0c;如何规模化生产&#xff0c;人员的规模化组织&#xff0c;如何提升合作的规模和效率。 管理的本质&#xff1a; 1、服务他人&#xff1f; 2、激发主动性&#xff1f; 3、氛围宽松&#xff1f; 上面是理念&#xff0c; 1、那如何…

MacOS上怎么把格式化成APFS的U盘或者硬盘格式化回ExFAT?

一、问题 MacOS在更新MacOS Monterey后或者更高系统后发现&#xff0c;格式U盘或者硬盘只有4个APFS选项&#xff0c;那么我们该如何将APFS格式成ExFAT&#xff1f; 二、解答 将APFS的U盘或者硬盘拓展成MacOS的拓展格式即可&#xff0c;操作步骤如下 1、电脑接入U盘或者硬盘 2…

vue 实现 手机号中间4位分格输入框(暂无选中标识

vue 实现 手机号中间4位分格输入框 效果图 <!--4位分格输入框--> <!--<template><div><div style"display: flex;"><div class"phone-input"><inputv-for"(digit, index) in digits":key"index"…