专题三内核模块
实验要求:
题目一 编写一个内核模块; 编译该模块; 加载、卸载该模块;
题目二 用内核模块的方式为系统添加一个系统调用 具体要求同专题二
提交内容:
内核模块加载/卸载截图
评分标准: 至少完成题目一(60-80分) 自主完成题目二(90-100分)
1 内核模块概念
- 是一段可以 动态加入内核,并且成为内核一部分的代码
- 优点:
- 通过动态加载内核模块,使得在运行过程中扩展内核的功能
- 减小内核映像大小,增加系统灵活性
- 只需要修改内核,而不必重新编译整个内核
2 内核模块相关命令
- 加载内核模块:
#insmod module_name
- 卸载内核模块:
#rmmod module_name
- 或者
#modprobe -r module_name
- 查看系统已经加载的模块:
#lsmod
- 查看系统已经加载的模块信息:
#modinfo module_name
3 内核模块的编写,例子
内核模块源代码:
1 |
|
内核模块说明
hello_init()
: 模块入口函数- 由
module_init()
宏指定 - 在模块被加载时被调用
- 返回值为0:成功,非零则失败
- 由
hello_exit()
: 模块退出函数- 由
module_exit()
宏指定 - 在模块被卸载时被调用
- 作用:清完成资源的清理,被调用完毕后,模块就被卸载了
- 由
- 一个模块至少有 入口 和 退出函数
- 宏
MODULE_LICENSE("GLP")
: 设置模块版权信息 - 宏
MODULE_DESCRIPTION()
: 描述模块的用途 - 宏``
4 通过 module 进行内核添加系统调用
参考博客 Linux/Ubuntu18.04 下添加系统调用的两种方法 (内核编译法|模块添加)_Egqawkq的博客-CSDN博客](https://blog.csdn.net/egqawkq/article/details/88970390))
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment