
디버깅 은 debug와 -ing의 합성어로 버그를 잡는 과정
누군가 "디버깅하고 있다" ➡ "버그를 수정하고 있다"
디버깅: 리눅스 커널과 Driver가 정상 동작할 때 자료구조와 함수 호출 흐름까지 파악하는 과정
커널 로그와 메모리 덤프를 정확히 분석해야 문제 발생의 원인을 분석할 수 있다!
자신이 작성한 코드의 논리적 문제점을 분석하고 해당 코드를 작성한 엔지니어가 버그를 잡았다.
커널로그나 메모리 덤프로 함수나 자료구조를 분석할 때는 자신이 작성한 코드보다
다른 개발자가 작성한 커널 코드를 만날 가능성이 매우 높다!
But 난이도가 높은 문제 일수록 커널 내부 함수를 분석할 가능성이 높아진다!
Stack 공간에서 실행됨
유저공간 Task Descriptor 내 mm Field(Memory Descriptor/가상 메모리 공간)가 존재함
커널 프로세스는 유저 공간에서 실행하지 않음
커널 프로세스의 mm Field = NULL
유저 프로세스와 커널 프로세스를 구분지을 수 있는 자료구조는?
mm Field 가 NULL인지 확인하면 된다.

fork() 함수를 호출하면 리눅스에서 제공하는 Utility Library의 도움을 받아 커널에게 프로세스 생성 요청fork() 함수에 대응하는 System Call Handler인 _arm64_sys_clone() 함수 실행백그라운드로 실행되면서 시스템 메모리나 전원을 제어하는 동작을 수행백그라운드로 실행