1.内核头文件
#include <linux/module.h>
:包含内核模块信息声明的相关函数#include <linux/init.h>
:包含了 module_init()和 module_exit()函数的声明#include <linux/kernel.h>
:包含内核提供的各种函数,如printk
2.内核打印等级
printf
:glibc实现的打印函数,工作于用户空间printtk
:内核无法使用glibc
函数,内核实现一个类printf的函数,不过需要指定打印等级
,等级越低级别越高- #define KERN_EMERG “<0>” 通常是系统崩溃前的信息
- #define KERN_ALERT “<1>” 需要立即处理的消息
- #define KERN_CRIT “<2>” 严重情况
- #define KERN_ERR “<3>” 错误情况
- #define KERN_WARNING “<4>” 有问题的情况
- #define KERN_NOTICE “<5>” 注意信息
- #define KERN_INFO “<6>” 普通消息
- #define KERN_DEBUG “<7>” 调试信息
2.1 查看当前系统的printk打印等级 cat /proc/sys/kernel/printk
数字代表的意思为:
- 当前控制台日志级别,printk函数小于这个将会被打印出来
- 默认信息日志级别
- 最小的控制台级别
- 默认控制台日志级别
打印内核所有打印信息:dmesg
- 内核log缓冲区大小有限制,缓冲区数据可能被冲掉
3.内核模块入口/出口
- module_init():加载模块式该函数自动执行,进行初始化操作
- module_exit():卸载模块时函数自动执行,进行清理操作
4.内核模块信息声明
- MODULE_LICENSE():表示模块代码接受的软件许可协议,Linux内核遵循GPL V2开源协议,内核模块与linux内核保持一致即可。
- MODULE_AUTHOR():描述模块的作者信息
- MODULE_DESCRIPTION():对模块的简单介绍
- MODULE_ALIAS():给模块设置一个别名