2018년 5월 27일 일요일

look at the kernel log in android (커널 로그 보기)

android 가 linux 커널을 사용하는것은 알고 있을 것입니다. 그래서 system 적인 부분(device driver를 제작한다던가 hw장치의 불량 판단)을 이해를 위해서는 linux kernel 로그를 봐야 할 때가 있는데요.

언제 부터인가 로그를 볼 수 있는 명령들이 막혀 있습니다. 제가 사용하는 단말들만 그런건지 아니면 전체 단말이 그런지는 모르겠습니다.

linux에서 커널 로그 보는 명령
$ dmesg
dmesg: /dev/kmsg: Permission denied

$ cat /proc/kmsg
cat: /proc/kmsg: Permission denied

adb shell 상태에서 위 두가지 명령이 현재는 접근 권한이 없네요.
나오는 로그로 봤을때 /dev/kmsg 의 권한이 없어서 문제가 발생하고 있습니다.

crw------- 1 root root 1,  11 2018-05-24 23:36 kmsg

확인해보니 root 권한만 읽을 수 있게 되어있습니다.
그래서 확인 가능한 명령은 아래 명령밖에는 없을것 같습니다.

adb bugreport

adb bugreport > filename

전체 로그에서 dmesg 항목을 보면 됩니다.

adb bugreport

안드로이드에서 로그를 생성시키는 일반적인 명령입니다, dumpstate 파일로 내부에 만들어지며, 커널 로그, 메모리 정보 및 설치된 패키지 정보 등을 포함합니다.

bugreport의 일부
------ KERNEL LOG (dmesg) ------
<12>[161629.314942]  [0:        healthd: 3013] healthd: battery l=81 v=4105 t=28.0 h=2 st=3 c=0 o=1 ca=-184 ct=0 ps=0 chg= 2017-01-05 10:07:16.173926825 UTC hv=0 sdc=0 sec=0 chg=
<14>[161629.314970]  [0:        healthd: 3013] healthd-android: healthd_mode_android_battery_update
<14>[161629.314997]  [0:        healthd: 3013] BatteryPropertiesRegistrar: notifyListeners : start
<14>[161629.315024]  [0:        healthd: 3013] IBatteryPropertiesListener : batteryPropertiesChanged!
<14>[161629.315024]  [0:        healthd: 3013] : BatteryPropertiesRegistrar: notifyListeners : done
<6>[161629.316873]  [1:       Binder_6: 3868] logger: !@BatteryListener : batteryPropertiesChanged!
<6>[161629.339024]  [0:  kworker/u16:3:10539] mmc_host mmc0: Bus speed (slot 0) = 25000000Hz (slot req 400000Hz, actual 390625HZ div = 32)
<6>[161629.391989]  [3:  kworker/u16:9: 9696] [SSP] get_timestamp - 9 5s buf=374229509624844 cur=374229512874306
<6>[161629.392046]  [3:  kworker/u16:9: 9696] [SSP]: MSG From MCU - AR-92,-43,3946,-1,20
<6>[161629.392046]  [3:  kworker/u16:9: 9696] AR-83,-61,3958,-1,20
<6>[161629.398324]  [3:  system_server: 3600] logger: !@suspend_thread_func: read wakeup_count
<6>[161629.398324]  [3:  system_server: 3600] 
<6>[161629.409004]  [1:  kworker/u16:3:10539] mmc_host mmc0: Bus speed (slot 0) = 25000000Hz (slot req 300000Hz, actual 297619HZ div = 42)
<6>[161629.574606]  [1:  kworker/u16:3:10539] [SSP] get_timestamp - 9 curtime cur=374229695489998 last=374229509624844 buf=374229689581152 avg=220949836
<6>[161629.752423]  [2:  kworker/u16:3:10539] [SSP] get_timestamp - 9 curtime cur=374229873308652 last=374229695489998 buf=374229869533075 avg=220946961
<4>[161629.908422]  [6:      swapper/6:    0] CPU6: Booted secondary processor
<6>[161629.908440]  [6:      swapper/6:    0] Detected VIPT I-cache on CPU6
<6>[161629.908502]  [6:      swapper/6:    0] handle_IPI: IPI_WAKEUP
<4>[161629.909886]  [7:      swapper/7:    0] CPU7: Booted secondary processor
<6>[161629.909904]  [7:      swapper/7:    0] Detected VIPT I-cache on CPU7
<6>[161629.909979]  [7:      swapper/7:    0] handle_IPI: IPI_WAKEUP
<6>[161629.922213] I[4:      swapper/4:    0] mif: LNK-TX(11): f8 eb 0b 00 07 00 3f 00 08 11 02
<6>[161629.923388] I[0:      swapper/0:    0] mif: LNK-RX(69): f8 eb 45 00 41 00 8b 3f 08 11 02 00 00 02 00 01 ...
<6>[161629.932203]  [7:  kworker/u16:3:10539] [SSP] get_timestamp - 9 curtime cur=374230053096536 last=374229873308652 buf=374230049480883 avg=220956498
<6>[161630.110253]  [6:      exynos_hp: 1784] Trustonic TEE: mobicore_cpu_callback: Cpu 6 is going to die
<6>[161630.110488]  [4:      exynos_hp: 1784] Trustonic TEE: mobicore_cpu_callback: Cpu 7 is going to die
<5>[161630.112377]  [4:      exynos_hp: 1784] CPU6: shutdown

생성된 파일에서 dmesg 부분을 검색하면 커널 로그를 볼 수 있습니다.

로그 보는 방법

<12> : 로그 레벨
[161629.314942] : 초단위의 시간, 제일 처음은 0 부터 시작합니다. 
[0: CPU core 번호
healthd : process 이름
3013 : pid 번호
<6>[161629.922213] I[4:      swapper/4:    0] : I 는 일반적으로 IRQ 처리루틴안에서 메세지가 출력될때 붙음






댓글 없음:

댓글 쓰기