在mt6873 的demo phone 后置sensor imx586 里面
有这样的定义
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_cont
pr_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__)
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
暂无评论内容