1. 程式人生 > >[FAQ03891] 如何在User版本開啟串列埠(Uart),抓取上層Log,開啟輸入控制檯

[FAQ03891] 如何在User版本開啟串列埠(Uart),抓取上層Log,開啟輸入控制檯

FAQ Content

[Description]
如何在User版本開啟串列埠(Uart),開啟輸入控制檯,抓取上層Log
 
[Keyword]
User Uart Log Logcat 輸入 控制檯 串列埠
 
[Solution]
(1) 如何在User版本中使用串列埠(Uart)
 *Android GB 2.3 GB.MP GB.TDD.MP GB2.MP GB2.TDD.MP
  alps/mediatek/config/common/autoconfig/kconfig/USER
  如果版本一致的話,應當是這個檔案的37行
  CONFIG_COMLINE=”console=ttyMT3,921600n1 loglevel=0”
  您把最後的loglevel = 8 即可
  
 *Android GB3.MP GB3.TDD.MP
  手法1:直接用ENG 版本的lk 替換掉user 版本的lk, 即重新download eng 版本的lk 即可。
  手法2:  alps/bootable/bootloader/lk/app/mt_boot/mt_boot.c 裡面的 178 行,找到printk.disable_uart=1 改成 printk.disable_uart=0
          然後重新編譯lk, download lk 即可。
  
 *Android ICS 4.0/JB 4.1
  如果是必須開機即需要抓取User 版本的Uart log, 請提交eservice 申請預設開啟uart 的xlog 執行檔
  否則可以直接在adb shell 中輸入aee -k 6, 後面的6即kernel printk 的Log等級,您可以選擇不同的等級
  
 *Android JB 4.2 以及以後版本
  手法1:直接用ENG 版本的lk 替換掉user 版本的lk, 即重新download eng 版本的lk 即可。
  手法2: alps/bootable/bootloader/lk/app/mt_boot/mt_boot.c 裡面的 178 行,找到printk.disable_uart=1 改成 printk.disable_uart=0
          然後重新編譯lk, download lk 即可。
  手法3: 如果只是臨時將uart log 開啟用於測試,請到我司DMS 上查詢文件: Enable UART Log in user build.pptx
  
 * 注意事項: 由於uart log 的列印對系統的效能造成嚴重影響, 在JB9.MP 以及以後版本, 在開機完成後預設關閉了uart log, 以提高系統性能. 從uart log 中可以看到如:
   抓UART Log的時候會看到類似下面的Log。
   [   25.986567].(1)[324:Binder_1][usktrk] socket close[10422]
   [   25.987748].(1)[324:Binder_1]BOOTPROF:     25987.740155:BOOT_Animation:END
   [   25.988616].(1)[324:Binder_1]<< printk console disable >>
 
   要關閉此功能,可以進行如下操作:
   有三種種方法可以重新開啟UART log:
   1. 在超級終端視窗按下鍵盤的任何一個按鍵就可以讓UART log繼續吐。此種方式需要UART的TX和RX都要連線好。
   2. 通過修改proc引數的方式: adb shell echo 1 > /proc/mtprintk
   3. 通過設定system property:
    使用: UART:command: setprop persist.uartconsole.enable 1
              ADB Shell: adb shell setprop persist.uartconsole.enable 1
  
(2) 如何開啟Uart 的控制檯(console/sh)
 Uart 控制檯的開啟,決定於System property ro.debuggable,預設如果ro.debuggable=1 則開啟(Eng 版本),User 版本ro.debuggable=0 則關閉。
 想在User 版本中開啟,需要更新alps/mediatek/config/mt65xx/init.rc, 在init.rc 的觸發器程式碼:
   on property:ro.debuggable=1
    start console
 後面增加:
   on property:ro.debuggable=0
    start console 
 然後重新編譯bootimage 即可, ./mk [project_name] new bootimage 
 
(3) 如何在Uart 上抓取上層LOG
 Uart 上進行輸入,實際就是開啟了一個sh 對接起來,所以絕對不能在uart 上輸入一個長命令(不可中斷),否則uart 將被卡住,不能再輸入。
 抓取上層log, 我們通常需要call logcat, 但logcat 是不可中斷的,將導致uart 不能再輸入。
 處理的方法即將logcat 轉入後臺執行,如下操作即可:
 Main log: logcat -v time &
 Radio log: logcat -v time -b radio &
 Event log: logcat -v time -b events &
 如果想關閉上層log, 直接ps 查閱前面開啟的logcat process pid, 然後kill -9 pid 殺掉即可。
 注意一定要帶“&”,否則將block 住uart輸入