Guillermo Austin Kim

Sources

Posts

998 posts

[Linux][Kernel] fd(file descriptor: 파일 디스크립터) 등록 - 코드리뷰

Guillermo Austin Kim|2017년 12월 17일

리눅스 시스템 프로그램을 보면 fd를 얻어오는 코드를 자주 볼 수 있어요. fd를 보통 file descriptor라고 하죠.특정 프로세스에서 파일 핸들이라고 이야기하고요. 그럼 fd가 커널 공간에서 어떻게 생성되고 저장되는지 살펴보도록 할께요.#include #include #include #include #include #include #define MAX 1024 int main (int argc, char ** argv[]) { int fd; int readn = 0; int writen = 0; char

[Linux][Kernel] Kernel Panic @__stack_chk_fail - 스택 카나리 (Stack canary Feature)

Guillermo Austin Kim|2017년 12월 16일

최근 흥미로운 커널 패닉이 나왔는데요. 디버깅 과정을 공유 좀 하고자 해요. 일단 콜스택부터 볼께요. sock_has_perm() 함수가 돌다가 갑자기 __stack_chk_fail() 함수 호출로 panic()이 일어났거든요. 왜 이런 현상이 발생했을까요?crash> bt e5752c00PID: 1787 TASK: e5752c00 CPU: 4 COMMAND: "net_socket"bt: WARNING: stack address:0xe853fa38, program counter:0xc0ee5b60 #0 [ ] (panic) from [ ] #1 [ ] (__stack_chk_fail) from [

[Linux][Kernel] Process 프로세스 상태 (1) - 런큐(Runqueue) 디버깅

Guillermo Austin Kim|2017년 12월 14일

이번 시간에는 각 프로세스 상태에 대해 조금 더 짚어보려고 해요. 리눅스 커널 책을 보면 프로세스 상태에 대한 State Machine을 많이 볼 수 있는데요.Running/Ready 상태 이런 거죠. 실제 리눅스 커널에서는 어떤 API로 구현되는 지 살펴보려고 해요. 무엇보다 실제 데이터 구조체를 살펴보려고 해요. 1> Running State Process 프로세스가 실행되기 위해서는 뭘 해야 할까요? 런큐에 프로세스를 큐잉해야 해요. Runqueue에서 돌고 있는 프로세스를 Running 상태 프로세스라고 볼 수 있어요. 그럼 Crash Tool로 이 디버깅 정보를 어떻게 확인 가능하냐면요. 아래 커맨트로 볼 수 있어요.crash> runqCPU 0 RUNQUEUE: c4b4cb80

[Linux][Kernel] ftrace - Workqueue 워크큐 로그 분석 - 1

Guillermo Austin Kim|2017년 12월 13일

리눅스 커널의 매우 중요한 Subsystem인 워크큐. 이번에는 잠깐 ftrace 로그에서 workqueue에 대해 분석을 해보려고 해요.ftrace 세팅은 Appendix [1]을 참고하시구요. 아래 로그는 보자마자 느낄 수 있는 건 irq/225-touch-279란 irq_thread에서 워크 큐를 큐잉하고 이 후 워크큐가 실행된다는 걸 알 수 있죠. irq/225-touch-279 [006] 53516.537609: workqueue_queue_work: work struct=0xed845d58 function=touch_update_work workqueue=0xed80cc00 req_cpu=8 cpu=6 //<<--[1] irq/225-touch-279 [006] 53

[Linux][Kernel] ftrace - early logging at boot time

Guillermo Austin Kim|2017년 12월 13일

리눅스 커널 디버깅 기능의 핵심 ftrace에 대해서 여러 번 소개했는데요.한 가지 재미있는 패치를 소개하려고 해요. ftrace 로깅을 하기 위해서는 아래와 같은 방식으로 시스 노드에 있는 파라미터를 설정해야 해요."echo 0 > /d/tracing/events/enable""echo 1 > /d/tracing/events/sched/sched_switch/enable""echo 1 > /d/tracing/events/power/wakeup_source_activate/enable""echo 1 > /d/tracing/events/power/wakeup_source_deactivate/enable" "echo 1 > /d/tracing/events/irq/irq_handle