优秀的编程知识分享平台

网站首页 > 技术文章 正文

Linux内核操作insmode命令详解

nanyue 2025-03-06 17:59:24 技术文章 4 ℃

什么是insmode命令

Linux insmod(install module)命令用于载入模块。

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

语法

参数说明

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

实例

加载模块

ko 文件介绍

.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。

.ko文件一般的用处

作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。

使用.ko 文件

1、加载驱动模块test.ko

(1)方法一

进入test.ko驱动模块文件所在的目录,然后直接 insmod test.ko

(2)方法二

将test.ko文件拷贝到/lib/module/#uname-r#/目录下,这里,#uname -r#意思是,在终端中输入

uname -r后显示的内核版本及名称,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。

然后 depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系)

最后 modprobe test(注意这里无需输入.ko后缀) 即可

注:两种方法的区别

modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load module时的依赖关系,它是通过/lib/modules/#uname -r/modules.dep(.bb)文件来查找依赖关系的;而insmod不能解决依赖问题。也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。

2、查看已加载的驱动模块列表

在任何目录下输入命令

lsmod

编写生成.ko 文件

Linux下hello.ko内核模块制作的全过程

1. linux系统用的是Redflag 6.0 SP1 下载地址:
ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-sp1.iso, 系统安装很容易,安提示做就好。

所用的内核源码目录树下载地址:
ftp://ftp.redflag-linux.com/pub/redflag/dt6sp1/SP1/redflag-6-tool-sp1-src1.iso,将此iso文件挂载到/mnt下,安装其中的内核rpm包。

挂载方法:mount -t iso9660
redflag-6-tool-sp1-src1.iso /mnt/ -o loop

内核目录树安装方法:cd /mnt/RedFlag/SRMPS/

rpm -i kernel-2.6.23.1-4.src.rpm

编写hello模块代码,源码如下:

4. 编写hello模块的Makefile文件,Makefile内容如下:

5. 编译模块

在命令行进入hello.c所在的文件夹下执行make命令即可完成hello模块的编译。用ls命令可以查看到hello.ko文件,此文件就是我们自定义的内核模块。

6. 安装hello模块

命令行下执行命令:insmod hello.ko 。通过命令:cat /var/log/messages

可以看到下面这样的信息:“Aug 6 13:37:59 localhost kernel: Hello, world”,说明模块加载成功了。

Tags:

最近发表
标签列表