文章目录
- 一、驱动模块操作命令
- 1. 安装模块 insmod
- 2. 查看模块 lsmod
- 3. 卸载模块 rmmod
- 4. 问题总结
- 二、printk打印语句
- 1. 内核中的打印级别
- 2. 通过级别过滤打印信息
- 3. 修改默认消息级别
- 4. 测试消息级别
- ① 原始终端查看
- ② dmesg命令
- 5. 打印信息的宏定义
一、驱动模块操作命令
1. 安装模块 insmod
sudo insmod hello.ko
2. 查看模块 lsmod
lsomd
3. 卸载模块 rmmod
sudo rmmod demo
- 注:卸载模块,不要加.ko
4. 问题总结
① 安装时不加sudo
② 使用开发板目录下的Makefile文件进行模块化编译生成的是ARM架构的驱动模块,如果试图安装在x86架构的系统上,就会报错
二、printk打印语句
语法格式:
printk(打印级别 “控制格式”,变量)
参数:如果不输入打印级别,会采用默认消息级别
备注:
打印级别和后面中间用 空格 分隔
printf是用户空间的;printk是内核空间的。
printfk也有缓冲区,行缓冲区。
1. 内核中的打印级别
用于过滤打印信息的,共分为8种打印级别,分别是0-7。
#define KERN_EMERG KERN_SOH "0" /* system is unusable */
#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
#define KERN_CRIT KERN_SOH "2" /* critical conditions */
#define KERN_ERR KERN_SOH "3" /* error conditions */
#define KERN_WARNING KERN_SOH "4" /* warning conditions */
#define KERN_NOTICE KERN_SOH "5" /* normal but significant condition */
#define KERN_INFO KERN_SOH "6" /* informational */
#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
数字越小优先级越高,越大优先级越低
2. 通过级别过滤打印信息
只有当消息级别 高于 (等于也不会显示)终端级别消息才会在终端上显示
cat /proc/sys/kernel/printk
终端消息级别 | 默认消息级别 | 终端最高消息级别 | 终端最低消息级别
3. 修改默认消息级别
需要先进入root模式才能修改
echo 4 3 1 7 > /proc/sys/kernel/printk
4. 测试消息级别
① 原始终端查看
Ctrl + Fn + Alt + F2~F6
Ctrl + Fn + Alt + F1
② dmesg命令
dmesg命令
-c:先显示再清除所有打印信息
-C:清除打印信息
- 注:清除打印信息需要加sudo权限
-l 或 --level:指定查看信息的级别
或者使用dmesg -l err,warn
红色是高于终端级别,白色是等于或者小于终端级别
5. 打印信息的宏定义
在printk基础上又封装了一层宏函数
- pr_emerg
- pr_alert
- pr_crit
- pr_err
- pr_warn
- pr_notice
- pr_info
- pr_cont