对于许多Linux爱好者来说,编写一个内核模块是深入理解操作系统内部工作的绝佳起点。本文将带你从零开始,在Ubuntu系统上编写一个最简单的Hello World内核模块。通过实践,你将掌握Linux内核编程的基本流程,为后续学习复杂驱动打下基础。这个过程虽然简单,但涵盖了驱动开发的核心步骤:环境配置、代码编写、编译、加载与测试。
在Ubuntu上开发内核模块,需要安装编译工具和内核头文件。打开终端,执行以下命令:
sudo apt updatesudo apt install build-essential linux-headers-$(uname -r) build-essential 提供gcc、make等工具,linux-headers 则包含当前内核的编译依赖。确保安装成功后再进行下一步。
创建一个工作目录,比如 ~/hello_driver,并在其中新建 hello.c 文件。代码如下:
#include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("Your Name");MODULE_DESCRIPTION("A simple Hello World kernel module");static int __init hello_init(void) { printk(KERN_INFO "Hello, world!"); return 0;}static void __exit hello_exit(void) { printk(KERN_INFO "Goodbye, world!");}module_init(hello_init);module_exit(hello_exit); 这段代码定义了模块加载和卸载时的行为。printk 是内核空间的输出函数,信息可通过 dmesg 查看。
在同一个目录下创建 Makefile(注意首字母大写),内容如下:
obj-m += hello.oall: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 这个Makefile利用内核源码树来编译外部模块。obj-m 指定要生成的目标模块名,-C 切换到内核构建目录,M=$(PWD) 指明模块源码路径。
在终端进入工作目录,执行 make 命令:
cd ~/hello_drivermake 如果一切顺利,会生成 hello.ko 文件,这就是我们的内核模块。
使用 insmod 加载模块,并用 lsmod 查看是否加载成功:
sudo insmod hello.kolsmod | grep hello 然后查看内核日志,应该能看到“Hello, world!”:
dmesg | tail 卸载模块使用 rmmod:
sudo rmmod hello 再次用 dmesg 查看,会看到“Goodbye, world!”。
恭喜!你已经成功在Ubuntu上编写并运行了第一个内核模块。这个过程展示了编写简单驱动的核心步骤。接下来你可以尝试修改代码,添加更多功能,或者学习字符设备驱动、平台驱动等更复杂的主题。记住,内核编程需要谨慎,错误的代码可能导致系统崩溃,建议在虚拟机中实践。
本文关键词:Ubuntu驱动开发、Hello World内核模块、Linux内核编程、编写简单驱动。希望这篇教程对你有所帮助!
本文由主机测评网于2026-02-15发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260225283.html