嵌入式驱动学习第二周——Linux内核打印

前言

   这篇博客来聊一聊Linux内核打印。

   嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦!

目录

  • 前言
  • 1. dmesg指令——查看内核打印信息
    • 1.1 dmesg基本使用
    • 1.2 dmesg进行关键词查找
    • 1.3 实时打印最后N行
    • 1.4 kmsg
  • 2. printk函数
    • 查看内核打印等级
    • 调整内核打印等级
    • 使用方法
  • 问题
  • 参考资料

1. dmesg指令——查看内核打印信息

1.1 dmesg基本使用

   dmesg是Linux系统重查看内核日志的使用工具,允许查看系统内核的输出消息,包括引导信息,硬件检测,设备驱动和系统错误等,通过dmesg可以追踪系统启动过程的事件,排查故障。

   我们在启动linux系统的时候会有一连串的信息打印出来,如果我们后续想要再看一次启动的信息,就可以用dmesg回显一下,内核将打印的信息存储到ring buffer中,我使用的是MobaXterm,在其中的控制台输入dmesg查看ring buffer中存储的启动信息:

在这里插入图片描述

   回车后就会显示如下的信息,就会打印出启动的信息:

在这里插入图片描述

   后面可以跟一些参数,常用的参数如下所示:

-C,清除内核环形缓冲区(ring buffer)
-c ,读取并清除所有消息
-T,显示时间戳

   使用dmesg -c打印内核信息后,再次输入dmesg就读不到了,因为被清除了

在这里插入图片描述

1.2 dmesg进行关键词查找

   dmesg可以与grep组合使用,查找关键词,比如我们要查找与cpu相关的信息,可以使用如下命令,不区分大小写查找CPU相关信息:

dmesg | grep -i cpu

在这里插入图片描述

1.3 实时打印最后N行

   实时监控查看日志末尾N行可以用以下指令,查看末尾的N行,结果是一致显示的,每隔2s显示一次

watch “dmesg | tail -5

在这里插入图片描述

1.4 kmsg

   内核把所有的打印信息会输出到循环缓冲区log_buf,为了方便在用户控件读取内核打印信息,Linux内核驱动将该循环缓冲区映射到/proc目录下的文件节点kmsg中,通过cat指令读取log Buffer时可以不断等待新的log,所以访问/pro/kmsg的方式适合长时间读取log。

   使用以下指令读取kmsg,没有新的内核打印信息时会阻塞。

cat /proc/kmsg

   如下就是处于阻塞状态:
在这里插入图片描述

2. printk函数

查看内核打印等级

   内核日志的打印由相应的打印等级来控制,可以通过调整内核打印等级来控制打印日志的输出:

cat /proc/sys/kernel/printk

在这里插入图片描述

   这四个数字分别对应 console_logleveldefault_message_loglevelminimum_console_logleveldefault_console_loglevel

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

   printk的四个等级意味着,只有优先级高于KERN_DEBUG(7)的打印消息才能输出到终端

调整内核打印等级

   通过echo指令进行修改,如下所示,将当前的日志级别修改为4,最后通过cat查看发现第一个数变成了4:

echo 4 > /proc/sys/kernel/printk

在这里插入图片描述

   也可以一次性改变多个值,如下所示:

echo 4 2 0 6 > /proc/sys/kernel/printk

在这里插入图片描述

   这种方法重启内核后会重新变为 7 4 1 7,也就是说重启内核后需要重新修改

使用方法

   printk函数就类似于printf函数,不过printf函数用于应用层,是用户空间的打印函数,printk是内核空间的打印函数。

   可以利用printk函数打印一些内核的提示信息。

printk("led driver and device has matched!\r\n");

问题

   显示invalid option

在这里插入图片描述

   有大佬知道这个问题是为什么嘛,求指导 T_T

参考资料

[1] 深入了解Linux下的dmesg指令:查看系统内核日志的利器

[2] Linux命令之dmesg命令

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ(三):AMQP协议

目录 1 AMQP协议1.1 AMQP协议介绍1、AMQP是什么2、消息代理中间件的职责 1.2 AMQP 0-9-1模型1、AMQP的工作过程2、交换器和交换器类型3、队列队列属性队列名称队列持久化 1.3 几个概念1、绑定2、消费者3、消息确认4、预取消息5、消息属性和有效载荷(消息主体&#x…

latex编译生成的pdf文件,图片出现浅色的线

目录 问题描述: 解决办法: 问题描述: 在overleaf中,导入图片,编译之后,不知道为什么会出现一条浅色的线,很影响视觉效果(ps:在浏览器中看不到这条线,但是在pdf阅读器中…

window路径特殊字符解决

官方定义命名规范 https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file 重点 1.目录规范 特殊字符以空格 与点.开头结尾 2.文件规范 特殊字符以空格 与点.开头结尾NUL、COM等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

【C语言基础】:深入理解指针(二)

文章目录 深入理解指针一、指针运算1. 指针 - 整数2. 指针 - 指针3. 指针的关系运算 二、野指针1. 野指针成因2. 如何避免野指针 三、assert断言四、指针的使用和传址调用4.1 strlen的模拟实现4.2 传值调用和传址调用 五、指针与数组5.1 数组名的理解5.2 指针访问数组5.3 一维数…

解放人力,提升品质:码垛输送机的工业应用与价值

在现代工业生产中,码垛输送机已成为许多企业自动化生产线上的关键设备。它不仅可以提高生产效率,降低人力成本,还能确保产品质量,并为企业带来许多其他方面的实际好处。 1. 提高生产效率: 快速码垛:码垛输…

1905_ARMv7-M的堆栈寄存器

1905_ARMv7-M的堆栈寄存器 全部学习汇总: g_arm_cores: ARM内核的学习笔记 (gitee.com) ARMv7-M实现了2种堆栈,分别是MSP和PSP。复位的时候默认是MSP,而当前是哪种可以通过CONTROL.SPSEL寄存器的bit来查看。 SP寄存器的最低2bit,S…

实验01-STP+链路聚合+VRRP实验

1.实验拓扑 2 实验需求 根据拓扑图配置IP地址。交换机之间通过STP防环为了防止SW2-SW3之间聚合的高效链路被STP 阻塞,请配置SW2 为网络中的主根,SW3为网络中的备份根桥。通过VRRP实现网关冗余,网关在SW2和SW3上,其中VLAN10的网关…

【go从入门到精通】go基本类型和运算符用法

大家好,这是我给大家准备的新的一期专栏,专门讲golang,从入门到精通各种框架和中间件,工具类库,希望对go有兴趣的同学可以订阅此专栏。 --------------------------------------------------------------------------…

Full-RNS CKKS

参考文献: [HS13] Halevi S, Shoup V. Design and implementation of a homomorphic-encryption library[J]. IBM Research (Manuscript), 2013, 6(12-15): 8-36.[BEHZ16] Bajard J C, Eynard J, Hasan M A, et al. A full RNS variant of FV like somewhat homomo…

【Java EE初阶二十九】Linux 系统的学习

当前写的博客系统程序,只是部署在咱们自己的电脑上,其他用户是无法直接访问的.由于 NAT 机制的存在,导致了IP 地址就被分成了 内网 IP 和 外网 IP. 云服务器,包括公司中使用专用服务器,一般都是 Linux 系统,这个系统的使用和 Windows 差异很大.(通过命令行来操作的系…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中,零部件的生产是整个制造流程的关键一环。这些零部件,包括但不限于制动系统、转向系统和传动系统,是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求,制造商们纷纷投入到高度…

b站小土堆pytorch学习记录—— P17 土堆说卷积操作

文章目录 一、前置知识什么是卷积操作 二、代码 一、前置知识 什么是卷积操作 推荐几个高赞博客: 卷积最容易理解的解释 卷积神经网络(CNN)详细介绍及其原理详解 还有pytorch官网的动态图: pytorch卷积 二、代码 import t…

第五套CCF信息学奥赛c++练习题 CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(阅读程序题)

第五套中小学信息学奥赛CSP-J考前冲刺题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40分) 第一题 递归函数 1 #include<iostream> 2 usin…

02. Nginx入门-Nginx安装

Nginx安装 yum安装 编辑yum环境 cat > /etc/yum.repos.d/nginx.repo << EOF [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_…

【LeetCode每日一题】【BFS模版与例题】【二维数组】130被围绕的区域 994 腐烂的橘子

前几天写过一篇BFS比较基础版的遍历 【LeetCode每日一题】【BFS模版与例题】863.二叉树中所有距离为 K 的结点 &#xff0c;可以先看一下再看本文 用 BFS 算法遍历二维数组 遍历二维矩阵&#xff1a;二维矩阵中的一个位置看做一个节点&#xff0c;这个节点的上下左右四个位置…

gRPC入门

文章目录 1. 简介2. 安装gRPC2.1. 下载protobuf2.2. 安装grpc核心库2.3. 安装protoc的Go插件2.4. 检查 3. 入门示例4. proto文件介绍5. 服务端代码编写6. 客户端代码编写7. 认证以及安全传输 1. 简介 在 gRPC 中&#xff0c;客户端应用程序可以像本地对象一样直接调用不同机器…

Flutter中的Provider状态管理工具有哪些优势

在Flutter应用开发中&#xff0c;状态管理是一个至关重要的方面。而Provider作为一种简单、灵活且高效的状态管理工具&#xff0c;在众多Flutter开发者中备受青睐。本文将深入探讨Provider在Flutter中的优势&#xff0c;帮助读者更好地理解其价值和应用场景。 简单易用 Provi…

《数字图像处理(MATLAB版)》相关算法代码及其分析(3)

目录 1 对边界进行子采样 1.1 输入参数检查 1.2 处理重复坐标 1.3 计算边界最大范围 1.4 确定网格线数量 1.5 构建网格位置向量 1.6 计算曼哈顿距离 1.7 整理输出结果 1.8 返回结果 2 改变图像的存储类别 2.1 函数输入 2.2 数据类型转换 2.3 错误处理 2.4 返回结…

Flutter整体框架

Flutter整体框架由三部分组成&#xff1a;Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架&#xff0c;由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码&#xff0c;以及更基础的异步、文件、…