Guillermo Austin Kim

Sources

Posts

998 posts

Runqueue(런큐) Timestamp(실행 시간) 확인

Guillermo Austin Kim|2017년 12월 24일

보통 커널 크래시나 와치독 리셋으로 시스템이 다운된 경우 세밀하게 디버깅해야 할 때가 있어요.그런데 가끔 각 프로세스가 마지막에 어떤 순서로 실행이 됐는지 확인하고 싶을 경우가 가끔 있거든요.이 순서가 가끔 정말 중요한 순간이 가끔 있어요. 아래는 런큐에서 돌고 있는 프로세스 목록이거든요. 그럼 각각 프로세스가 어떤 순서로 실행이 되었는지 알 수 있을까요?crash64> runq -m CPU 0: [0 07:36:22.901] PID: 585 TASK: ffffffc071eb8b80 COMMAND: "android.hardwar" CPU 1: [0 07:36:22.901] PID: 726 TASK: ffffffc0f6e3f300 COMMAND: "DispSync" CPU 2: [0

워크큐(Workqueue) - struct work_struct->data

Guillermo Austin Kim|2017년 12월 24일

workqueue를 디버깅할 때 여러 변수를 점검해야 하거든요.그 중에 하나가 struct work_struct->data 변수이거든요 일단 데이터 구조체는 아주 명령어로 볼 수 있죠.crash64> struct -o work_structstruct work_struct { [0] atomic_long_t data; [8] struct list_head entry; [24] work_func_t func;} 이번 기회에 struct work_struct->data 값들을 정리하려고 하는데요.결과는 아래와 같아요. 가끔 디버깅 할 때 아래 매크로 값들을 찾다가 짜증날 때가 가끔 있거든요.workque macro Hexa ValueWORK_STRUCT_COLOR_BITS 0x4

ARM64 - 각 익셉션(Exception) 레벨 소개

Guillermo Austin Kim|2017년 12월 23일

64비트의 ARM 아키텍쳐(ARMv8)의 익셉션 레벨에 대해 간단히 살펴보고자 합니다. 각 Exception Level(EL) 특징을 간단하게 적을께요.1> EL0 -> EL1 -> EL2 -> EL3로 갈수록 execution privilege가 증가해요. 볼 수 있는 코드나 파일에 대한 Permission이 더 있다는 거죠. 2> EL0는 유일한 unprivileged 특성을 가져요.3> EL2는 Non-secure 모드에서 가상화를 구현하기 위해서 사용되곤 하는데 자주 쓰지는 않아요.4> EL3는 secure 와 Non-secure 모드 전환을 위해서 사용되죠.5> ARMv8에서 EL0, EL1은 필수 구현 사항이며 나머지는 Option이에요.즉 ARMv8을

fd - file descriptor(파일 디스크립터) 갯수 확인 및 업데이트 방법

Guillermo Austin Kim|2017년 12월 23일

리눅스 커널에서는 하나의 프로세스가 소유할 수 있는 파일 디스크립터의 갯수를 정해 놓았는데요.그럼 이 갯수를 어떻게 알 수 있을까요? 아래 명령어로 확인할 수 있어요.ulimit -a 결과를 보니 "nofiles(descriptors) 1024" fd의 갯수는 1024이네요.adb shell ulimit -atime(cpu-seconds) unlimitedfile(blocks) unlimitedcoredump(blocks) 0data(KiB) unlimitedstack(KiB) 8192lockedmem(KiB) 64nofiles(descriptors) 1024processes 6609flocks

[Linux][Kernel] fd(file descriptor: 파일 디스크립터) 디버깅 CrashTool

Guillermo Austin Kim|2017년 12월 20일

"echo c > /proc/sysrq-trigger" 명령어로 강제 커널 패닉을 유발시킨 다음 코어 덤프를 받아 보았어요.crash> bt -I C01003AC -S C59C3E20 0xD110E040PID: 4944 TASK: d110e040 CPU: 0 COMMAND: "sh" #0 [ ] (do_DataAbort) from [ ] pc : [ ] lr : [ ] psr: 60010013 sp : c59c3f10 ip : c1920700 fp : bee5765c r10: 00000000 r9 : acf2a284 r8 : 00000000