内核模块调试常用命令整理

一、 模块加载

1.1 最简单的一个驱动

static int __init my_driver_init( void )
{
    printk("init my_driver\n");
    return 0;
}

static void __exit my_driver_exit( void )
{
    printk("exit my_driver\n");
}

module_init( my_driver_init );
module_exit( my_driver_exit );
MODULE_LICENSE("GPL");
MODULE_AUTHOR("fatfat");

当通过insmod 或者modprobe 命令加载内核模块时,模块的加载函数就会自动被内核执行(my_driver_init )。

1.2 insmod

insmod 是最简单的将一个模块加载到内核的办法。前提是模块不依赖于其他模块。

insmod hello_drv.ko

1.3 modprobe

modprobe 在将模块加载进内核之前,先检查模块之间的依赖关系,并且按照顺序加载这些依赖。

modprobe hello_drv.ko 

二、 模块依赖

2.1 生成依赖文件

depmod 会生成当前安装目录下模块的依赖关系文件module.dep 。modprobe 读取依赖文件 module.dep ,并加载相关的依赖.

在 ”/lib/modules/内核版本” (/lib/modules/4.1.15)目录下,执行下面命令,生成依赖文件。

depmod -a

2.2 查看依赖文件

我们打开module.dep 文件,可以查看当前目录下模块的依赖文件。
在这里插入图片描述

三、模块卸载

当执行rmmod 命令,模块卸载函数(my_driver_exit )就会自动被内核执行,完成相关清理工作。

rmmod hello_drv.ko

四、列出系统的模块

4.1 lsmod

lsmod 列出当前已经加载到内核中的所有模块。

其原理就是将/proc/modules 中的信息调整一下格式输出。lsmod 输出列表中有一列 Used by ,它表明此模块正在被其他模块使用,显示了模块之间的依赖关系。
在这里插入图片描述

4.2 /sys/module 目录

该目录下有系统中所有的模块信息,不论这些模块是以内联(inlined) 方式 编译到内核镜像文件中,还是编译为外部模块(.ko) 。

当我们加载驱动程序之后,我们可以通过 调用 lsmod 命令 或者查看 /sys/module 目录,查看我们刚加载的模块有没加载成功。

五、查看模块的信息

modinfo 命令用于显示指定的内核模块信息。

modinfo hello_drv.ko

如下输出可见,命令可以输出内核模块的外部依赖、编译内核版本,作者等等信息。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdut_llkkyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值