Linux 内核模块加载知多少

文章目录

目录

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角色转换就是典型采用手动加载内核模块切换。

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

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

相关文章

RK3568笔记三十七:按键驱动实验(设备树)

若该文为原创文章,转载请注明原文出处。 一、编程思路 程序编写的主要内容为添加 key 的设备树节点、在驱动程序中使用 of 函数获取设备节点中的属性,编写测试应用程序。 • 首先向设备树添加 key 设备节点。 • 其次编写平台设备驱动框架,…

autohotkey+vscode 替代 linux下vim方案(记忆零成本)

autohotkeyvscode 替代 linux下vim方案(记忆零成本) 先看效果和移动方案 效果 命令行下 1.新建文件 code hello.c2.然后弹出 vs code 现在就是相当于在无限制记事本里面了 方案 下面展示快捷键方案 摸着键盘上的小凸起, 上下左右,直接起飞 i:上 , k:下,j:左,L:右 H:行…

AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教程

大家好,我是设计师阿威 想要入门 AI 绘画,首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。 直到近两年,AI 产出的图像…

AI+折叠屏,荣耀的创新周期论

文|刘俊宏 编|王一粟 2024年,AI和折叠屏的演进路线,已经成为了手机行业的共识。 首先,手机市场的新增量已经被折叠屏所接管。据Counterpoint Research数据显示,中国2024年第一季度折叠屏手机销量同比增长…

3、计算机网络通信及其编程:深入Linux内核理解epoll

Linux网络 IO模型 同步和异步,阻塞和非阻塞 同步和异步 同步和异步关注的是调用方是否主动获取结果。 同步:同步的意思就是调用方需要主动等待结果的返回。异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如…

为什么用ssh连接服务器会出现错误?

当我们尝试通过 SSH 连接到服务器时可能会发生许多情况,比如出现“连接被拒绝”的错误。虽然导致 SSH 连接错误的原因可能有多种,但以下是其中常见的几种: 1.您的 SSH 服务已关闭。 2.您的凭证有误。 3.您尝试使用的端口已关闭。 4.您的服务器…

SQL 中的 EXISTS 子句:探究其用途与应用

目录 EXISTS 子句简介语法 EXISTS 与 NOT EXISTSEXISTS 子句的工作原理实际应用场景场景一:筛选存在关联数据的记录场景二:优化查询性能 EXISTS 与其他 SQL 结构的比较EXISTS vs. JOINEXISTS vs. IN 多重 EXISTS 条件在 UPDATE 语句中使用 EXISTS常见问题…

部署kafkamanager

1,检查kafka的版本 到lib下查看 libs/kafka-clients-0.11.0.3.jar kafka的版本 0.11 2,下载kafkamanager 链接: https://pan.baidu.com/s/1qYifoa4 密码:el4o 3,解压后更改该conf下conf/application.conf 中zkhosts …

六、Accelerate + Deepspeed

帮up宣传一下,优质up值得信赖! B站UP:你可是处女座啊 文章目录 理论知识DP&DDPDeepspeed介绍注意事项多机多卡 实战ddp_accelerate.py原先显存DDP 运行Deepspeed 运行方式一-zero2方式二 -zero2方式一 -zero3方式二 -zero3 ddp_trainer…

在 Windows 上运行 Linux:WSL2 完整指南(一)

系列文章目录 在 Windows 上运行 Linux:WSL2 完整指南(一)🚪 在 Windows 上运行 Linux:WSL2 完整指南(二) 文章目录 系列文章目录前言一、什么是 WSL?1.1 WSL 的主要特性1.2 WSL 的…

[WUSTCTF2020]level4题解 入土为安的第三天

二叉树 Practice my Data Structure code..... Typing....Struct.....char....*left....*right............emmmmm...OK! Traversal! Traversal type 1:2f0t02T{hcsiI_SwA__r7Ee} Traversal type 2:20f0Th{2tsIS_icArE}e7__w Traversal type 3: //type3(&x[22]); No w…

Schematics,一个牛逼的python库用于数据验证和转换的库

目录 什么是Schematics? 为什么使用Schematics? 安装Schematics 定义模式 验证数据 自定义验证 转换数据 结语 什么是Schematics? 在Python的世界中,Schematics是一个用于数据验证和转换的库。它通过定义数据结构的模式(…

Windows搭建RTMP视频流服务器

参考了一篇文章,见文末。 博客中nginx下载地址失效,附上一个有效的地址: Index of /download/ 另外,在搭建过程中,遇到的问题总结如下: 1 两个压缩包下载解压并重命名后,需要 将nginx-rtmp…

轻松搞定GIS场景编辑,这款免费工具你一定要试试

如果你正苦恼于如何搞定GIS场景编辑,不妨来试试这款免费可视化工具——山海鲸可视化。经过本人测试,这款软件在GIS场景编辑上完全可以做到“零代码”操作,即使没有任何编程技能也可以在三维GIS世界中如鱼得水。现在,让我们一起来看…

美团收银Android一面凉经(2024)

美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…

Docker 基本管理及部署

目录 1.Docker概述 1.1 Docker是什么? 1.2 Docker的宗旨 1.3 容器的优点 1.4 Docker与虚拟机的区别 1.5 容器在内核中支持的两种技术 1.6 namespace的六大类型 2.Docker核心概念 2.1 镜像 2.2 容器 2.3 仓库 3.安装Docker 3.1 查看 docker 版本信息 4.…

【嵌入式DIY实例-ESP8266篇】-LCD ST7789显示DS1307 RTC时间数据

LCD ST7789显示DS1307 RTC时间数据 文章目录 LCD ST7789显示DS1307 RTC时间数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板和 DS1307 RTC 集成电路构建简单的实时时钟和日历 (RTCC),其中时间和日期打印在 ST7789 TFT 显示模块上。 ST7789 TFT 模块包…

C# 基于共享内存实现跨进程队列

C# 进程通信系列 第一章 共享内存 第二章 共享队列(本章) 文章目录 C# 进程通信系列前言一、实现原理1、用到的主要对象2、创建共享内存3、头部信息4、入队5、出队6、释放资源 二、完整代码三、使用示例1、传输byte[]数据2、传输字符串3、传输对象 总结…

持续集成03--Jenkins的安装与配置

前言 在持续集成/持续部署(CI/CD)的实践中,Jenkins作为一个开源的自动化服务器,扮演着至关重要的角色。本篇“持续集成03--Jenkins的安装配置”将带您走进Jenkins的世界,深入了解如何在Linux环境中安装并配置Jenkins。…

window下安装go环境

一、go官网下载安装包 官网地址如下:https://golang.google.cn/dl/ 选择对应系统的安装包,这里是window系统,可以选择zip包,下载完解压就可以使用 二、配置环境变量 这里的截图配置以win11为例 我的文件解压目录是 D:\Software…