log level

2023-11-06

一、LK层:

首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:

vendor\mediatek\proprietary\bootable\bootloader\lk\include\debug.h(以mtk平台为例)

在include\debug.h重要代码为:

​
//下面做个判断:意思是如果makefile(相应的平台mk文件) 定义了DEBUG的值,就是用它,否则默认为2等级
//在bootloader\lk\project\rlk6737m_65_n.mk中:DEBUG := 2
#if defined(DEBUG)
#define DEBUGLEVEL DEBUG
#else
#define DEBUGLEVEL 2
#endif

/* debug levels 调试级别*/  

#define CRITICAL 0      //数字越小级别越高,打印的信息log越少
#define ALWAYS 0
#define INFO 1
#define SPEW 2

/* output */  输出方式介绍

void _dputc(char c); // XXX for now, platform implements  平台工具
int _dputs(const char *str);
int _dprintf(const char *fmt, ...) __PRINTFLIKE(1, 2);
int _dvprintf(const char *fmt, va_list ap);

//下面的这些打印方法具体含义是:如果级别<=之前定义的调试级别的话就打印否则不打印

#define dputc(level, str) do { if ((level) <= DEBUGLEVEL) { _dputc(str); } } while (0)  
#define dputs(level, str) do { if ((level) <= DEBUGLEVEL) { _dputs(str); } } while (0)
#define dprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dprintf(x); } } while (0)
#define dvprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dvprintf(x); } } while (0)

二、kernel层:

在kernel-3.18\include\linux\kern_levels.h中定义了打印级别:

(以前定义在kernel-3.18\include\linux\kernel.h)

#define KERN_SOH    "\001"        /* ASCII Start Of Header */
#define KERN_SOH_ASCII    '\001'

#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 默认的内核loglevel----一般都为4*/

在kernel-3.18\include\linux\printk.h中定义了各默认日志的级别

/* printk's without a loglevel use this.. 没有日志级别的printk使用*/
#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT

/* We show everything that is MORE important than this..我们展示了所有比这更重要的东西 */
#define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
#define CONSOLE_LOGLEVEL_MIN     1 /* Minimum loglevel we let people use最低的控制台日志级别*/
#define CONSOLE_LOGLEVEL_QUIET     4 /* Shhh ..., when booted with "quiet"默认的消息日志级别*/
#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG 默认的控制台日志级别*/

#define CONSOLE_LOGLEVEL_DEBUG    10 /* issue debug messages */
#define CONSOLE_LOGLEVEL_MOTORMOUTH 15    /* You can't shut this one up */

extern int console_printk[];

#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])

在这里注意一下:有些人在写printk()时,并不加log级别,这是如果我们定义的log级别小于4,则它是打印不出来的,因为不写log级别的打印内核默认为4打印级别。

在kernel-3.18\kernel\printk\printk.c中:

int console_printk[4] = {
    CONSOLE_LOGLEVEL_DEFAULT,    /* console_loglevel控制log级别 */
    MESSAGE_LOGLEVEL_DEFAULT,    /* default_message_loglevel默认的消息日志级别 */
    CONSOLE_LOGLEVEL_MIN,        /* minimum_console_loglevel最低的控制台日志级别*/
    CONSOLE_LOGLEVEL_DEFAULT,    /* default_console_loglevel默认的控制台日志级别 */
};


转自:android 设置打印级别_jlgcumt的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

log level 的相关文章

  • 【计算机开题报告】 网上茶叶销售平台设计与开发

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 1 研究背景 随着社会经济的迅速发展和科学技术的全面进步 以计算机与网络技术为基础的信息系统正处于蓬勃发展的时期 随着经济文化水平的提高 近年来 随着科学
  • 网络基础面试题(二)

    11 什么是网桥 防火墙的端口防护是指什么 网桥是一种网络设备 用于连接两个或多个局域网 LAN 并转发数据包 它能够根据MAC地址来识别和转发数据 提高网络的传输效率和安全性 防火墙的端口防护是指对防火墙上的各个端口进行保护和限制 只允许
  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 通过多点连接发送和接收邀请

    我知道这个问题之前已经被问过 但我只是想知道为什么它在我的特定情况下不起作用 我正在尝试从一个视图控制器的多点连接发送邀请 并在另一个视图控制器上接收它 我的发送代码是 self invitePeer selectedPeerID toSe
  • “dat”协议能否有效支持视频直播?

    我希望能够通过以下方式实时流式传输视频 或任何其他大型且不断修改 附加的文件 dat Here https github com beakerbrowser webdb performance它说 dat 协议不支持文件级别的部分更新 这意
  • WCF 是否支持点对点实现?

    我正在尝试在 LAN 内实现点对点消息传递和文件共享实用程序 那么 WCF 支持 p2p 吗 有人尝试过通过 WCF 进行文件共享吗 是的 它确实 请参见如何在对等网络中设计状态共享 http msdn microsoft com en u
  • 为什么我在使用 WifiP2pManager 时总是显示 BUSY?

    我正在尝试使用 Wi Fi Direct 连接两个 Android 设备 在我的 HTC 手机 One SV 上它似乎可以工作 但在我的第二台设备 LG Optimus 4xhd 上它不起作用 在我的 onResume 函数中 我启动以下线
  • 同步通过 LAN 电缆连接的两台 Windows 7 计算机之间的时间

    我有许多笔记本电脑 它们运行我们的应用程序 同时通过以太网电缆成对连接 但未连接到任何外部网络或互联网 时间 我需要连接对来同步其系统时间 但由于每台计算机都需要能够与任何其他计算机同步 因此我无法将一台计算机定义为时间服务器 而另一台计算

随机推荐

  • 分布式锁实战

    示例代码 maven引入 maven引入
  • 与困难的利益相关者和团队成员打交道

    经历分歧和冲突是我们作为产品经理和产品所有者的工作的一部分 我们与来自不同部门的广泛人员合作 这是很自然的 我们并不总是同意 有时会发生冲突 但是建设性地解决冲突可能具有挑战性 本文分享了我与困难者打交道并成功解决冲突的建议 这是一个共同的
  • 【性能】JDK和Jmeter的安装与配置

    目录 一 JDK环境配置 1 下载JDK 2 配置JDK环境 二 Jmeter环境配置 1 下载Jmeter 2 配置Jmeter环境 更多干货 完整版文档下载方式 一 JDK环境配置 1 下载JDK 官网下载地址 http www ora
  • C++中print和printf的区别

    print与printf的区别 1 print 中不能使用 s d 或 c 2 print 自动换行 printf 没有自动换行 转载于 https www cnblogs com yun an p 11070228 html
  • MySQL 按照条件统计多张表记录数总数

    一 诉求 数据库中有 4 张订单表 分别为 tbl test order01 tbl test order02 tbl test order03 tbl test order04 分别用于存储四个季度的订单表数据 各表的表结构均相同 以 t
  • Office 2021 简体中文离线安装包下载地址

    Office 2021 简体中文离线安装包下载地址 一 专业增强版 强烈推荐 http officecdn microsoft com pr 492350f6 3a01 4f97 b9c0 c7c6ddf67d60 media zh cn
  • web前端技术笔记()js对象方法讲解

    不带参函数的调用
  • python sqlalchemy 动态创建表,,或动态修改__tablename__的两种方法

    最近在学习sqlalchemy 有个动态修改 tablename 的需求 搜索了好几天 没有太完美的答案 要么看不懂 要么比较古老了 通过研究 整理以下几种sqlalchemy动态修改 tablename 的方法 一 函数封装table m
  • springboot+vue+elementui+阿里云oss上传文件

    才做完课程设计没多久 本来打算早点写这一篇文章 但是由于太懒了 就拖延了好几天 今天没什么事情 就打算写下一篇关于文件上传我文章 希望可以帮助到大家 需要准备 配置好maven 购买阿里云oss 第一步 导入指定的依赖
  • 浅谈测试用例设计

    一 测试用例为什么存在 1 1 定义 测试用例 Test Case 是指对特定的软件产品进行测试任务的描述 体现测试方案 方法 技术和策略 测试用例内容包括测试目标 测试环境 输入数据 测试步骤 预期结果 测试脚本等 最终形成文档类的输出
  • 华为交换机SSH和telnet登录配置

    华为交换机SSH和telnet登录配置 一 网络拓扑 二 SW2配置telnet 1 SW2配置 2 R1登录验证 三 SW2的ssh登录配置 1 生成本地密钥对 2 SW2配置命令 3 R1登录 四 配置console口密码 1 配置命令
  • 红黑树

    写在前面 当在10亿数据进行不到30次比较就能查找到目标时 不禁感叹编程之魅力 人类之伟大呀 学红黑树有感 终于 在学习了几天的红黑树相关的知识后 我想把我所学所想和所感分享给大家 红黑树是一种比较难的数据结构 要完全搞懂非常耗时耗力 红黑
  • 约束布局的使用(二)

    主要介绍app layout constraintWidth max app layout constrainedWidth app layout constraintDimensionRatio和Guideline的使用 一 app la
  • 无锁队列-使用hazard指针解决ABA问题

    无锁队列 使用hazard指针解决ABA问题 分类 网络安全 工具使用 文章 实现一个无锁队列 原子操作使用了tbb atomic ABA问题使用hazard指针解决 无锁队列实现 查看文本 打印 msque hpp Created on
  • Leetcode76 最小覆盖子串题解

    题目网址 https leetcode cn com problems minimum window substring 题目分析 这道题目 明显之处在于 我们需要在字符串 s 中框出一个窗口 来判断这个窗口中的子串是否覆盖了 t 如下图所
  • 2021-02-08

    学习目标 窗口函数等 天池龙珠计划SQL训练营 学习内容 5 1窗口函数 5 1 1窗口函数概念及基本的使用方法 5 2窗口函数种类 5 2 1专用窗口函数 5 2 2聚合函数在窗口函数上的使用 5 3窗口函数的的应用 计算移动平均 5 3
  • 工作失误点反思

    工作前考虑 1 查明工作服务对象 依赖对象 这个工作依赖于什么 为了什么 前置条件是否允许 2 是否有人做过 是否要重用 重用要考虑两者关系 工作时考虑 1 效率最高位 易读度第二位 编写复杂度最后位 2 头文件 格式 注释
  • 黄哥通过代码来说明:python语法糖

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 下面用一个例子来说明 coding utf 8 foo decorator foo 语句的作用是将foo函数作为参数传递到decorator 返回值赋值给foo 那么foo
  • Linux基础命令

    Linux基础命令 ls 列出 英文全称 list 格式 ls options 选项 arges 参数 root localhost ls l 总用量 4 rw 1 root root 1297 3月 18 02 38 anaconda k
  • log level

    一 LK层 首先 在LK中 有一个对log打印级别的控制文档 其路径一般为 vendor mediatek proprietary bootable bootloader lk include debug h 以mtk平台为例 在inclu