Linux内核模块开发实战:Hello World模块
需积分: 0 34 浏览量
更新于2024-08-20
收藏 1.16MB PPT 举报
"动手练习-第二章内核模块"
在Linux操作系统中,内核模块是一种可动态加载和卸载的代码片段,它们允许用户在需要时扩展内核的功能,而不必重新编译整个内核。本章节主要关注的是如何编写、编译以及管理一个简单的“Hello, World”内核模块。
内核模块的定义与特点:
1. 模块在被加载后并不立即执行,而是在特定请求到来时才发挥作用,之后它可以被卸载。
2. 模块可以实现驱动程序、文件系统或其他内核服务。
3. 加载模块后,它们运行在内核空间,与内核紧密集成。
内核模块的代码框架通常包含初始化函数(hello_init)和退出函数(hello_exit),它们分别在模块加载和卸载时被调用。例如:
```c
#include<linux/module.h>
#include<linux/init.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hello, world\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
```
`module_init` 和 `module_exit` 宏用于指定模块的入口和出口点。`__init` 和 `__exit` 宏用于告诉编译器这些函数只在初始化或清理阶段使用,可以优化内存使用。
动手实践部分包括编写这个简单的模块,然后修改`Makefile`来编译模块。`Makefile`应配置为编译内核模块,同时更新`Kconfig`文件以包含新模块。使用`make menuconfig`可以选择模块,然后`make modules`来编译所有模块。完成后,你会得到一个`.ko`扩展名的内核模块文件,如`myhello.ko`。
加载和卸载模块:
- 使用`insmod`命令加载模块,例如:`# insmod ./myhello.ko`
- 使用`rmmod`命令卸载模块,例如:`# rmmod myhello`
- 使用`lsmod`命令查看当前已加载的内核模块,例如:`# lsmod`
模块参数功能允许在加载模块时传递参数。通过`module_param`声明单个参数,例如:
```c
static char *whom = "world";
module_param(whom, charp, S_IRUGO);
```
这里,`whom`参数可以被外部设置。`module_param_array`可以用于声明参数数组,但其用法较为复杂,初学者可以先不涉及。
总结来说,本章节的动手练习旨在让学习者了解Linux内核模块的基本概念,包括编写、编译和管理简单模块的流程,以及如何使用参数功能。通过实际操作,能加深对内核模块工作原理的理解,并为后续更复杂的驱动开发打下基础。
点击了解资源详情
点击了解资源详情
点击了解资源详情
667 浏览量
334 浏览量
534 浏览量
421 浏览量
516 浏览量
356 浏览量
xxxibb
- 粉丝: 22
- 资源: 2万+