当前位置: 首页 > news >正文

浙江省城乡住房建设部网站西安网站seo厂家

浙江省城乡住房建设部网站,西安网站seo厂家,wordpress增加动效,好看的商城网站设计一、背景 Linux 内核中提供了内核日志打印的工具printk。它的使用方式C语言中的printf是类似的。接下来我们介绍一下printk的使用方式。本文以打印Binder中的日志为例,进行演示。 printk的方法声明和日志级别binder驱动中增加 打印代码android系统中查看日志信息 …

一、背景

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 参数的位置, 对应占位的值

具体的消息级别有如下集中:
image.png

如果缺省消息界别, 那就是 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

image.png

上述四个值的含义是:

  1. 当前可以消息级别
  2. 默认的消息级别
  3. 最小消息级别
  4. 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联用,或者使用更分明的日志级别。

五、写在最后

所遇问题记录:

  1. 在进行 ./build/build.sh 编译时,报错需要执行’make proper’ , 这个命令的执行要到源码的根目录下去执行。
http://www.tj-hxxt.cn/news/4210.html

相关文章:

  • 如何给网站做seosem什么意思
  • 百度网站链接提交入口店铺数据分析主要分析什么
  • 多伦多网站建设多少钱广告资源网
  • aspcms网站栏目调用百度推广广告公司
  • 手机网站建设 苏州网络营销的营销方式是什么
  • 网站搭建排名优化电商网站平台
  • 建设工程168类似的网站百度推广收费标准
  • 海尔网站的建设目标个人推广平台
  • 在58同城做网站怎么样广州网站关键词排名
  • dede网站地图模板下载线上推广的方式有哪些
  • 网站图片的像素外贸建站平台
  • 真甲先生网站建设seoul是啥意思
  • 界面设计的重要性二十条疫情优化措施
  • 网站备案有电话来视频广告联盟平台
  • 农产品网站建设计划书网址如何被快速收录
  • 帮客户做网站挣钱吗四川聚顺成网络科技有限公司
  • 在东莞做网站北京seo排名方法
  • 网站开发多语言老铁外链工具
  • 在线客服服务百度快照优化排名推广怎么做
  • 介绍做ppt高大上图表的网站全自动引流推广软件app
  • 集约化政府门户网站建设的优点网站seo什么意思
  • 淄博网站优化市场调研与分析
  • 来个网站奖励自己广州百度推广代理公司
  • 设计什么网站简单江西省水文监测中心
  • 物流网站建设方案总结揭阳市seo上词外包
  • 内销网站要怎么做优化网站推广排名
  • 男人女人做羞羞事网站杭州seo网站建设靠谱
  • 无锡网站建设优化建站天津百度seo代理
  • 手机上网自动跳转网站免费的关键词优化工具
  • 淄博网站建设优化企业培训系统