본문 바로가기

Linux Kernel

[Linux Kernel] 고민과 공부 방향 정리

반응형

리눅스 커널은 정말 진입 장벽이 높다. 이제 제대로 공부를 시작한지는 2개월 정도 됐는데, 주요 서브시스템들 (I/O, pci, usb, address space, memory management, timer, ... 등등) 을 공부해도 당장 개발을 시작하기는 어렵다. 지금 보는 책이 아래 정도인데 커널 개발에 있어 정말 필수적인 지식들, 그리고 어느 정도 깊이 있는 지식들도 약간 다룬다.

 

 

Linux Device Drivers book - Bootlin

A must-have book for people creating device drivers for the Linux kernel! Now available in a single PDF file. Linux Device Drivers from Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartmann, is the book anyone interested in writing Linux device driver

bootlin.com

 

리눅스 커널 심층 분석

이 책은 리눅스 커널의 핵심을 간결하면서도 심도있게 다루고 있다. 일반적인 운영체제에 대한 이해를 넘어, 여타 유닉스 시스템과 다른 리눅스만의 특징적인 부분에 대한 설계, 구현, 인터페이

www.yes24.com

 

IT EXPERT, 리눅스 커널 프로그래밍

이 책은 커널을 과감히 뜯어고쳐가면서 다양한 실험을 하는 데 집중하고 있다. 눈으로 보고, 머릿속으로 생각하는 것이 아니라 손가락을 바삐 움직이면서 커널을 이해하는 것을 목표로 하고 있

m.hanbit.co.kr

하지만 위의 책 세 권을 끝내도 개발을 시작할 수 있을 거라는 생각은 안 든다. 물론 개발을 시작하려면 서브시스템을 정해야 한다. 지금은 디바이스 드라이버 쪽에 관심이 있는데 "Linux Device Drivers" 책을 봐도 디바이스 드라이버 개발을 당장 시작할 수는 없다. 왜냐하면 드라이버로 컨트롤할 하드웨어에 대한 지식도 부족하고, 당장 어떤 하드웨어의 드라이버를 분석할지도 모르겠으며, 심지어 드라이버 서브시스템에 어떤 종류의 드라이버가 있는지도 잘 모른다.

 

그래서 매우 막막하다. 그런 점에서 실제 드라이버를 분석하는 아래의 책이 좋은 것 같다. (아직 읽어보지는 못했다.) 그래서 위의 세 권을 충분히 본 후에 아래 책으로 실질적인 드라이버 분석을 시작해보려 한다.

 

코드로 읽는 리눅스 디바이스 드라이버

x86과 임베디드 CPU를 모두 아우르며, 리눅스에서 지원하는 거의 모든 디바이스 유형을 설명하고, 원시 코드 수준에서 실제 예제를 보여준다. 또한 디바이스 드라이버 개발 절차와 방법을 자세히

www.yes24.com

그 외에 더 공부가 필요하다고 느끼는 것들 ( + 책 )

- 더 깊은 수준의 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, ...

- 영어 (글쓰기, 회화)

메모, 기타 생각 정리

문서화

그냥 만들다 버리는 프로젝트가 아니라 진심으로 관리할 프로젝트라면 문서화는 정말 중요하다. 이걸 리눅스 커널을 공부하면서 느꼈다. 리눅스도 모든 리눅스 커널 개발자가 개발을 하려면 읽어야 할 문서들을 정리해놓았다. 

 

A guide to the Kernel Development Process — The Linux Kernel documentation

© Copyright The kernel development community.

www.kernel.org

 

Working with the kernel development community — The Linux Kernel documentation

» Working with the kernel development community View page source © Copyright The kernel development community. Built with Sphinx using a theme provided by Read the Docs.

www.kernel.org

근데 특정 subsystem으로 가면 문서가 없는 경우도 많다. 다행히 어떤 subsystem을 만들거나 수정하려면 충분히 discussion을 거친 후에 만들어지기 때문에 그 discussion을 보면 된다.

구 버전 커널

옛날 버전 커널로 공부하는게 생각보다 나쁘지 않다. ( 물론 최신 버전으로 공부한다는 선택지는 거의 없다. ) 일단 옛날 버전으로 공부한 다음 운이 좋으면 그 버전의 설계와 API를 아직도 쓰고 있을 것이고 ( 물론 그럴 일은 거의 없다. ), 바뀐 점이 있다면 바뀐 점을 따라가면서 공부를 하면 된다. 하다 보면 좀 짜증도 나고 시간도 많이 걸린다. 하지만 그것 말고는 사실상 방법이 없다.

원서와 번역서

원서와 번역서는 읽는 속도와 이해하는 깊이 사이의 trade-off가 있다. 보통 영어로 읽는게 더 느리지만 이해가 잘 된다. 원서랑 번역서를 둘다 사서 공부해도 나쁘지 않을 것 같은데, 번역서 중 절판된게 많다. 중고 마켓에 가면 절판된 번역서를 막 10만원에 팔고 그러는 경우도 있다. 나쁜 사람들.