【recovery】android使用串列埠列印recovery除錯日誌

yingxian_Fei發表於2017-12-18

1、應用背景:

        除錯android recovery時,由於recovery預設的日誌是儲存到/cache相關資料夾下的檔案中的,所以每次只能在升級完成後重啟系統後才能看到相關的除錯日誌資訊,這對除錯帶來很大的不變,如有的時候recovery操作失敗導致系統無法啟動時,無法看到相關的日誌,因此這時候可以使用本文中提供的方法將相關日誌從除錯串列埠輸出,直接用串列埠在升級過程中檢視日誌。

2、實現思路

實現思路比較簡單,就是將原來列印日誌的函式封裝,然後需要時直接將日誌從串列埠輸出;

3、程式碼實現

(1)、日誌輸出

將寫日誌的函式直接放到一個獨立的標頭檔案中,這樣需要用的檔案直接包含這個標頭檔案就行了。如下為本文中提供的標頭檔案原始碼:

#ifndef _LANDSEM_RECOVERY_LOG_H
   #define _LANDSEM_RECOVERY_LOG_H

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdarg.h>
   
#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)、修改呼叫

替換需要輸出日誌的地方的程式碼,直接使用上面標頭檔案中的方法列印除錯日誌即可。

相關文章