首页 > 系统相关 >Linux内核模块的加载与卸载过程

Linux内核模块的加载与卸载过程

时间:2024-09-06 22:03:24浏览次数:11  
标签:Linux module 模块 卸载 modprobe 加载 my 内核模块

在 Linux 中,内核模块是一种可加载的代码,允许动态扩展内核的功能,而无需重启系统。以下是内核模块的加载与卸载过程的详细说明。

1. 内核模块的概述

  • 内核模块:是一个包含可以被 Linux 内核动态加载和卸载的代码的文件。通常以 .ko(Kernel Object)为后缀。
  • 用途:可以用于添加驱动程序、文件系统、网络协议等功能。

2. 加载内核模块

2.1 使用 insmod 命令

insmod 是最基本的命令,用于将模块加载到内核中。

示例

sudo insmod my_module.ko

2.2 使用 modprobe 命令

modprobe 命令更为智能,它会自动处理模块的依赖关系。

示例

sudo modprobe my_module

2.3 验证模块是否加载

可以使用 lsmod 命令查看当前加载的模块:

lsmod | grep my_module

3. 卸载内核模块

3.1 使用 rmmod 命令

rmmod 用于从内核中卸载模块。

示例

sudo rmmod my_module

3.2 使用 modprobe -r 命令

modprobe -r 命令用于卸载模块,同时处理依赖关系。

示例

sudo modprobe -r my_module

3.3 验证模块是否卸载

再次使用 lsmod 命令确认模块已被卸载:

lsmod | grep my_module

4. 模块的依赖关系

在使用 modprobemodprobe -r 时,系统会自动处理模块的依赖关系。例如,如果某个模块依赖于另一个模块,modprobe 会确保先加载所需的模块。

5. 常用命令总结

  • 加载模块

    • sudo insmod my_module.ko
    • sudo modprobe my_module
  • 卸载模块

    • sudo rmmod my_module
    • sudo modprobe -r my_module
  • 查看加载的模块

    • lsmod
  • 查看模块信息
    使用 modinfo 命令可以查看模块的详细信息。

modinfo my_module

6. 编写简单的内核模块

下面是一个简单的内核模块示例。

示例代码my_module.c):

#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_AUTHOR("Your Name");

static int __init my_module_init(void) {
    printk(KERN_INFO "Hello, World!\n");
    return 0;
}

static void __exit my_module_exit(void) {
    printk(KERN_INFO "Goodbye, World!\n");
}

module_init(my_module_init);
module_exit(my_module_exit);

编译模块

需要创建一个 Makefile:

obj-m += my_module.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

然后在终端中运行以下命令编译模块:

make

7. 加载和卸载自定义模块

编译后,使用 insmodmodprobe 加载模块,使用 rmmodmodprobe -r 卸载模块。

总结

通过上述步骤,您可以有效地加载和卸载 Linux 内核模块,动态扩展内核功能,并验证模块的状态。掌握这些操作对于系统管理和开发内核模块非常重要。

标签:Linux,module,模块,卸载,modprobe,加载,my,内核模块
From: https://www.cnblogs.com/love-DanDan/p/18401137

相关文章

  • [Linux][Mysql]Linux使用MySQL Yum存储库上安装MySQL 5.6
    Linux使用MySQLYum存储库上安装MySQL5.6,适用于OracleLinux,RedHatEnterpriseLinux和CentOS系统。一、全新安装MySQL1、添加MySQLYum存储库将MySQLYum存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装MySQL提供的RPM来执行。跟着这些步骤:1.1、到MySQL官......
  • [Linux][防火墙]Centos7 防火墙相关操作以及 添加开放端口
    1、firewalld的基本使用启动:     systemctl   startfirewalld查看状态: systemctl   statusfirewalld 停止:    systemctl   disablefirewalld禁用:     systemctl   stopfirewalld2.systemctl是CentOS7的服务管理......
  • 学习Linux
    1.操作系统是计算机软件的一种,它主要负责:作为用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作(作用)2.计算机有了操作系统,就相当于拥有了灵魂3.操作系统可以:调度CPU进行工作;调度内存进行工作;调度硬盘进行数据存储;调度网卡进行网络通讯;调度音响发出声音;调度打印机打......
  • linux网络丢包怎么排查
    在Linux系统中,网络丢包可能由多种因素引起,包括网络设备故障、配置问题、流量拥堵等。以下是排查网络丢包的一些步骤和工具:1.检查网络接口使用ifconfig或ip命令查看网络接口的状态:ifconfig#或者ipaddrshow注意:检查是否有错误(errors)或丢包(droppedpackets)信息。......
  • 卸载IBM Installation Manager的失败提示及解决方式
    1、问题描述如上图所示,按常规方式卸载IBMInstallationManager失败,并出现相关提示信息。在卸载IBMInstallationManager之前,必须卸载由它安装的所有产品。2、原因分析安装IBM的相关软件时,还附带安装了LicenseKeyAdministrator,因此需要先卸载LicenseKeyAdmini......
  • Linux基础1-权限1(用户,权限是什么?)
    一.Linux用户    Linux有两种用户。普通用户和root用户root用户(超级管理员)    普通用户(受权限约束的用户)1.1 普通用户如何切换到root用户?su+用户名即可(root用户名就是root),然后输入相应的密码就能切换su        切换到其他用户的当前目录su-......
  • Linux iotop命令基本使用
    目录一.简介二.安装三.参数四.使用4.1查看top4.2查看正在产生I/O的进程或线程4.3时间刷新间隔2秒,输出5次4.4查看非交互式,输出5次,间隔2秒,输出到屏幕,也可输出到日志文本4.5查看非交互式,输出pid为29265的进程信息一.简介iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命......
  • Linux安装gtilab居然如此简单,洒洒水啦
    前言啦,随便看看咯官网:https://about.gitlab.com/1、gitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。2、GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代......
  • Linux用户创建命令
    创建一个新用户useradd新用户名如果不设定它属于哪个组,它会默认在创建它的用户的组里设置密码passwd新用户名查看所有组的简单信息moregroup设置新的组groupadd新的组名创建新用户并把它放在新的组里,不在默认的组useradd新用户名-g新的用户组把旧用户改......
  • 【待做】【Linux系列】使用fail2ban配置动态防火墙
    一、安装二、测试三、基本配置四、相关命令原创戒一双LINUX开源玩家前面说的防火墙基本是静态的情况,在实际运行中我们可能需要动态调整防火墙策略,此时可以考虑使用Fail2ban。Fail2ban可以通过创建规则,自动更改防火墙配置,在尝试登录失败达到一定次数后禁止特定IP,......