[Linux][Kernel] data abort@irq_affinity_notify - 리눅스 커널
By Guillermo Austin Kim | 2018년 1월 12일 |
아래 커널 로그와 함께 시스템이 커널 패닉으로 돌아가셨어요.irq_affinity_notify+0x4c 란 함수에서 data abort가 난 것을 확인할 수 있어요.[287229.435076] <c6>mmc0: mmc_start_bkops: raw_bkops_status=0x2, from_exception=1[287230.328287] <c6>mmc0: mmc_start_bkops: Starting bkops[287231.319886] <26>Unable to handle kernel NULL pointer dereference at virtual address 000000fc[287231.319920] <26>pgd = c0004000[287231.319936]
워크큐(Workqueue) - struct work_struct->data
By 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
[라즈베리파이] 동기화 - 스핀락(spinlock): 스핀락 중복 획득 시 동작
By Guillermo Austin Kim | 2018년 12월 25일 |
이전 시간까지 스핀락을 획득하고 해제하는 기본 동작만을 확인했습니다. 실전 개발에서는 스핀락을 다른 프로세스가 접근하는 동작에서 예상치 못한 문제를 볼 수 있습니다. ftrace 로그로 커널을 디버깅하면 스핀락을 바로 획득할 때 보다 스핀락을 얻지 못해 기다리는 빈도가 훨씬 높습니다. 스핀락을 제대로 이해하려면 스핀락을 누군가 획득한 다음 다른 프로세스가 같은 스핀락을 얻기 위해 기다릴 때 어떤 동작을 하는지 상세히 분석할 필요가 있습니다. 그동안 이미 분석한 어셈블리 코드는 될 수 있는 대로 넘어가고 스핀락 중복 획득 시 스핀락이 어떤 동작을 하는지 초점을 맞춰서 코드를 살펴보겠습니다.
crash-utility(crash tool) - ps command
By Guillermo Austin Kim | 2018년 1월 5일 |
커널 패닉 디버깅할 때 crash-utility를 아주 많이 쓰죠. 수 많은 명령어 중 ps를 소개하려고 합니다. ps -p 프로세스 전체의 부모와 자식 프로세스 정보를 보여줘요.crash64> ps -pPID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK: ffffffc0f865f300 CPU: 1 COMMAND: "swapper/1" PID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK