리눅스 커널은 정말 진입 장벽이 높다. 이제 제대로 공부를 시작한지는 2개월 정도 됐는데, 주요 서브시스템들 (I/O, pci, usb, address space, memory management, timer, ... 등등) 을 공부해도 당장 개발을 시작하기는 어렵다. 지금 보는 책이 아래 정도인데 커널 개발에 있어 정말 필수적인 지식들, 그리고 어느 정도 깊이 있는 지식들도 약간 다룬다.
하지만 위의 책 세 권을 끝내도 개발을 시작할 수 있을 거라는 생각은 안 든다. 물론 개발을 시작하려면 서브시스템을 정해야 한다. 지금은 디바이스 드라이버 쪽에 관심이 있는데 "Linux Device Drivers" 책을 봐도 디바이스 드라이버 개발을 당장 시작할 수는 없다. 왜냐하면 드라이버로 컨트롤할 하드웨어에 대한 지식도 부족하고, 당장 어떤 하드웨어의 드라이버를 분석할지도 모르겠으며, 심지어 드라이버 서브시스템에 어떤 종류의 드라이버가 있는지도 잘 모른다.
그래서 매우 막막하다. 그런 점에서 실제 드라이버를 분석하는 아래의 책이 좋은 것 같다. (아직 읽어보지는 못했다.) 그래서 위의 세 권을 충분히 본 후에 아래 책으로 실질적인 드라이버 분석을 시작해보려 한다.
그 외에 더 공부가 필요하다고 느끼는 것들 ( + 책 )
- 더 깊은 수준의 C언어
- 컴파일러 (특히 gcc)
- 컴퓨터 아키텍처 (x86, arm, risc-v, ... etc)
- 리눅스 커널
- Documentation & Code
- 디버깅으로 배우는 리눅스 커널 1, 2
- Understanding the Linux Kernel
- lwn.net + release note 따라가면서 공부하기
- 테스트 도구들
- perf, lkp-test, kselftests
- 이메일 클라이언트
- mutt
- 기타 커맨드라인 도구들
- make, diff, ...
- 영어 (글쓰기, 회화)
메모, 기타 생각 정리
문서화
그냥 만들다 버리는 프로젝트가 아니라 진심으로 관리할 프로젝트라면 문서화는 정말 중요하다. 이걸 리눅스 커널을 공부하면서 느꼈다. 리눅스도 모든 리눅스 커널 개발자가 개발을 하려면 읽어야 할 문서들을 정리해놓았다.
근데 특정 subsystem으로 가면 문서가 없는 경우도 많다. 다행히 어떤 subsystem을 만들거나 수정하려면 충분히 discussion을 거친 후에 만들어지기 때문에 그 discussion을 보면 된다.
구 버전 커널
옛날 버전 커널로 공부하는게 생각보다 나쁘지 않다. ( 물론 최신 버전으로 공부한다는 선택지는 거의 없다. ) 일단 옛날 버전으로 공부한 다음 운이 좋으면 그 버전의 설계와 API를 아직도 쓰고 있을 것이고 ( 물론 그럴 일은 거의 없다. ), 바뀐 점이 있다면 바뀐 점을 따라가면서 공부를 하면 된다. 하다 보면 좀 짜증도 나고 시간도 많이 걸린다. 하지만 그것 말고는 사실상 방법이 없다.
원서와 번역서
원서와 번역서는 읽는 속도와 이해하는 깊이 사이의 trade-off가 있다. 보통 영어로 읽는게 더 느리지만 이해가 잘 된다. 원서랑 번역서를 둘다 사서 공부해도 나쁘지 않을 것 같은데, 번역서 중 절판된게 많다. 중고 마켓에 가면 절판된 번역서를 막 10만원에 팔고 그러는 경우도 있다. 나쁜 사람들.
'Kernel' 카테고리의 다른 글
mutt 이메일 클라이언트 사용법 정리 (0) | 2021.08.20 |
---|---|
[Linux Kernel] 주소와 메모리 공간 (2) | 2021.05.15 |
[Linux Kernel] 첫 의미있는 기여 경험 (mm, slub) (2) | 2021.05.12 |
[Linux Kernel] 메모리 할당 (0) | 2021.05.08 |
[Linux Kernel] 시간과 타이머 (1) | 2021.05.04 |
댓글