Linux 内核模块加载知多少

news2024/9/21 23:41:06

文章目录

目录

1. 内核模块

内核模块的作用

2. 内核模块的加载

2.1 内核模块的加载过程

2.2 内核模块加载方式

使用 insmod 加载模块

使用 modprobe 加载模块

2.3 内核模块加载顺序

3. 常用的相关命令

4. 总结


工作还在继续,学习还在继续,学习当然好需要记录。

做过Linux 驱动一定多少了解到一些驱动加载相关知识,这也是一个必备,本章节将简单讲讲关于驱动加载相关:

本文将可以解决以下问题:

什么是内核模块?

Linux 内核模块是如何加载的?

Linux 内核模块的方式有哪些?

Linux 下insmodmodprobe有什么不一样,该如何使用?是否还有必要存在insmod

Linux 下什么情况下需要使用insmod或者modprobe,直接放在内核中加载不行么?

Linux 中关于内核模块的加载,模块加载顺序是否能控制的?

如何查看内核模块符号的依赖?

i.MX8M 专栏文章目录传送门:返回专栏目录

其他:Hi, 我是你们的老朋友,专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】

1. 内核模块

内核模块全称Loadable Kernel Module (LKM), 是一种在内核运行时加载一组目标代码来实现某个特定功能的机制。这样对于可以分离出目标代码提高系统的灵活性,在开发过程中,可以灵活选择添加或者移除,而不需要重新编译内核烧写内核。

内核模块运行在内核空间,用于应用程序运行在用户空间

内核模块的作用
  1. 设备驱动程序:支持新硬件设备,如网络卡、显卡、USB设备等。

  2. 文件系统:支持新的文件系统类型,如 ext4、NFS 等。

  3. 网络协议:添加新的网络协议或安全功能。

  4. 系统调用:增加新的系统调用或内核功能。

2. 内核模块的加载

2.1 内核模块的加载过程

内核模块的加载过程,包括用户请求加载,加载模块文件,解析依赖,检查符号,初始化模块,添加到内核。有一些还可能存在其他步骤注册驱动,绑定设备之类。

2.2 内核模块加载方式

使用 insmodmodprobe 命令加载编译好的模块。

使用 insmod 加载模块
insmod hello.ko
使用 modprobe 加载模块
modprobe hello

对于insmod 是一个低级命令,直接插入指定的模块而不处理依赖关系;modprobe 是一个高级命令,能够自动处理模块的依赖关系并加载必要的模块。

在使用modprobe智能化加载需要依靠一些文件:

modules.dep
modules.alias
modules.symbols
modules.builtin
modules.builtin.modinfo

分析依赖文件:

modules.dep,另外modules.dep.bin是一个二进制文件。

这里举一个例子:

vim  /lib/modules/6.1.1+g29549c7073bf/modules.dep
# 省略部分
# trusted 依赖后面的模块
kernel/security/keys/trusted-keys/trusted.ko: kernel/drivers/crypto/caam/caam_jr.ko kernel/drivers/crypto/caam/caamkeyblob_desc.ko kernel/drivers/...
# 省略部分

这里采用modprobe 安装trusted

2.3 内核模块加载顺序

内核模块的加载顺序,有的模块是具有依赖关系,假如A模块依赖于B模块,那么必须先加载B模块再加载A模块,对于这种情况,采用modprobe A,它将自动会先加载B模块,再加载A模块。关于 顺序依赖关系可以查看文件module.depd,安装顺序可以查看modules.order:模块编译和安装顺序,关于这个顺序一般是通过Linux在编译内核后通过depmod自动实现。

如果采用insmod 手动线加载模块B,再加载A模块。如果在加载的过程中出现错误,可以先查看当前加载的模块需要依赖哪些部分,可以大概知道先加载哪些模块。

3. 常用的相关命令

# 直接加载内核模块 假设内核模块名称:hywelstar.ko
insmod hywelstar.ko
# 卸载指定内核模块
rmmod hywelstar
​
# 加载模块,并自动处理依赖关系
modprobe hywelstar
# 卸载
modprobe -r module_name
​
# 列出当前所有加载的内核(内核加载的看不到的)
lsmod
​
# 显示内核模块的详细信息
modinfo hywelstar
​
# 显示相关联的模块依赖关系
modprobe --show-depends hywelstar
​
# 显示当前的模块配置,包括别名、选项和黑名单等。
modprobe -c
​
# 卸载模块
sudo modprobe -r hywelstar
​
# 验证模块已卸载
lsmod | grep hywelstar

4. 总结

        本章节大概讲述内核加载相关的基础知识,用法以及开头遗留下的问题应该都可以得到答案。对于内部内核加载后续再考虑讲解,一些链表相关内容。对于当前能掌握如何使用,如何去排查问题,在工作有一些帮助。在什么样情景该使用内核加载模块,哪些情景使用modprobeinsmod.一般来说对于紧急要启动的模块,会放在内核加载。大部分模块建议放在文件系统去加载,这样会大大减小内核的大小,对系统于升级也有一些帮助。哪些必须使用手动加载,对于在应用中存在不同功能或者角色转换相关时候,都是采用手动或脚本实现。比如,有些OTG的功能,USB角色转换就是典型采用手动加载内核模块切换。

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

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

相关文章

【算法/学习】前缀和差分

前缀和&&差分目录 1. 前缀和的概念及作用 🌈概念 🌈用途 🌙一维前缀和 🌙二维前缀和 2. 差分的概念及用途 🌈概念: 🌈用途 🌙一维差分 🌙二维差分 1. …

sap 权限控制例子

文章目录 1 T-code2 Method3 Summary 1 T-code We use t-code is ‘su21’ and ‘PFCG’ . Creat Authorization objects . Create role 2 Method DATA: zbz(1).CLEAR:zbz.SELECT SINGLE COUNT(*) FROM agr_users WHERE uname sy-uname AND agr_name ZMM_PRICE001.&q…

redis全局唯一ID生成策略、countDownLatch、Lambda表达式总结

redis全局唯一ID生成策略 一、有哪些生成全局唯一ID的策略二、使用Redis自增1. 分析2. RedisIdWorker配置类3 单元测试注解分析(难点较多)3.1 countDownLatch前言3.2 常用方法 一、有哪些生成全局唯一ID的策略 二、使用Redis自增 1. 分析 2. RedisIdWor…

《数据结构1800题》基础回合总结——第1章 绪论

前言:《数据结构1800》这本书相信大家或多或少都有所耳闻,收录了诸多不同档次学校的考研真题,因为和汤老师的1800撞名所以备受调侃。这1800道题目里面有选择有填空,也有简答和一些编程题,总的来说质量良莠不齐——亦或…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说,Swin-Transformer就是另一种Convolution,但是解释得真就是一坨shit,这里我郑重解释一下,这是为什么? 首先,Convolution是什么? Co…

GaussianPro使用笔记

1. 介绍 GaussianPro: 3D Gaussian Splatting with Progressive Propagation 3D高斯分布(3DGS)最近以其高保真度和效率彻底改变了神经渲染领域。然而,3DGS在很大程度上依赖于运动结构(SfM)技术生成的初始化点云。当处理不可避免地包含无纹理…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

拍立淘API返回值:图像搜索技术的商品信息获取指南

拍立淘API是基于图像搜索技术的商品信息获取工具,广泛应用于阿里巴巴旗下的电商平台如淘宝、天猫等。这一API通过用户上传的商品图片,利用深度学习、计算机视觉等先进技术自动识别图片中的商品信息,并返回与之相关的搜索结果。以下是对拍立淘…

go语言Gin框架的学习路线(八)

目录 GORM Model定义 使用 Model 结构体的自定义数据模型 理解并记忆 GORM 的 Model 结构体可以通过以下几个步骤和技巧: 1. 理解基本概念 2. 熟悉基本字段 3. 记忆技巧 4. 使用场景 结构体标记 支持的结构体标记(Struct tags) 关联…

浏览器渲染揭秘:从加载到显示的全过程;浏览器工作原理与详细流程

目录 浏览器工作原理与流程 一、渲染开始时间点 二、渲染主线程的渲染流程 2.1、渲染流程总览 2.2、渲染具体步骤 ①解析html-Parse HTML ②样式计算-Recalculate Style ③布局-Layout ④分层-Layer 相关拓展 ⑤绘制-Paint ⑥分块-Tiling ⑦光栅化-Raster ⑧画-D…

四川赤橙宏海商务信息咨询有限公司引领抖音电商新趋势

随着互联网的飞速发展,电子商务已成为企业竞争的新高地。在众多电商平台中,抖音以其独特的短视频直播形式,吸引了亿万用户的目光,成为电商领域的新宠。在这样的背景下,四川赤橙宏海商务信息咨询有限公司凭借其专业的电…

新零售电商:订单管理系统设计

传统电商依托于线上流量产生消费者,新零售则是通过网上商城、小程序以及其他应用程序相结合形成网店,同时与线下实体门店和现代物流进行深度整合,最终形成了新的销售模式。 订单管理系统上下游对接系统繁杂,包括:商品中…

【Java语法基础】1、变量、运算符、输入输出

1.变量、运算符、输入输出 跟C一样,先把必须写的框架写出来: package org.example; public class Main{public static void main(String[] args){//在里面写实际的代码} }变量 必须先定义,才能使用。与C、C差不多。 没有赋初值的变量无法…

如何实现Web服务只允许特定客户端访问

如何实现Web服务只允许特定客户端访问 需求来源 为了满足B/S系统给客户演示的需要,需要部署一套系统允许公网能够访问,便于业务人员到客户哪里进行系统演示,但是目前网络安全非常重要,希望能防止暴力破解或者端口扫描等黑客攻击…

全网最实用--神经网络各个组件以及效率指标 (含代码助理解,粘贴即用)

文章目录 一、神经网络相关组件0.前奏1.全连接层(Fully Connected Layer, FC)/密集层(Dense Layer):2.卷积层(Convolutional Layer, Conv):a.一维卷积b.二维卷积c.分组卷积 3.池化层(Pooling La…

汇编语言例题分析

以下数据段定义了如下数据,对应内存图请填空,写出每个内存字节中的2位16进制数(注意写准确,2位16进制数,末尾不带h)。 Data1 segment x db 1,2,3 y db “ABa” z dw 1,2 Data1 ends 物理地址从0000开始&…

C语言指针超详解——最终篇二

C语言指针系列文章目录 入门篇 强化篇 进阶篇 最终篇一 最终篇二 文章目录 C语言指针系列文章目录1. sizeof 与 strlen1.1 字符数组1.2 二维数组 2. 指针运算笔试题解析 以上接指针最终篇一 1. sizeof 与 strlen 1.1 字符数组 代码三&#xff1a; #include<stdio.h>…

『 Linux 』System V共享内存

文章目录 System V IPCSystem V 共享内存的直接原理System V共享内存的创建挂接共享内存取消挂接共享内存释放共享内存利用System V共享内存进行进程间通信共享内存的特性共享内存的属性通过命名管道为共享内存添加同步互斥机制 System V IPC System v 是一种操作系统和相关技术…

不懂这些,面试都不敢说自己熟悉Redis

点赞再看&#xff0c;Java进阶一大半 下面这位就是Redis的创始人&#xff0c;他叫antirez&#xff0c;让我们Java开发者又要多学一门Redis的始作俑者。 我们肯定很难想象Redis创始人竟然学的是是建筑专业&#xff0c;而当年antirez是为了帮网站管理员监控访问者的实时行为才开发…

22集 如何minimax密钥和groupid-《MCU嵌入式AI开发笔记》

22集 如何获取minimax密钥和groupid-《MCU嵌入式AI开发笔记》 minimax密钥获取 https://www.minimaxi.com/platform 进入minimax网站&#xff0c;注册登录后&#xff0c;进入“账户管理”&#xff0c; 然后再点击“接口密钥”&#xff0c;然后再点击“创建新的密钥”。 之…