mtk isp60 codebase里面driver打印log的方式

在mt6873 的demo phone 后置sensor imx586 里面

http://opengrok.668168.xyz:733/xref/full_k6873v1_64_pre/kernel-4.14/drivers/misc/mediatek/imgsensor/src/common/v1_1/imx586_mipi_raw/imx586mipiraw_Sensor.c

有这样的定义

33  #define PFX "IMX586_camera_sensor"
34  #define pr_fmt(fmt) PFX "[%s] " fmt, __func__

没看懂和后面pr_debug 有没有关系。

521  	pr_debug("dummyline = %d, dummypixels = %d\n",

但搜codebase里面的pr_debug定义,有两处疑似,如下。

第一个地方:

> 这里是不是语法错误啊。

> 语法没错,从line 397 开始定义的

396  /* If you are writing a driver, please use dev_dbg instead */
397  #if defined(CONFIG_DYNAMIC_DEBUG)
398  #include <linux/dynamic_debug.h>
399  
400  /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
401  #define pr_debug(fmt, ...) \
402  	dynamic_pr_debug(KLOG_MODNAME fmt, ##__VA_ARGS__)
403  #elif defined(DEBUG)
404  #define pr_debug(fmt, ...) \
405  	printk(KERN_DEBUG KLOG_MODNAME pr_fmt(fmt), ##__VA_ARGS__)
406  #else
407  #define pr_debug(fmt, ...) \
408  	no_printk(KERN_DEBUG KLOG_MODNAME pr_fmt(fmt), ##__VA_ARGS__)
409  #endif

这里面也有 pr_warning    pr_contpr_level 的定义,但要根据line334 的三个宏判断确定走哪个。

 
332  /* -------printk too much patch------ */
333  #if defined CONFIG_MTK_ENG_BUILD \
334  	&& defined CONFIG_PRINTK_MT_PREFIX \
335  	&& defined CONFIG_DYNAMIC_DEBUG
336  #define pr_emerg(fmt, ...) \
337  	dynamic_pr_emerg(fmt, ##__VA_ARGS__) \
338  
339  #define pr_alert(fmt, ...) \
340  	dynamic_pr_alert(fmt, ##__VA_ARGS__) \
341  
342  #define pr_crit(fmt, ...) \
343  	dynamic_pr_crit(fmt, ##__VA_ARGS__) \
344  
345  #define pr_err(fmt, ...) \
346  	dynamic_pr_err(fmt, ##__VA_ARGS__) \
347  
348  #define pr_warning(fmt, ...) \
349  	dynamic_pr_warn(fmt, ##__VA_ARGS__) \
350  
351  #define pr_warn(fmt, ...) \
352  	dynamic_pr_warn(fmt, ##__VA_ARGS__) \
353  
354  #define pr_notice(fmt, ...) \
355  	dynamic_pr_notice(fmt, ##__VA_ARGS__) \
356  
357  #define pr_info(fmt, ...) \
358  	dynamic_pr_info(fmt, ##__VA_ARGS__) \
359  
360  #else
361  #define pr_emerg(fmt, ...) \
362  			printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
363  #define pr_alert(fmt, ...) \
364  			printk(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
365  #define pr_crit(fmt, ...) \
366  			printk(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
367  #define pr_err(fmt, ...) \
368  			printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
369  #define pr_warning(fmt, ...) \
370  			printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
371  #define pr_warn pr_warning
372  #define pr_notice(fmt, ...) \
373  			printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
374  #define pr_info(fmt, ...) \
375  			printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
376  #endif
377  
378  /*
379   * Like KERN_CONT, pr_cont() should only be used when continuing
380   * a line with no newline ('\n') enclosed. Otherwise it defaults
381   * back to KERN_DEFAULT.
382   */
383  #define pr_cont(fmt, ...) \
384  	printk(KERN_CONT fmt, ##__VA_ARGS__)
385  
386  /* pr_devel() should produce zero code unless DEBUG is defined */
387  #ifdef DEBUG
388  #define pr_devel(fmt, ...) \
389  	printk(KERN_DEBUG KLOG_MODNAME pr_fmt(fmt), ##__VA_ARGS__)
390  #else
391  #define pr_devel(fmt, ...) \
392  	no_printk(KERN_DEBUG KLOG_MODNAME pr_fmt(fmt), ##__VA_ARGS__)
393  #endif

http://opengrok.668168.xyz:733/xref/full_k6873v1_64_pre/kernel-4.14/include/linux/printk.h#401

不管有没有定义那三个micro,直接用 pr_warning    应该就可以了

第二个地方:

> 若第一个地方语法错误,排除以后,那就这里了。

也就可以直接debug时或我自己的驱动模板里面用  pr_warning    暴力解决。

5  #include "debug.h"
6  
7  #define __pr(func, fmt, ...)	\
8  do {				\
9  	if ((func))		\
10  		(func)("libapi: " fmt, ##__VA_ARGS__); \
11  } while (0)
12  
13  extern libapi_print_fn_t __pr_warning;
14  extern libapi_print_fn_t __pr_info;
15  extern libapi_print_fn_t __pr_debug;
16  
17  #define pr_warning(fmt, ...)	__pr(__pr_warning, fmt, ##__VA_ARGS__)
18  #define pr_info(fmt, ...)	__pr(__pr_info, fmt, ##__VA_ARGS__)
19  #define pr_debug(fmt, ...)	__pr(__pr_debug, fmt, ##__VA_ARGS__)

http://opengrok.668168.xyz:733/xref/full_k6873v1_64_pre/kernel-4.14/tools/lib/api/debug-internal.h#19

linux 文件头的定义应该是这个路径

http://opengrok.668168.xyz:733/xref/full_k6873v1_64_pre/kernel-4.14/include/linux/printk.h#320

后面可以用demophone 试试是哪个。

> 我怀疑是第一个地方

为什么要追这个东西,

> 因为客户那边好多没办法build eng版本,直接是debug 版本,kernel log 打印不完整。

© 版权声明
THE END
在时间中留下我的脚印
分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情图片