Printk打印内核日志
一、背景
Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例,进行演示。
- printk的方法声明和日志级别
- binder驱动中增加 打印代码
- android系统中查看日志信息
二、printk方法声明
printk 官方链接
2.1 方法声明
printk(KERN_INFO "Message: %s\n", arg);
- KERN_INFO 的位置代表的是 要打印的消息级别
- printk 的第一个参数
KERN_INFO "Message: %s\n"整体是一个,格式化字符串 - arg 参数的位置, 对应占位的值
具体的消息级别有如下集中:

如果缺省消息界别, 那就是
KERN_DEFAULT. 具体定义见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 */#define KERN_DEFAULT KERN_SOH "d" /* the default kernel loglevel */
2.2 配置可打印消息级别
printk函数所打印的消息,可以通过cat /dev/kmsg 命令试试查看 或者通过 dmesg 命令查看历史消息。 但是要注意的是 ”并不是所有的级别的消息“ 都会进行输出。这是因为它有一个控制开关:/proc/sys/kernel/printk

上述四个值的含义是:
- 当前可以消息级别
- 默认的消息级别
- 最小消息级别
- Boot启动时默认消息级别
因此,我们可以通过控制该文件的值,来管控消息
echo 0 > /proc/sys/kernel/printk打开消息打印echo 0 1 4 7 > /proc/sys/kernel/printk来关消息打印
三、binder驱动中增加 打印代码
我们打印一下Android系统binder驱动的读写日志:
static int binder_thread_write(struct binder_proc *proc,
struct binder_thread *thread,
binder_uintptr_t binder_buffer, size_t size,
binder_size_t *consumed)
{while (ptr < end && thread->return_error.cmd == BR_OK) {int ret;if (get_user(cmd, (uint32_t __user *)ptr))return -EFAULT;ptr += sizeof(uint32_t);trace_binder_command(cmd);if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) {atomic_inc(&binder_stats.bc[_IOC_NR(cmd)]);atomic_inc(&proc->stats.bc[_IOC_NR(cmd)]);atomic_inc(&thread->stats.bc[_IOC_NR(cmd)]);}/*print info : proc.name , proc.id , proc.thread_id, cmd name*/printk("%s (%d, %d), %s %s \n" , proc->tsk->comm, proc->pid , thread->pid,__FUNCTION__ , binder_cmd_name(cmd) );switch(cmd){....}...
}
读取binder数据时,进行消息打印:
打印消息的时机是针对每一个put_user进行消息打印。
static int binder_thread_read(struct binder_proc *proc,struct binder_thread *thread,binder_uintptr_t binder_buffer, size_t size,binder_size_t *consumed, int non_block)
{void __user *buffer = (void __user *)(uintptr_t)binder_buffer;void __user *ptr = buffer + *consumed;void __user *end = buffer + size;int ret = 0;int wait_for_proc_work;if (*consumed == 0) {printk("%s (%d, %d), %s %s \n" , proc->tsk->comm, proc->pid , thread->pid,__FUNCTION__ , binder_cmd_name(BR_NOOP) );if (put_user(BR_NOOP, (uint32_t __user *)ptr))return -EFAULT;ptr += sizeof(uint32_t);}
四、Android系统查看消息
4.1 编译内核
./build/build.sh
将输出的Image.lz4-dtb文件,进行烧录
adb reboot bootloader fastboot boot Image.lz4-dtb //刷入新的镜像文件
4.2 查看消息
4.2.1 查看历史消息
# dmesg
[ 315.979119] surfaceflinger (502, 1326), binder_thread_write BC_FREE_BUFFER
[ 315.979142] surfaceflinger (502, 1326), binder_thread_read BR_NOOP
[ 315.995940] ndroid.systemui (1463, 1463), binder_thread_write BC_TRANSACTION
[ 315.996057] ndroid.systemui (1463, 1463), binder_thread_read BR_NOOP
[ 315.996070] ndroid.systemui (1463, 1463), binder_thread_read BR_TRANSACTION_COMPLETE
[ 315.996569] surfaceflinger (502, 1326), binder_thread_write BC_FREE_BUFFER
[ 315.996599] surfaceflinger (502, 1326), binder_thread_read BR_NOOP
4.2.2 实时查看消息
# cat /dev/kmsg
由于系统在运行时 一定会有binder ipc , 因此消息比较多,建议个 grep联用,或者使用更分明的日志级别。
五、写在最后
所遇问题记录:
- 在进行 ./build/build.sh 编译时,报错需要执行’make proper’ , 这个命令的执行要到源码的根目录下去执行。
相关文章:
Printk打印内核日志
一、背景 Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例,进行演示。 printk的方法声明和日志级别binder驱动中增加 打印代码android系统中查看日志信息 …...
界面控件DevExpress WPF 202计划发布的新功能合集
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。本文将介绍今年DevExpr…...
Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心
目录专栏导读一、什么是Nacos?二、注册中心演变及其设计思想1、RestTemplate调用远程服务2、通过Nginx维护服务列表(upStream)3、通过Nacos实现注册中心4、心跳版Nacos三、Nacos Discovery四、Nacos核心功能1、服务注册2、服务心跳3、服务同步…...
Navicat 图形化界面工具
Navicat 介绍 Navicat是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、SQL Server等不同类型的数据库 目录 Navicat 介绍 Navicat 下载 Navicat 安装 Navicat 使用 Navicat连接MySQL数据库 Navicat创建数据库和表 Navicat 下载 1、点击这…...
2023年网络安全比赛--attack(新)数据包分析中职组(超详细)
一、竞赛时间 180分钟 共计3小时 任务环境说明: 1 分析attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户第一次访问HTTP服务的数据包是第几号,将该号数作为Flag值提交; 2.继续查看数据包文件attack.pcapng,分析出恶意用户扫描了哪些端口,将全部的端口号…...
C语言之extern(七十)
extern同一个文件:修饰变量声明#include <stdio.h>int add(){extern int x,y;return x y; }int main(){printf("%d\n", add()); }int x 10; int y 20;extern文件之间:修饰函数声明<1>.add.cint sum(){extern int x ;extern in…...
树的前中后序的Morris遍历
目录 一.Morris遍历 1.什么是Morris遍历 2.基本思想 3.Morris遍历的优点和缺点 4.知识回顾----二叉树的线索化 二.中序Morris遍历 1.中序Morris遍历的分析 2.中序Morris遍历的思路 3.具体的代码实现 三.前序Morris遍历 1.前序Morris遍历的思路 2.具体的代码实现 四…...
到底什么是线程?线程与进程有哪些区别?
上一篇文章我们讲述了什么是进程,进程的基本调度 http://t.csdn.cn/ybiwThttp://t.csdn.cn/ybiwT 那么本篇文章我们将了解一下什么是线程?线程与进程有哪些区别?线程应该怎么去编程? 目录 http://t.csdn.cn/ybiwThttp://t.csdn…...
你真的知道如何系统高效地学习数据结构与算法吗?
文章目录前言:什么是数据结构?什么是算法?学习这个算法需要什么基础?学习的重点在什么地方?一些可以让你事半功倍的学习技巧1.边学边练,适度刷题2.多问、多思考、多互动3.打怪升级学习法4.知识需要沉淀&…...
Linux操作系统基础的常用命令
1,Linux简介Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。1.1Linux介绍Linux出现于1991年,…...
Jasypt加密库基本使用方法
目录 1 Jasypt简介... 2 基础知识回顾... 3 Jasypt基本加密器... 4 JasyptPBE加密器... 5 Jasypt池化加密器... 6 Jasypt客户端工具... 7 JasyptSpringboot基本用法... 8 JasyptSpringboot自定义加密器... 9 JasyptSprin…...
C++并发编程之五 高级线程管理
文章目录5.1.1 线程池5.1.1 线程池 在前面我们引入了线程的通信和同步手段,那么为什么还要引入线程池呢? 线程池是一种管理多个线程的技术,它可以减少线程的创建和销毁的开销,提高并发性能。线程池中有一定数量的空闲线程&#x…...
单片机——IIC协议与24C02
1、基础知识 1.1、IIC串行总线的组成及工作原理 I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 1.2、I2C总线的数据传输 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟…...
案例05-将不必要的逻辑放到前端(发送调查问卷)
目录一:背景介绍背景二:思路&方案重大问题:解决办法优点:三:总结一:背景介绍 本篇博客书写的意义是警示大家不必把不必要的逻辑放到前端。 明确前后端分离的意义。 背景 下面的主要逻辑是࿱…...
【每日一题】——矩阵相等判定
🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟢 读书笔记 🟡 C语言跬步积累 🌈座右铭:广积粮,缓称…...
Linux防火墙的关闭
查看防火墙的状态打开终端输入如下命令systemctl status firewalld如图所示:running表示防火墙目前处于打开状态输入命令进行关闭防火墙:systemctl stop firewalld如图所示正常的用户是没有权限的,需要输入管理员的密码才能够进行关闭防火墙。…...
Request和Response的概述
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章⭐作者主页:︶ㄣ释然⭐如果觉得文章写的不错,欢迎点个关注😉有写的不好的地方也欢迎指正,一同进步😁Request和Respo…...
常见的Web安全漏洞:SYN攻击/CSRF/XSS
一、SYN攻击(属于DOS攻击) 什么情况下被动方出现SYN_RCVD状态?(flood攻击服务) 客户伪造 ip 端口, 向服务端发送SYN请求。完成2次握手,第三次服务端 等待客户端ACK确认,但由于客户不存在服务端一直未收到确认&#…...
【STC15单片机】 超声波模块的使用
目录 1 基于STC15F2K60S2的超声波测距代码 1.1 基本注意事项 1.1.1 跳线帽接法 1.1.2 晶振设置 1.2 板载超声波工作原理 1.2.1 原理总结 1.2.2 超声波代码思路 1.3 STC15单片机代码部分 1.3.1 定时器0&定时器1初始化 1.3.2 超声波ultrasonic.c ultrasonic.h文件配…...
SpringBoot 动态操作定时任务(启动、停止、修改执行周期)增强版
前段时间编写了一篇博客SpringBoot 动态操作定时任务(启动、停止、修改执行周期,该篇博客还是帮助了很多同学。 但是该篇博客中的方法有些不足的地方: 只能通过前端控制器controller手动注册任务。【具体的应该是我们提前配置好我们的任务&am…...
10BASE-T1S PLCA参数配置避坑指南:从Node ID重复到Burst Timer设置,这些坑你踩过几个?
10BASE-T1S PLCA参数配置避坑指南:从Node ID重复到Burst Timer设置,这些坑你踩过几个? 在车载以太网的实际部署中,10BASE-T1S因其单对线缆实现多节点通信的特性,正逐渐成为智能座舱和传感器网络的热门选择。但当我们真…...
CentOS 7.9 上TDengine 3.0.4.2 二进制安装避坑指南:从下载到压测一条龙
CentOS 7.9 上TDengine 3.0.4.2 二进制安装实战:从零部署到百万级压测全解析 时序数据库正在成为物联网、工业互联网和金融监控等场景的核心基础设施。作为国产时序数据库的佼佼者,TDengine以其卓越的写入性能和压缩比,正在全球范围内获得越…...
MedGemma-X实战体验:像医生一样提问,AI智能回答
MedGemma-X实战体验:像医生一样提问,AI智能回答 1. 引言:当AI学会“看”和“说” 想象一下,你是一位放射科医生,面对一张复杂的胸部X光片,心中闪过几个疑问:“右肺中叶的阴影是炎症还是陈旧性…...
vue-sonner:轻量级Vue通知组件的高效集成方案
vue-sonner:轻量级Vue通知组件的高效集成方案 【免费下载链接】vue-sonner 🔔 An opinionated toast component for Vue. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-sonner 项目概述 vue-sonner是一个为Vue和Nuxt应用设计的轻量级通知组…...
KV260实战:从PYNQ安装到跑通第一个AI例程,手把手带你玩转边缘AI开发板
KV260边缘AI开发实战:从PYNQ部署到图像分类全流程指南 当你第一次拿到KV260开发板时,可能会被它小巧的外表所迷惑——这块巴掌大的开发板实际上搭载了赛灵思的Kria K26 SOM系统模块,内含可编程逻辑和四核ARM Cortex-A53处理器,专为…...
终极指南:如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术
终极指南:如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 在AI图像生成领域,ComfyUI IPAdapter Plus插件正在成为图像风格迁…...
Onekey核心价值解析:5个维度带你重新认识Steam游戏清单获取
Onekey核心价值解析:5个维度带你重新认识Steam游戏清单获取 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款开源的Steam Depot清单下载器,通过智能化的数据获…...
3步打造静音ThinkPad:双风扇控制技术指南
3步打造静音ThinkPad:双风扇控制技术指南 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 一、技术原理与核心优势 1.1 笔记本散热系统的工作瓶颈 大多数笔…...
【一键养龙虾】阿里云OpenClaw快速部署方案,两步拥有专属龙虾AI助理!
还在羡慕别人拥有能“动手干活”的AI数字员工吗?还在为复杂的本地环境配置、端口映射和依赖冲突而头疼吗?别急,阿里云推出了OpenClaw快速部署方案,官方镜像一键部署,只需两步,轻松拥有专属“龙虾AI”助理&a…...
CYBER-VISION零号协议SolidWorks设计文档智能解读与生成
CYBER-VISION零号协议:让AI读懂你的SolidWorks设计图 每次打开一个复杂的SolidWorks装配体文件,面对几十上百个零件,你是不是也头疼过整理物料清单、编写设计说明?或者,当同事发来一份设计文档,你需要花半…...
