Linux中的insmod和mknod命令

article/2025/10/23 9:39:19

一、insmod命令详解

insmod命令用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

注意:需要注意的是使用insmod在加载模块时,仅仅是临时加载,即重启后该模块会失效。

2、用法:

语法
insmod(选项)(参数)

选项
-f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入;
-k:将模块设置为自动卸除;
-m:输出模块的载入信息;
-o<模块名称>:指定模块的名称,可使用模块文件的文件名;
-p:测试模块是否能正确地载入kernel;
-s:将所有信息记录在系统记录文件中;
-v:执行时显示详细的信息;
-x:不要汇出模块的外部符号;
-X:汇出模块所有的外部符号,此为预设置。

参数
内核模块:指定要加载的内核模块文件。

实例
加载RAID1阵列级别模块,如下所示:

[root@localhost boot]# insmod /lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko  [root@localhost boot]# lsmod | grep raid1
raid1                  25153  0

从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。

静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用。静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低。若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间。

动态加载利用了Linuxmodule特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行内核的裁剪,将不需要的驱动去除,大大减小了内核的存储容量。

在这里插入图片描述
【insmod与modprobe命令】

在Linux中,modprobe和insmod都可以用来加载module,不过现在一般都推荐使用modprobe而不是insmod了。 modprobe和insmod的区别是什么呢?

  1. modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,它是通过/lib/modules//modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。

  2. modprobe默认会去/lib/modules/目录下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。 这样,有时insmod也有它的有用之处,举个例子吧。

/root/my-mod.ko这个modulecd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示"FATAL: Module my-mod.ko not found",这就是因为modprobe是到/lib/modules/uname -r/下去找module的,如果没找到就是这样了。

二、mknod命令详解

我们的linux操作系统跟外部设备(如磁盘、光盘等)的通信都是通过设备文件进行的,应用程序可以打开、关闭、读写这些设备文件,从而对设备进行读写,这种操作就像读写普通的文件一样easy。linux为不同种类的设备文件提供了相同的接口,比如read(),write(),open(),close()

所以在系统与设备通信之前,系统首先要建立一个设备文件,这个设备文件存放在/dev目录下。其实系统默认情况下就已经生成了很多设备文件,但有时候我们需要自己手动新建一些设备文件,这个时候就会用到像mkdir, mknod这样的命令。

   mknod 的标准形式为:       mknod DEVNAME {b | c}  MAJOR  MINOR

1,DEVNAME是要创建的设备文件名,如果想将设备文件放在一个特定的文件夹下,就需要先用mkdir在dev目录下新建一个目录;

2, b和c 分别表示块设备和字符设备:
b表示系统从块设备中读取数据的时候,直接从内存的buffer中读取数据,而不经过磁盘;
c表示字符设备文件与设备传送数据的时候是以字符的形式传送,一次传送一个字符,比如打印机、终端都是以字符的形式传送数据;

3,MAJORMINOR分别表示主设备号和次设备号:
为了管理设备,系统为每个设备分配一个编号,一个设备号由主设备号和次设备号组成。主设备号标示某一种类的设备,次设备号用来区分同一类型的设备。linux操作系统中为设备文件编号分配了32位无符号整数,其中前12位是主设备号,后20位为次设备号,所以在向系统申请设备文件时主设备号不好超过4095,次设备号不好超过2^20 -1。
.
下面,我们就可以用mknod命令来申请设备文件了。

  mkdir -p  /dev/cobingmknod /dev/cobing/mydev1 c 128 512

注意:不是所有的编译的模块是需要通过mknod进行按照后再insmod的,有的模块仅需要insmod即可。

三、模块进行加载后重启失效

为了是在命令行中执行insmod命令安装的驱动能在重启之后还有的解决方法大致有一下两种方法:

(1)直接编译内核,把想安装的驱动在编译内核的时候给编译进去,这种方法比较麻烦,花的时候也比较的多,一般不采用这种方法(这种方法网上有很多资料可以参考)。

(2)这种方法比较简单:就是在启动脚本中加载模块,这样每次开机启动都自动加载相应的驱动模块。具体的方式如下:

  在文件/etc/rc.local中加载你想要的模块程序即可

比如我想再系统启动的时候自动给我完成:卸载r8169驱动、然后安装r8168驱动、同时重启网络服务器的工作,那么我在该文件中的exit 0 之前写如下的语句:

rmmod r8169#(卸载相应的驱动)insmod /usr/src/r8168.ko#(这个是r8168.ko文件放的绝对路径),这步是安装相应的驱动ifconfig eth0 downifconfig eth0 up

然后保存,重新启动reboot之后,系统就将自动完成我们想要的那几步工作。


http://chatgpt.dhexx.cn/article/Q8tmqV6U.shtml

相关文章

mknod命令的使用

1、mknod命令 在Linux系统下&#xff0c;mknod命令可用于系统下字符设备文件和块设备文件的创建。 &#xff08;1&#xff09;命令语法 mknod&#xff08;选项&#xff09;&#xff08;参数&#xff09; &#xff08;2&#xff09;常用选项说明 -Z&#xff1a;设置安全的上下文…

mknod创建一个设备节点

mknod是make node的缩写&#xff0c;就是创建一个节点&#xff08;设备文件又叫做设备节点&#xff09;。在linux系统中&#xff0c;一个节点代表一个文件&#xff0c;创建一个文件最主要的根本工作就是分配一个新的节点&#xff08;注意&#xff0c;这是存在于磁盘上的节点&am…

QtableView点击滑动设计

效果 头文件&#xff1a; #ifndef CustomScroll_H #define CustomScroll_H#include <QObject> #include <QWidget> #include <QTimer> #include <QTableView> #include <QPropertyAnimation> #include <QDateTime>class CustomScroll :…

QTableView样式表实战

1.案例 隔行颜色、选中颜色、标题样式、表格内容样式、表格边角样式 2.qss代码 /*设置表格整体样式*/ QTableView{outline:none; /*设置选中单元格不显示虚线框*/border:0px solid #FFFFFF;background-color:#FFFFFF; } /*设置表格标题样式*/ QHeaderView::section {padding:…

QT(3)-QTableView

QTableView 0 相关文章1 说明2 常用函数2.1 clearSpans2.2 setSpan2.3 columnAt2.4 rowAt2.5 columnSpan2.6 rowSpan2.7 columnViewportPosition2.8 rowViewportPosition2.9 列宽、行高2.9.1 columnWidth2.9.2 rowHeight2.9.3 setColumnWidth2.9.4 setRowHeight2.9.5 resizeCol…

QTableView复选框

QTableView复选框&#xff0c;支持未选中、部分选中、全选三种状态 参考博文&#xff08;若有侵权&#xff0c;联系删除&#xff09; https://blog.csdn.net/liang19890820/article/details/50718340https://blog.csdn.net/qq_44257811/article/details/120266599 效果图&am…

Qt QTableView QStandardItemModel用法

QStandardItemModel 是标准的以项数据&#xff08;item data&#xff09;为基础的标准数据模型类&#xff0c;通常与 QTableView 组合成 Model/View 结构&#xff0c;实现通用的二维数据的管理功能。 本节介绍 QStandardltemModel 的使用&#xff0c;主要用到以下 3 个类&#…

pyqt QTableView详细用法

QTableView是表格视图&#xff0c;可以像excel一样的显示数据&#xff0c;如下图&#xff1a; 详细代码&#xff1a; from PyQt5.QtWidgets import * from PyQt5.QtGui import * import sysclass TableView(QWidget):def __init__(self, argNone):super(TableView, self).__in…

QT QTableView(基于QStandardItemModel用法)操作详解

文章目录 前言关于QStandardItemModel上下翻页实例代码讲解 前言 前面详细介绍过QTableWidget的用法&#xff0c;今天想一次性把QTable系列写完&#xff0c;也就是QTabelview的使用&#xff0c;我发现使用QTableWidget如果频繁的clean&#xff0c;然后又set&#xff0c;会很卡…

Qt QTableView样式设置

Qt QTableView样式设置 显示效果 QSS设置 选中设置&#xff1a; 1 2 3 4 5 QTableView::item:selected { background:rgb(0,0,100); color:white; } 表头设置&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 QHeaderView::section:first { b…

Qt QTableView详解

一.常用接口 1.设置model&#xff0c;添加model数据 model new QStandardItemModel(this);model->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");QStandardItem *item00 new QStandardItem("…

QTableView常用设置

QTableView的设置比较复杂&#xff0c;做项目的时候总是搞忘&#xff0c;以本文记录一下它的样式、布局等设置方式。 目录 1、设置item布局1.1、平均铺满1.2、最后一项铺满 2、交替背景色2.1、行交替2.2、项交替 3、去掉选中虚线4、去掉网格线5、设置选中方式5.1、选中单个项目…

qt中Qtableview的用法

QTableView常用于实现数据的表格显示。下面我们如何按步骤实现学生信息表格&#xff1a; 一 添加表头 //准备数据模型 QStandardItemModel *student_model new QStandardItemModel(); student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr(&…

Qt深入浅出(十五)QTableView

QTableView ​ 表格视图控件QTableView&#xff0c;需要和QStandardItemModel, 配套使用&#xff0c;这套框架是基于MVC设计模式设计的&#xff0c;M(Model)是QStandardItemModel数据模型&#xff0c;不能单独显示出来。V(view)是指QTableView视图&#xff0c;要来显示数据模型…

Qt QTableView

TableView 表格视图控件QTableView&#xff0c;需要和QStandardItemModel, 配套使用&#xff0c;这套框架是基于MVC设计模式设计的&#xff0c;M(Model)是QStandardItemModel数据模型&#xff0c; 不能单独显示出来。V(view)是指QTableView视图&#xff0c;要来显示数据模型&…

QT QtableView操作详解

本文实现了使用QtableView控件来显示数据&#xff0c;数据源使用txt文本作为数据源&#xff0c;使用了QStandardItemModel作为数据模型来实现了对TableView空间的初始化&#xff0c;和对txt数据源的增删改查功能。 QT QtableView操作详解目录 1. 项目结构&软件界面 2. m…

QTableView使用方法小结

本文总结了QTableView常用方法&#xff0c;包括常规的数据显示、表头设置、字体和颜色设置、行列的高宽&#xff0c;显示格式设置等&#xff0c;还有一套分页算法&#xff0c;在QTableView表格里插入QLineEdit、QPushButton、QCheckBox等控件&#xff0c;常用的qss设置&#xf…

Qt之QTableView的简单使用(含源码+注释)

文章目录 一、QTableView操作示例图二、QTableView&#xff08;个人理解&#xff09;三、源码CMainWindow.hCMainWindow.cpp 四、拓展&#xff1a;代理的使用总结相关文章 一、QTableView操作示例图 下图为QTableView简单使用示例图&#xff0c;其中包含设置、获取、新建item等…

QTableView 基本使用

一、简介 表格视图控件 QTableView&#xff0c;需要和 QStandardItemModel 配套使用&#xff0c;这套框架是基于 MVC 设计模式设计的&#xff0c;M(Model) 是 QStandardItemModel 数据模型不能单独显示出来。V(view) 是指 QTableView 视图&#xff0c;要来显示数据模型&#x…

QTableView详细使用说明

QTableView详细使用说明 创建QTableView表格标题设置表格的标题获取表格的标题 数据操作插入数据删除数据 属性设置设置表格的对齐方式设置表格的宽高设置表格的线属性 自定义菜单eventFilter方法重载eventFilter()启用事件监听实现事件过滤函数 设置菜单属性方法设置属性关联信…