一、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之后,系统就将自动完成我们想要的那几步工作。

Linux中的insmod和mknod命令相关推荐

  1. Linux 中ifconfig和ip addr命令查看不到ip解决方法

    Linux 中ifconfig和ip addr命令查看不到ip解决方法 参考文章: (1)Linux 中ifconfig和ip addr命令查看不到ip解决方法 (2)https://www.cnbl ...

  2. 禁止linux关机,如何在Linux中禁用关机和重新启动命令

    shutdown命令调度一个Linux系统关闭电源的时间,它也可以用于在使用特定选项调用时停止,关闭电源或重启机器 ,并重新引导系统重新启动. 默认情况下,某些Linux发行版(如Ubuntu,Lin ...

  3. Linux中sort,uniq,cut,wc命令详解

    Linux中sort,uniq,cut,wc命令详解 来源:hellodev 本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助. sort s ...

  4. linux mv 递归拷贝,奇技淫巧 - 给Linux中的cp和mv命令中添加进度条的高级拷贝

    GNU cp和GNU mv命令用于在GNU/Linux操作系统中复制和移动文件和目录.这两个命令缺少的一个特性是它们不显示任何进度条.如果复制一个大文件或目录,您就不知道完成复制过程需要多长时间,也不 ...

  5. linux中检测用户信息的命令是,Linux中系统状态检测命令

    1.ifconfig用于获取网卡配置与网络状态等信息,格式为:ifconfig [网络设备] [参数] 2.uname命令用于查看系统内核版本等信息,格式为:uname [-a] 查看系统的内核名称. ...

  6. linux学习笔记:linux中查看文件内容的命令

    linux中一般用下面这些命令来查看文件: cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写! nl 显示的时候,顺道输出行号! more 一页一页 ...

  7. linux中常用的60个命令及作用详解

    Linux 必学的 60 个命令 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存 取.目录操作.进程管理.文件权限设定等.所以,在 Linux 系统上工作离不开使用系 ...

  8. 解压文件到服务器是什么意思,linux中zip文件解压命令是什么

    linux中zip文件解压命令是什么 发布时间:2020-10-15 14:35:15 来源:亿速云 阅读:102 作者:小新 这篇文章给大家分享的是有关linux中zip文件解压命令是什么的内容.小 ...

  9. linux创建磁盘的命令,linux中创建磁盘分区的命令是什么

    linux中创建磁盘分区的命令是fdisk.具体方法是:1.进入root,查看所有磁盘的分区情况:2.执行命令[fdisk /dev/sdc],对sdc磁盘进行分区:3.依次输入n.p创建主分区即可. ...

最新文章

  1. php简单的log文件
  2. 线上比赛投诉:同一赛点两支队伍比赛车模是否相同?
  3. python 只执行一次_Python 定时任务实现只执行一次的方法
  4. python怎么用excel-Python使用xlwt模块操作Excel的方法详解
  5. flush privileges 什么意思
  6. 关于CefSharp的坎坷之路
  7. C++中多态性学习(上)
  8. GitHub上README.md教程(copy)
  9. 【Pytorch神经网络理论篇】 07 激活函数+Sigmoid+tanh+ReLU+Swish+Mish+GELU
  10. Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解
  11. jsp引入页面,即包含文件的两种方法介绍
  12. java 防止文件重名的方法_使用java避免文本文件中的重复输出?
  13. 压测中提高并发数后服务端处理时间增长的原因分析
  14. 中低频量化交易策略研发01_引言
  15. 遇到相同流程时,(在流程比较复杂时)「【充分利用】 在【 之前的 作业过程中 做成的(留下的) 资源】」 ~
  16. FFmpeg之yuv镜像(十八)
  17. tomcat中 JVM 内存溢出及合理配置
  18. 【软考 系统架构设计师】软件工程⑥ 软件系统建模
  19. 台式计算机识别不了u盘启动,台式机进入不到U盘启动怎么办
  20. rat linux安装u盘,美加狮RAT2鼠标驱动

热门文章

  1. 好用的谷歌插件以及软件,提升你的工作效率,做一名合格的打工人
  2. C++学习汇总---目录
  3. comsol两相流之水平集法
  4. corosync使用
  5. idea连接数据库,及增删改查
  6. vue-cli项目中引入vue-i18n
  7. Hessian的入门
  8. 计算机视觉(二):局部图像描述子
  9. 我的计算机桌面被分成三格,抖音上的三格壁纸是怎么制作的?其实很简单,这么操作就行!干货...
  10. Hadoop发展历史