嵌入式驱动学习第二周——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命令

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.1_2 性能指标——速率、带宽、吞吐量

文章目录 1.1_2 性能指标——速率、带宽、吞吐量(一)速率(二)带宽(三)吞吐量 1.1_2 性能指标——速率、带宽、吞吐量 (一)速率 速率即数据率或称数据传输率或比特率。 速率就是“快…

python自动化管理和zabbix监控网络设备(zabbix部署监控网络设备以及验证部分)

目录 前言 一、Zabbix搭建 二、FW1 三、python脚本 四、core-sw1 五、core-sw2 六、DMZ-sw1 前言 详细配置视频解析访问:白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 一、Zabbix搭建 sed -i s/SELINUXenforcing/SELINUXdisable/ /etc/selinux/config…

如何在MinIO系统中进行配置并结合内网穿透实现公网远程连接上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…

后端传给前端的时间字段前端显示不正确

具体问题是什么呢,就比如我后段有一个字段是TimeStamp类型,从数据库中查出数据是下面的样式: 但是前端显示的是下面的格式: 这个的解决方法还是挺多的,那接下来具体来看看吧~ 第一种: 在application.prop…

动态规划:LeetCode第10题 正则表达式匹配

题目: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: …

Flutter的线程模型

在Flutter框架中,Embedder层负责把Flutter嵌入到各个平台上去,其所做的主要工作包括线程设置、渲染Surface设置,以及插件等。因此, Embedder负责线程的创建和管理,并且提供Task Runner给Engine使用。Engine则是负责提供…

retinaNet FocalLoss源码详解

targets[positive_indices, assigned_annotations[positive_indices, 4].long()] 1 ## 把正样本所对应的锚框所对应的类别的列置为1 # aim torch.randint(0, 1, (1, 80)) # tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 0…

实名制交友-智能匹配-仿二狗交友系统-TP6+uni-APP小程序H5公众号-源码交付-支持二开!

一、代码风格 通常不同的开发者具备不同的代码风格,但为了保证语音交友系统开发质量,在编码前需要进行代码风格的统一,通过制定一定的规则,约束开发者的行为。具有统一风格的代码才能更清晰、更完整、更容易理解、更方便后期维护…

Linux高级编程:进程间的通信(二)、IPC

回顾 共7种方式: 古老的进程间通信方式: 管道: 无名管道 有名管道 信号 系统V IPC进程对象 共享内存 消息队列 信号量集 socket通信 //网络 ------------------------- 无名管道 pipe() 特点: 用于…

卡密交易系统 卡密社区SUP系统源码 分销系统平台 分销商城系统开发

卡密社区SUP系统总控源码主站分销系统功能源码 跟以前的卡盟那种控制端差不多总控可以给别人开通,分销,主站,类似自己做系统商一样,自助发卡,卡密交易系统。 搭建环境Nginx1.22 mysql 5.7 php8.1 rids 7.2 安装方法…

C++ 红黑树

1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…