第32章 Linux内核打印实验

news2024/11/18 9:47:15

本手册的实验都是在buildroot系统上完成的,由于buildroot系统已经设置了相应的打印等级,所以驱动的相关打印都能正常显示在串口终端上,如果将实验系统换成了ubuntu,然后加载同样的驱动,会发现打印信息不见了,这一现象的基本原因就是内核打印等级不同,那打印等级是如何修改的呢,查看打印等级的方式又有哪些呢,就让我们进入本章节的学习吧!

32.1 方法一:dmseg 命令

在终端使用dmseg命令可以获取内核打印信息,该命令的具体使用方法如下所示:

dmesg命令

**英文全称:**display message(显示信息)

**作用:**kernel 会将打印信息存储在 ring buffer 中。可以利用 dmesg命令来查看内核打印信息。

常用参数:

-C,–clear清除内核环形缓冲区

-c,—-read-clear读取并清除所有消息

-T,–显示时间戳

提示:dmesg命令也可以与grep命令组合使用。如查找待用usb关键字的打印信息,就可以使用如下命令:dmseg | grep usb

首先在串口终端使用“dmseg”命令,可以看见相应的内核打印信息已经加载了出来,如下图(图 32-1)所示:

img

图 32-1

然后使用以下组合命令查找nfs相关的打印信息,如下图(图 32-2)所示:

dmesg | grep nfs

img

图 32-2

至此关于dmesg命令就讲解演示完成了。

32.2 方法二:查看kmsg文件

内核所有的打印信息都会输出到循环缓冲区 ‘log_buf’,为了能够方便的在用户空间读取 内核打印信息,Linux内核驱动将该循环缓冲区映射到了/proc目录下的文件节点kmsg。通过 cat或者其他应用程序读取Log Buffer的时候可以不断的等待新的log,所以访问/proc/kmsg 的方式适合长时间的读取log,一旦有新的log就可以被打印出来。

首先使用以下命令读取kmsg文件,在没有新的内核打印信息时会阻塞,如下图(图 32-3)所示:

cat /proc/kmsg

img

图 32-3

然后在该设备的其他终端加载任意有打印信息的驱动文件(这里使用的是ssh),如下图(图 32-4)所示:

img

图 32-4

在串口终端中可以看到对应驱动的打印信息就被打印了出来,如下图(图 32-5)所示:

img

图 32-5

32.3 方法三:调整内核打印等级

内核的日志打印由相应的打印等级来控制,可以通过调整内核打印等级来控制打印日志的输出。使用以下命令查看当前默认打印等级,如下图(图 32-6)所示:

cat /proc/sys/kernel/printk

img

图 32-6

可以看到内核打印等级由四个数字所决定,“7 4 1 7” 分别对应console_loglevel、default_message_loglevel、minimum_c onsole_loglevel、default_console_loglevel,具体类型说明如下表(表 32-7)所示:

终端打印类型对应类型说明
console_loglevel只有当printk打印消息的log优先级高于console_loglevel时,才能输出到终端上
default_message_loglevelprintk打印消息时默认的log等级
minimum_console_loglevelconsole_loglevel可以被设置的最小值
default_console_loglevelconsole_loglevel的缺省值

表 32-7

上面的“7 4 1 7”意味着只有优先级高于KERN_DEBUG(7)的打印消息才能输出到终端,在“内核源码/include/linux/kern_levels.h”文件中对于文件打印等级进行了如下打印等级定义:

#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 */

printk在打印信息前,可以加入相应的打印等级宏定义,具体格式如下所示:

printk(打印等级 “打印信息”)

接下来将使用以下驱动例程进行实际的打印等级测试:

#include <linux/module.h>
#include <linux/kernel.h>
static int __init helloworld_init(void)
{
    printk(KERN_EMERG " 0000 KERN_EMERG\n");
    printk(KERN_ALERT " 1111 KERN_ALERT\n");
    printk(KERN_CRIT " 2222 KERN_CRIT\n");
    printk(KERN_ERR " 3333 KERN_ERR\n");
    printk(KERN_WARNING " 4444 KERN_WARNING\n");
    printk(KERN_NOTICE " 5555 KERN_NOTICE\n");
    printk(KERN_INFO " 6666 KERN_INFO\n");
    printk(KERN_DEBUG " 7777 KERN_DEBUG\n");
    printk(" 8888 no_fix\n");
    return 0;
}
static void __exit helloworld_exit(void)
{
    printk(KERN_EMERG "helloworld_exit\r\n");
}

module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("topeet");

加载该驱动之后,第5-11行0-6等级的打印信息就被打印了出来,第13行由于没有设置打印等级,所以会被赋予默认打印等级4,高于console_loglevel打印等级,所以也会被打印出来,最后只有第12行打印等级为7的信息,和console_loglevel打印等级相同,所以不会被打印出来,如下图(图 32-8)所示:

img

图 32-8

然后使用以下命令将console_loglevel打印等级设置为4,如下图(图 32-9)所示:

echo 4 4 1 7 > /proc/sys/kernel/printk

img

图 32-9

卸载驱动之后,再一次加载驱动,发现只有打印等级高于4的相关信息被打印了出来,如下图(图32-10)所示:

img

图32-10

至此关于内核打印等级的实验就结束了。

【最新驱动资料(文档+例程)】

链接 https://pan.baidu.com/s/1M4smUG2vw_hnn0Hye-tkog

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

baidu.com/s/1M4smUG2vw_hnn0Hye-tkog

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

2452613.11.2fec74a6elWNeA&id=669939423234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PBR纹理的10种贴图

PBR 是基于物理的渲染的首字母缩写。它试图通过模拟材料如何吸收和反射光&#xff0c;以模仿现实世界中的光流的方式产生视觉效果。最近的游戏引擎由于其逼真的效果而越来越多地使用 PBR 纹理。对于实时渲染&#xff0c;它们被认为是真实世界场景的最佳近似值。 推荐&#xff…

极星 4:一辆不需要宣传就自带美学的车

当市面上的新车都开始逐步走向更多的功能、更繁琐的设计的时候&#xff0c;极星更像一个独行的人&#xff0c;走了一条跟其他车企大相径庭的道路&#xff0c;带给我们对于同一个世界不同的视图。 不张扬、够简洁&#xff0c;从不炫耀自己但又蕴含着大的智慧&#xff0c;如夜空中…

Python深度学习-Keras》精华笔记4:解决深度学习回归问题

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第4篇&#xff1a;基于Keras解决深度学习中的回归问题。 Keras内置数据集 回归问题中使用的是内置的波士顿房价数据…

JavaScript中的事件捕获(event capturing)和事件冒泡(event bubbling)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件捕获和事件冒泡⭐ 事件捕获&#xff08;Event Capturing&#xff09;示例&#xff1a; ⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;示例&#xff1a; ⭐ 应用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…

苹果电脑版虚拟机推荐 VMware Fusion Pro for mac(vm虚拟机)

VMware Fusion Pro是一款功能强大的虚拟化软件&#xff0c;专为Mac用户设计。它允许用户在Mac上创建、运行和管理虚拟机&#xff0c;以便同时运行多个操作系统和应用程序。 以下是VMware Fusion Pro的一些主要特点和功能&#xff1a; 1. 多操作系统支持&#xff1a;VMware Fu…

CocosCreator3.6.2图片导入到工程,没办法拖动到场景中

解决方案&#xff1a;将资源的属性类型由texture调整为sprite-frame

字节、华为、美团软件测试面试真题(超详细~)

前言 最近已经算是秋招了&#xff0c;所以最近博主会努力给大家搜集整理一些各大公司测试岗测开岗的面经&#xff0c;希望能帮助到大家更好的入职想去的公司哦&#xff0c;关注我&#xff0c;一个每日分享软件测试知识的日更博主。 同时&#xff0c;我也准备了一份软件测试面…

Git 概述命令、idea中的使用

目录 Git概述 Git代码托管服务 Git常用命令 Git 全局设置 获取 Git 仓库 ​编辑Git 工作区中文件的状态 本地仓库操作 远程仓库操作 ​编辑分支操作 标签操作 在IDEA中使用Git 1.获取Git仓库 .gitignore 表示忽略 2.本地仓库操作 3.远程仓库操作 4.分支操作 Git是…

C++项目实战——基于多设计模式下的同步异步日志系统-⑤-实用工具类设计与实现

文章目录 专栏导读获取系统时间time介绍 getTime函数设计判断文件是否存在stat介绍exists函数设计 获取文件所在路径find_last_of介绍path函数设计 创建文件所在目录mkdir介绍find_first_of介绍函数createDirectory设计 实用工具类整理 专栏导读 &#x1f338;作者简介&#xf…

智慧公厕助力数字强市建设,打造善感知新型信息化公共厕所

随着城市建设的不断发展&#xff0c;智慧公厕作为一个重要的基础设施&#xff0c;正逐渐受到人们的重视。智慧公厕不仅为人们提供舒适的使用环境&#xff0c;更是通过数字化技术的应用&#xff0c;为城市发展注入新的动力。本文将以智慧公厕源头厂家广州中期科技有限公司&#…

我是如何用 redis 分布式锁来解决线上历史业务问题的

近期发现&#xff0c;开发功能的时候发现了一个 mq 消费顺序错乱&#xff08;历史遗留问题&#xff09;&#xff0c;导致业务异常的问题&#xff0c;看看我是如何解决的 问题抛出 首先&#xff0c;简单介绍一下情况&#xff1a; 线上 k8s 有多个 pod 会去消费 mq 中的消息&a…

编写更嵌入式软件代码的10个技巧

代码维护是应用程序开发的重要方面&#xff0c;而为了缩短上市时间&#xff0c;通常会忽略代码维护。对于某些应用程序&#xff0c;这可能不会造成重大问题&#xff0c;因为这些应用程序的寿命很短&#xff0c;或者已部署该应用程序&#xff0c;并且再也不会碰它。 但是&#x…

UIScrollView setContentOffset: animated:

项目中遇到感觉一切都设置对了&#xff0c;但是看到的效果和预想的不一样。 后来查询了一番&#xff0c;才知道问题所在&#xff0c;现在记录一下&#xff0c;担心过后又忘了。 最初的问题是这样的&#xff0c;这个热度只有在评论里有&#xff0c;点击赞的时候&#xff0c;热度…

视频号的视频怎么下载,有什么下载工具推荐

视频下载助手去水印小工具是一款方便实用的工具&#xff0c;可以帮助用户在下载视频的时候可以一键去除视频中的水印。 该工具支持多种视频平台的去水印功能&#xff0c;如抖音、快手、小红书、视频号、公众号文字视频、西瓜视频、哔哩哔哩、微博视频、多多视频等。 经过亲自测…

为什么女程序员那么稀缺?女程序员吃不吃香?

程序员脱单一直是个难题&#xff0c;这里的一个客观原因就是程序员群体的男女比例严重失衡&#xff08;比如我司达到了2:8&#xff09;&#xff0c;身边的工作环境缺少异性&#xff0c;大老爷们天天混在一起&#xff0c;脱单自然也就更加困难了。 女程序员那么稀缺&#xff0c…

《Python深度学习-Keras》精华笔记3:解决深度学习多分类问题

公众号&#xff1a;机器学习杂货店作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第三篇&#xff1a;介绍如何使用Keras解决Python深度学习中的多分类问题。 多分类问题和二分类问题的区别注意…

180页的Python完全版电子书

大家好&#xff0c;我是涛哥。 Python学习有很多方式&#xff0c;可以从基础一步步看语法&#xff0c; 可以从案例一步步学习&#xff0c;本篇内容就是通过案例进行讲解&#xff0c;方便大家一步一步进行学习实战。 整个内容经过几个月总结《Python之路2.0.pdf》&#xff0c…

基于 Python 的音乐流派分类

音乐就像一面镜子&#xff0c;它可以告诉人们很多关于你是谁&#xff0c;你关心什么&#xff0c;不管你喜欢与否。我们喜欢说“you are what you stream” - Spotify Spotify 拥有 260 亿美元的净资产&#xff0c;是如今很受欢迎的音乐流媒体平台。它目前在其数据库中拥有数百…

Java拓展--空间复杂度和时间复杂度

空间复杂度和时间复杂度 文章目录 空间复杂度和时间复杂度空间复杂度时间复杂度**评价排序算法****时间频度****什么是时间频度****忽略常数项****忽略低次项****忽略系数** **时间复杂度****什么是时间复杂度****计算时间复杂度的方法****常见的时间复杂度** **常见的时间复杂…

正中优配:证券融资融券是什么意思?

证券融资融券&#xff08;简称“融资融券”&#xff09;是一种股票出资办法&#xff0c;是指出资者经过融券生意和融资生意来进行股票出资。它在出资商场上具有重要的作用&#xff0c;因为经过这种办法&#xff0c;出资者能够使用假贷资金进行股票生意&#xff0c;能够进步出资…