본문 바로가기
Kernel

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

by hygoni 2021. 5. 12.
※ 이 블로그의 글은 글쓴이가 공부하면서 정리하여 쓴 글입니다.
※ 최대한 내용을 검토하면서 글을 쓰지만 틀린 내용이 있을 수 있습니다.
※ 만약 틀린 부분이 있다면 댓글로 알려주세요.

리눅스 커널은 정말 진입 장벽이 높다. 이제 제대로 공부를 시작한지는 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만원에 팔고 그러는 경우도 있다. 나쁜 사람들.

반응형

댓글4

  • 익명 2022.02.18 11:34

    비밀댓글입니다
    답글

    • BlogIcon hygoni 2022.02.21 17:17 신고

      안녕하세요. 답장이 조금 늦었네요. 어떤 서브시스템에 관심이 있으신가요?

      개인적인 생각으로는 로버트 러브의 Linux Kernel Development같은 책으로 일반적인 내용을 먼저 숙지하는게 도움이 되는데, 서브시스템에 따라서 공부해야할 내용이 많이 달라요.

    • BlogIcon hygoni 2022.02.21 17:20 신고

      저 같은 경우에는 메모리 관리와 슬랩 할당자에 관심이 좀 있어서 슬랩 할당자 논문, 문서, 책의 관련된 챕터, 컴퓨터 구조 등등 관련된 내용을 찾아가면서 공부를 하고 있어요.

      어느정도 익숙해질 때 쯤엔 코드랑 메일링 리스트도 읽고요.

  • BlogIcon tky7068 2022.08.15 17:25 신고

    참고되었습니다. 감사합니다. ^^
    답글