1、应用背景:
调试android recovery时,由于recovery默认的日志是存储到/cache相关文件夹下的文件中的,所以每次只能在升级完成后重启系统后才能看到相关的调试日志信息,这对调试带来很大的不变,如有的时候recovery操作失败导致系统无法启动时,无法看到相关的日志,因此这时候可以使用本文中提供的方法将相关日志从调试串口输出,直接用串口在升级过程中查看日志。
2、实现思路
实现思路比较简单,就是将原来打印日志的函数封装,然后需要时直接将日志从串口输出;
3、代码实现
(1)、日志输出
将写日志的函数直接放到一个独立的头文件中,这样需要用的文件直接包含这个头文件就行了。如下为本文中提供的头文件源码:
#ifndef _LANDSEM_RECOVERY_LOG_H
#define _LANDSEM_RECOVERY_LOG_H
#include
#include
#include
#include
#define USE_UART_DEBUG 0
#if USE_UART_DEBUG
#define DEBUG_UART_PORT "/dev/ttyS0"
#endif
static int landsem_dbg_log(const char *fmt, ...) {
int ret;
va_list ap;
va_start(ap, fmt);
#if USE_UART_DEBUG
FILE *tty_out = fopen(DEBUG_UART_PORT, "w+");
if(NULL != tty_out){
ret = vfprintf(tty_out, fmt, ap);
fclose(tty_out);
tty_out = NULL;
}
else {
ret = vfprintf(stdout, fmt, ap);
}
#else
ret = vfprintf(stdout, fmt, ap);
#endif
va_end(ap);
return ret;
}
#endif需要从串口输出调试日志时仅仅需要打开宏定义USE_UART_DEBUG即可,关闭时输出到stdout中。
(2)、修改调用
替换需要输出日志的地方的代码,直接使用上面头文件中的方法打印调试日志即可。