千家信息网

怎么编写Linux内核模块HelloWorld

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"怎么编写Linux内核模块HelloWorld"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2026年11月03日怎么编写Linux内核模块HelloWorld

本篇内容介绍了"怎么编写Linux内核模块HelloWorld"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

准备工作

在进行以下操作前,首先我准备了一台电脑,并且安装了虚拟机,系统是Ubuntu16.04。如果是开发板,那么需要安装交叉编译器,但是目前我只在虚拟机的Ubuntu16.04系统里完成驱动模块的加载和卸载,实现了一个最最简单的内核模块,并且通过这个最简单的驱动,学习最基本的概念。

需要先安装对应的开发支持

yum install kernel-headers kernel-devel gcc glibc gcc-c++ -y //等,autoconfig, make等工具。

什么是内核模块

模块是可以根据实际需要可以动态加载和卸载到内核中的代码。它们扩展了内核的功能,而无需重启系统,就可以进行模块加载,并工作。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。没有模块,我们必须构建整个内核并将新功能直接添加到内核映像中。除了拥有更大的内核之外,这还有一个缺点,就是每次我们想要新功能时都需要我们重新编译内核并烧录到设备。

编写 hello.c

#include //所有模块都会需要这个头文件#include //下面的宏需要#include //内核常用库函数static int __init hello_init(void){        printk(KERN_INFO "module init success\n");        return 0;}static void __exit hello_exit(void){        printk(KERN_INFO "module exit success\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");//开源协议MODULE_AUTHOR("作者");MODULE_DESCRIPTION("功能描述");

这是一个简单内核模块程序,可以动态加载和卸载。虽然没有实际的功能。
模块加载的时候系统会打印module init success\n
模块卸载的时候系统会打印module exit success\n

模块编译

Makefile

obj-m := hello.oPWD := $(shell pwd)KVER := $(shell uname -r)KDIR :=/lib/modules/$(KVER)/build/all:        $(MAKE) -C $(KDIR) M=$(PWD)clean:        rm -rf *.o *.mod.c *.mod.o *.ko *.symvers *.order *.a

将hello.c和Makefile放在同一路径下进行编译,编译成功,会在当前路径下生成hello.ko,这就是我们将要加载到内核的模块。

相关指令

namefunction
lsmod查看已经加载到内核中的模块
insmod加载模块到内核中
rmmod从内核卸载模块
depmod生成模块所需要的依赖
modprobe很强大的指令(-h)

测试结果

模块加载

加载hello.ko模块到内核中

如果模块加载成功的话,可以查看模块

lsmod | grep hello

成功加载会显示以下结果

并且可以查看内核打印的消息

dmesg | grep "init success"
[ 4160.003247] module init success

模块卸载

rmmod hello.ko

成功卸载hello模块后,可以查看内核是否正常打印出我们预设在程序的打印信息。

dmesg | grep "exit success"

可以看到终端上显示module exit success,说明通过rmmod成功卸载hello.ko

[ 7160.003247] module exit success

这时候,如果再通过lsmod去查看当前的内核模块,就会发现hello.ko已经消失不见了。

"怎么编写Linux内核模块HelloWorld"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

模块 内核 系统 成功 编译 功能 实际 程序 驱动 内容 动态 就是 指令 新功能 时候 更多 知识 结果 设备 路径 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 广东万易互联网科技有限公司惠州分公司 亿人帮互联网科技有限公司 互联网佳科技有限公司 互联网核心科技是什么 百单互联网科技有限公司 一五八零互联网科技 互联网科技大会案例 甘肃拓世互联网科技有限公司 天速互联网络科技有限公司 重庆互联网医院沙龙医盟信息科技 湖南一路畅行互联网科技 崇明区互联网教育科技售后服务 广州市恰铎互联网科技有限公司 北京市互联网新科技 互联网科技融合创新 宁波跨境商互联网科技有限公司 网互联网络科技 互联网大会出现的黑科技 恒生科技互联网指数十大成分股 互联网高科技 互联网扶贫科技 互联网科技公司官网 广州善班互联网科技 世界互联网科技公司市值排名 速维有品互联网信息科技(苏州)有限公司 链环科技传统企业怎么转型互联网 佛山市翊博互联网络科技有限公司 新氧科技和美国互联网有关系吗 长沙易易互联网科技有限公司
0