内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

简介: 内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe   首先,我们得知道内核与内核模块放在哪里。 内核:/boot/vmlinuz或/boot/vmlinuz-version; 内核解压缩所需RAMDisk:/boot/initrd(/boot/...

内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

  首先,我们得知道内核与内核模块放在哪里。
内核:/boot/vmlinuz或/boot/vmlinuz-version;
内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);
内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel;
内核源码:/usr/src/linux 或 /usr/src/kernels;
  如果内核顺利被加载了,会有以下几个信息记录:
内核版本:/proc/version
系统内核功能:/proc/sys/kernel
  假如我有个新硬件,偏偏我的系统不支持,要这样做:
重新编译内核,并加入最新的硬件驱动程序源码;
将该硬件的驱动程序编译成为模块,在启动时加载该模块。
 
  下面我们着重讲一下内核模块
一、内核模块与依赖性
  基本上,内核模块放置处是在 /lib/modules/$(uname -r)/kernel当中,里面的几个目录主要为:
arch 与硬件平台有关的选项
crypto 内核所支持的加密的技术
drivers 一些硬件的驱动程序
fs 内核所支持的文件系统
lib 一些函数库
net 与网络有关的各项协议数据,还有防火墙模块等
sound 与音效有关的各项模块
  还有文件/lib/modules/$(uname -r)/modules.dep ,记录了内核支持的模块的依赖性。那么如何创建该文件呢?如下:
#depmod [-Ane]
  -A:不加任何参数时,depmod会主动去分析目前内核的模块,并且重新写入/lib/modules/$(uname -r)/
modules.dep当中。如果加-A参数,则会查找比modules.dep内还要新的模块,如果真找到,才会更新。
  -n:不写入modules.dep,而是将结果输出到屏幕上。
  -e:显示出目前已加载的不可执行的模块名称。
 
  例子:我做好一个网卡驱动程序a.ko(内核模块名以.ko结尾),该如何更新内核的依赖性?
#cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net
#depmod
 
 
二、内核模块的查看
  查看目前模块加载了多少的模块。
#lsmod
模块名称     模块的大小  此模块是否被其他模块使用
 
查阅每个模块信息
#modinfo [-adln] [module_name|filename]
  -a:仅列出作者名
  -d:仅列出该modules的说明
  -l:仅列出授权
  -n:仅列出该模块的详细路径
 
  例子:#modinfo mii
 
 
三、内核模块的加载与删除
  最好使用modprobe这个命令加载模块,因为modprobe会主动查找modules.dep的内容,解决了依赖性后,才决定需要加载的模块有哪些。
  insmod则完全由用户自行加载一个完整文件名的模块,并不会主动分析模块依赖性。
#insmod [/full/path/module_name] [parameters]
 
  例子:尝试载入cifs.ko这个文件系统模块
#insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko
  记住,一定要是完整的文件名。
 
#rmmod [-fw] module_name
  -f:强制将该模块删除掉,不论是否正在被使用
  -w:若该模块正在被使用,则等待该模块被使用完毕后再删除
 
  insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.
#modprobe [-lcfr] module_name
  -c:列出目前系统上面所有的模块
  -l:列出目前在/lib/modules/`uname -r`/kernel当中的所有模块完整文件名
  -f:强制加载该模块
  -r:删除某个模块
 
  例子:加载cifs模块
   #modprobe cifs
  很方便,因为我们根本不用知道完整的模块文件名
 
内核模块的额外参数配置:/etc/modprobe.conf
  如果你想修改某些模块的额外参数设置,就在这个文件内。
  #vi /etc/modprobe.conf
目录
相关文章
|
机器学习/深度学习 并行计算 PyTorch
TensorRT部署系列 | 如何将模型从 PyTorch 转换为 TensorRT 并加速推理?
TensorRT部署系列 | 如何将模型从 PyTorch 转换为 TensorRT 并加速推理?
2139 0
|
监控 机器人 Shell
用shell脚本编写一个监控应用服务的脚本,外发到微信群
用shell脚本编写一个监控应用服务的脚本,外发到微信群
282 1
|
11月前
|
人工智能 PyTorch API
Hunyuan3D 2.0:腾讯混元开源3D生成大模型!图生/文生秒建高精度模型,细节纹理自动合成
Hunyuan3D 2.0 是腾讯推出的大规模 3D 资产生成系统,专注于从文本和图像生成高分辨率的 3D 模型,支持几何生成和纹理合成。
1393 5
Hunyuan3D 2.0:腾讯混元开源3D生成大模型!图生/文生秒建高精度模型,细节纹理自动合成
|
5月前
|
Web App开发 缓存 监控
微店店铺商品搜索(item_search_shop)接口深度分析及 Python 实现
item_search_shop接口用于获取特定店铺的全部商品数据,支持批量获取商品列表、基础信息、价格、销量等,适用于竞品监控、商品归类及店铺分析等场景,助力全面了解店铺经营状况。
|
人工智能 自然语言处理 测试技术
AutoRAG:自动优化 RAG 管道工具,自动评估各种 RAG 模块组合,快速找到最优的 RAG 管道
AutoRAG 是一款自动优化 RAG(Retrieval-Augmented Generation)管道的工具,帮助用户找到最适合其数据和应用场景的最佳 RAG 管道。
766 12
AutoRAG:自动优化 RAG 管道工具,自动评估各种 RAG 模块组合,快速找到最优的 RAG 管道
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
数据采集 机器学习/深度学习 搜索推荐
Python爬虫技术基础与应用场景详解
本文介绍了爬虫技术的基本概念、原理及应用场景,包括数据收集、价格监测、竞品分析和搜索引擎优化等。通过一个实战案例展示了如何使用Python爬取电商网站的商品信息。强调了在使用爬虫技术时需遵守法律法规和道德规范,确保数据抓取的合法性和合规性。
|
存储 Oracle 关系型数据库
MySQL8 中文参考(二十九)(1)
MySQL8 中文参考(二十九)
228 7
|
自然语言处理 监控 语音技术
ModelScope-FunASR支持离线语音转写
【2月更文挑战第19天】ModelScope-FunASR支持离线语音转写
553 1

热门文章

最新文章