Linux源码阅读笔记19-插入删除模块实战

简介: Linux源码阅读笔记19-插入删除模块实战

前面已经讲了Linux模块的基本知识,现在我们来熟悉一下模块相关的基本操作。

模块的编写

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
// 插入内核时的函数
static int __init lnm_init(void) {
    printk("hello world kernel.\n");
    return 0;
}
// 退出内核的函数
static void __exit lnm_exit(void) {
    printk("Goodbye kernel.\n");
}
// 将模块插入内核
module_init(lnm_init);
module_exit(lnm_exit);
MODULE_LICENSE("GPL");

上面就是一个最简单的内核模块,当插入的时候会打印hello world kernel.退出内核时会打印Goobye kernel.。现在我们需要为他编写Makefile。

obj-m:=vm.o
# 当前目录
CURRENT_PATH:=$(shell pwd)
# linux内核版本
LINUX_KERNEL:=$(shell uname -r)
# linux内核头文件目录
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
all:
  make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
  make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

编译 插入 查看 删除

编译

make

直接运行make即可,结果如下:

插入

sudo insmod [xxx.ko]

查看

  • 第一是如何查看内核日志
dmesg

由于我们刚刚插入了一个模块,所以看到了最下面插入时打印的消息。

  • 第二是查看内核已经加载的模块
lsmod

这里可以看到所有已经被插入的模块。

删除

运行:

sudo rmmod xxx

即可将模块从内核中移除,移除后可以运行dmesg查看日志,查看效果如下:

相关文章
|
3月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
184 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
119 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
4月前
|
监控 Linux Shell
30 个实用的 Linux 命令贴与技巧,提升你的效率(附实战案例)
本文介绍了30个实用的Linux命令及其应用场景,帮助你提升命令行操作效率。涵盖返回目录、重新执行命令、查看磁盘使用情况、查找文件、进程管理、网络状态监控、定时任务设置等功能,适合各水平的Linux用户学习和参考。
|
5月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
126 2
linux笔记 diff及patch的制作与使用
|
5月前
|
Linux 文件存储 数据安全/隐私保护
Linux用户组管理实战:创建、管理与删除的全面指南
在 Linux 系统中,用户组管理是实现权限控制和资源共享的关键。本文档详细介绍如何创建用户组、管理用户组成员及查看与删除用户组。首先,通过 `groupadd` 命令创建新用户组,并在 `/etc/group` 文件中记录。接着,利用 `usermod` 和 `gpasswd` 命令来添加或删除用户组成员,其中 `gpasswd` 提供更灵活的管理方式。最后,使用 `getent` 或直接读取 `/etc/group` 查看用户组信息,并通过 `groupdel` 删除空用户组。这些操作有助于高效管理和保护系统资源。
383 4
|
5月前
|
Ubuntu Linux Shell
【linux】PetaLinux 2024.1安装笔记
【linux】PetaLinux 2024.1安装笔记
335 0
|
Linux
《精通Linux设备驱动程序开发》——1.8 可加载的模块
内核模块减小了内核的大小,并缩短了开发——编译——测试的周期。为了让一次修改生效,你仅仅需要重新编译特定的模块并重新加载它。在第21章中,我们将学习模块调试技术。
1428 0
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
138 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
552 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
104 3