🗒️MTK平台动态调整wlan driver log等级
2023-8-23
| 2023-8-24
字数 1327阅读时长 4 分钟
type
status
date
slug
summary
tags
category
icon
password
URL

一、问题背景

写这篇文章的主要原因是由于在MTK一个GKI2.0项目中,user版本发现了wlan log吐不出来。尽管已经在debuglogUI→Log Level→wifi driver log level 调整为extreme都无法生效。
所以追踪了一下代码,以期待解决此问题并从原理角度进行分析。

二、问题分析

通过抓取userdebug log,我们可以得到动态调整dbglevel的相关log
从log我们可以看到动态调整dbglevel的原理是通过向/proc/net/wlan/dbgLevel 写值完成的。
下面进行到代码追踪,来看看这个节点是如何被创建出来的,以及write的动作进行了哪些操作?

2.1 dbgLevel的创建

代码位于:vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/os/linux/gl_proc.c
从这边可以看到wlan在初始化时会根据BUILD_QA_DBG使用proc_creat创建dbgLevel节点,同时file_operations为dbglevel_ops
关于BUILD_QA_DBG的定义下面会说明,暂时先忽略。

2.2 dbgLevel write函数

当write时,将会调用procDbgLevelWrite

2.3 wlanSetDriverDbgLevel的原理

2.4 aucDebugModule与log打印的关系

代码位于:vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/include/debug.h
这里定义的DBGLOG的宏函数,通过解析aucDebugModule[DBG_##_Mod##_IDX]来传参,最后将解析出的参数通过LOG_FUNC来打印。LOG_FUNC其实就是kalPrint,其实就是pr_info
而这个DBG_##_Mod##_IDX,就是数组元素名,是一种enum类型,其定义在vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/include/debug.h
notion image
解析出,Mod就是第二个字串
 

2.5 BUILD_QA_DBG设置

在一开始时提到的BUILD_QA_DBG,现在来解释一下。

三、实验验证

首先,先读取当前手机WLAN驱动各模块的log等级。
可以看到当前所有模块log等级都为0x7F
使用指令1:
得到结果
notion image
使用指令2:
notion image
 
  • wifi
  • dbglevel
  • mtk
  • connectivity
  • Linux物理内存管理三大结构体之struct zone内存分配函数的区别
    Loading...