我是靠谱客的博主 懦弱鱼,最近开发中收集的这篇文章主要介绍内核打印函数printk,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

printk VS printf:

相同点:都是用于打印输出信息,使用一致
不同点:前者在内核中使用,后者在应用程序中使用

printk函数的特点

1.能够指定打印输出级别,有0~7共8级

使用案例:
printk (KERN_ERR, “this is a error messagen”);
printk (“<3>”, “this is a error messagen”) ;

指定打印输出级别的目的就是为将来有些信息能够做输出处理;此时需要指定一个默认的打印输出级别来指定信息是否需要输出到终端上:

如果默认的打印输出级别比如为4,那么printk指定的打印输出级别如果小于4,那么信息一律输出到终端上;
如果printk指定的打印输出级别大于等于4,那么信息一律不做输出;

默认的打印输出级别如何设置呢?

默认的打印输出级别的设置方法有两种

方法1:
通过修改配置文件来指定默认的打印输出级别
/proc/sys/kernel/printk
方法2:
第一种方法虽然能够设置默认的打印输出级别,但是对于内核启动时的打印输出信息,这种方法不能使用;
并且/proc目录作为procfs虚拟文件系统的入口, /proc目录下的内容都是存在于内存中,掉电就丢失。
对于内核的启动信息,可以利用方法2来指定:
实施步骤:
只需要在内核的启动参数中添加以下选项即可: debug / quiet / loglevel=数字

编写内核程序, 掌握printk的使用

实施步骤:
1.mkdir /opt/drivers/4.0
2.cd /opt/drivers/4.0
3.vim printk_all.c
4.vim Makefile
5.make
6.cp printk_all.ko /opt/rootfs

ARM执行:
1.insmod printk_all.ko
2.rmmod printk_all
3.cat /proc/sys/kernel/printk //获取默认的打印输出级别
7(默认终端打印输出级别) 4 1 7
4.echo 8 > /proc/sys/kernel/printk
5.insmod printk_all.ko
6.rmmod printk_all

printk_all.c如下:

#include <linux/init.h>
#include <linux/module.h>

static int printkall_init(void)
{
    printk("<0>" "level 0!n");
    printk("<1>" "level 1!n");
    printk("<2>" "level 2!n");
    printk("<3>" "level 3!n");
    printk("<4>" "level 4!n");
    printk("<5>" "level 5!n");
    printk("<6>" "level 6!n");
    printk("<7>" "level 7!n");
    return 0;
}

static void printkall_exit(void)
{
    printk("<0>" "level 0!n");
    printk("<1>" "level 1!n");
    printk("<2>" "level 2!n");
    printk("<3>" "level 3!n");
    printk("<4>" "level 4!n");
    printk("<5>" "level 5!n");
    printk("<6>" "level 6!n");
    printk("<7>" "level 7!n");

}
module_init(printkall_init);
module_exit(printkall_exit);
MODULE_LICENSE("GPL");

最后

以上就是懦弱鱼为你收集整理的内核打印函数printk的全部内容,希望文章能够帮你解决内核打印函数printk所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部