LAST UPDATE: 2022.01.28
SITE
1. 커널 연구회 커뮤니티 (https://kernel.bz/)
커널의 기초에 대한 설명이 잘 나와있다. 계단을 올라가려 할 때 어떻게 생긴 계단인지 살펴보는 단계 정도라고 생각하면 될 것 같다. '리눅스커널' 탭에 나온 내용들로 아쉽다면 이 연구회에서 출간한 책도 있다. 읽어보진 않아 평을 할 수는 없지만 정말 아무것도 모르는 사람이라면 접해보는 데에 무리는 없을 것 같다.
2. ★ Kernel of Linux (https://olc.kr/course/course_online_view.jsp?id=35&s_keyword=Kernel&x=0&y=0#self)
故 고건 교수님의 커널에 대한 기초 강의다. 해당 강의는 모두 듣고 정리를 마쳤다.
정말 강추하는 강의다. 기본적인 C언어에 대한 지식과 Linux를 다뤄본 경험이 있고, 컴퓨터 구조를 어느 정도 알면 강의를 듣는 데에 큰 무리가 없을 것이다. 만약 아직 잘 모르겠다고 하더라도 들으면서 커널에 대한 전반적인 이론을 익히기엔 좋다.
해당 강의는 로버트 러브의 Linux Kernel Development (BOOK 2번 링크 참고)를 기준으로 하고 있다. 모든 챕터를 강의하지는 않았으므로 부족한 내용이나 강의에서 다루지 못했던 내용들을 알고 싶다면 이 책을 구입하면 된다.
3. Kernel of Linux 강의노트 1 (https://wogh8732.tistory.com/280?category=807175)
2번에서 소개한 링크의 강의를 정리한 글이다.
까망눈님의 블로그는 개인적으로 보안에 대해 공부할 때 도움을 많이 받았던 블로그 중 하나다. 마침 커널 관련 프로젝트를 진행하신다고 2번의 강의를 정리하신 건데 내가 강의 정리하고 부족한 점이 있나 점검할 때 돌아볼 때 도움이 됐다.
4. Kernel of Linux 강의노트 2 (https://medium.com/pocs/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%95%EC%9D%98%EB%85%B8%ED%8A%B8-1-d36d6c961566)
2번에서 소개한 링크의 강의를 정리한 글이다.
5. (보안) Dreamhack: Linux Kernel Exploit 커리큘럼 (https://dreamhack.io/lecture/curriculums/4)
믿고 보는 드림핵 강의 콘텐츠. 보안 쪽 공부할 때 커널 익스플로잇의 기초를 배울 수 있다. 커널 연구 목적으로 라면 크게 어울리진 않다.
6. (보안) 인프런 커널 해킹 강의 (https://www.inflearn.com/course/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%A4%EB%84%90-%ED%95%B4%ED%82%B9)
커널 해킹에 대한 몇 없는 좋은 강의다. 2번의 드림핵 강의를 다 들었고 추가적인 커널 익스플로잇 방법을 알고 싶을 때 들으면 좋을 것 같다. 다만 비싼 가격 때문에 할인할 때 사는 걸 추천한다.
7. (보안) Defenit 팀의 블로그에 정리된 커널 배경지식 (https://defenit.kr/2019/10/21/Pwn/%E3%84%B4%20Research/%EC%BB%A4%EB%84%90_%EA%B8%B0%EC%B4%88/)
커널 익스플로잇에서 사용되는 개념과 커널의 보안 기법 중심으로 간단하게 정리된 블로그다.
8. lwn.net (https://lwn.net/)
리눅스와 관련된 여러 기사들과 최신 정보들, 패치 등등 여러 정보가 올라오는 커뮤니티다. 리눅스 커널 컨트리뷰터라면 이 사이트를 모를 수 없을 정도로 자주 접하는 사이트다.
9. Elixir Bootlin - Kernel (https://elixir.bootlin.com/linux/latest/source)
리눅스 커널 소스를 온라인에서 확인할 수 있는 사이트다. 각종 심볼이나 파일을 찾고 검색할 수 있어 매우 유용하다.
10. kernelnewbies.org (https://kernelnewbies.org/Linux_Kernel_Newbies)
리눅스 커널 뉴비. 이름에서 알 수 있듯이 커널 뉴비들을 위한 각종 자료들이 존재하는 커뮤니티다. 나도 아직 다 읽어보진 못했지만 기초 내용을 알기엔 굉장히 유용하다.
11. Linux Kernel Teaching (https://linux-kernel-labs.github.io/refs/heads/master/index.html)
커널 5.10.14 버전을 기준으로 작성된 문서다. 리눅스 커널에 대한 기본 개념들을 설명하는 LECTURES 탭과 디바이스 드라이버 실습을 중심으로 설명하는 LABS 탭으로 구성되어 있다.
디바이스 드라이버 작성할 때 도움이 많이 받은 사이트 중 하나다.
BOOK
1. 디버깅을 통해 배우는 리눅스 커널의 구조와 원리
라즈베리파이를 준비한 후 라즈비안 운영체제를 설치해서 진행한다. 커널 빌트인 디버깅 툴인 ftrace의 사용법과 함께 직접 실습해보며 동작을 눈으로 확인함과 동시에 커널의 구조와 원리를 이해하는 데에 도움을 주고자 하는 책이다.
아직 2권은 읽지 않았지만 1권을 읽고 나서 느낀 장단점은 다음과 같다. 구매 시 참고 바란다. (※ 어디까지나 개인적인 관점임을 밝힙니다!!)
- 장점
- 리눅스 커널을 공부할 때 직접 실습 환경을 만들어 진행하니 이론만 공부하는 것보다는 직접 커널을 만져볼 수 있다.
- 디버깅 툴(ftrace, T32)을 다루는 법을 알려주는 책은 거의 없는 것으로 안다. 하지만 실무에서는 역시 디버깅 없이 개발할 수 없으니 책에서 강조하신 것처럼 디버깅을 잘하기 위한 초석으로 삼기에 좋다. - 단점
- 각 챕터별로 기본적인 개념이 되어 있지만 아무래도 해당 개념에 해당하는 함수들의 connection과 디버깅에 초점을 맞추다 보니 아예 유닉스 혹은 리눅스 개념을 아예 모르고 접근하면 이해가 떨어질 수 있다. (하지만 이때는 SITE의 2번 링크, Kernel of Linux를 듣고 오면 이론을 쌓고 오니 도움이 될 것이다. 아니면 BOOK 2번인 리눅스 커널 심층 분석 책도 좋다.)
- 심도 깊은 분석을 원하는 사람이라면 어느 정도 비추다. 디버깅을 통해 간단한 성능 분석 정도는 이 책에서 다루고 있지만 그 이상의 무언갈 하지는 않는다.
정리하자면 "기본 이론을 알고 난 뒤 실제로 어떻게 돌아가고 있는지 눈으로 알고 싶은 사람, 말 그대로 디버깅하는 방법을 알고 싶은 사람" 정도가 추천 대상이다. 그렇지만 커널 디버깅을 해보는 것은 임베디드 분야에서 활동할 사람이라면 아는 것이 분명 도움이 될 것은 자명하다.
{ 메일로 질문드렸을 때 답변받아주신 김동현(Austin Kim)님께 감사드립니다. }
2. 리눅스 커널 심층 분석
옛날 버전(v2.6)의 커널을 기준으로 이론을 설명하는 책이다. SITE 2번 링크인 Kernel of Linux 강의에서 사용한 책이기도 하다. 해당 강의에서 몇몇 챕터는 강의하지 않았다 (예를 들어 Block I/O 챕터).
옛날 버전이라 별로 도움이 안 될 것으로 생각할 수도 있지만 다음과 같은 이유로 추천한다. 리눅스 커널은 2.6 버전부터 커널 역사에서의 격동기라고 할 수 있을 정도로 큰 변화와 개선이 일어난 시점이다. 그리고 그 큰 틀은 현재 버전(5 버전대)까지도 이어지고 있다. 당연히 많은 부분이 바뀌었지만 2.6 버전을 이해한 뒤 최신 버전을 접하면 왜 이렇게 바뀌었는지, 구조는 왜 이런지 훨씬 이해하기 쉬울 것이다.
▶ 인터넷 상의 원서 PDF 링크 - 무료고 원서다. 원서로 책을 읽음으로써 영어 실력도 키우고 번역서의 난해한 번역을 피하고 싶다면 여기로.
3. 코드로 알아보는 ARM 리눅스 커널, 제2판
커널을 공부하는 사람이 구글링을 했다면 한 번 이상 만나봤을 블로그, 문c 블로그의 운영자 분이신 문영일 님이 저자 중 한 분이시다. 그만큼 믿을만하다는 얘기다.
임베디드 개발에서 큰 부분을 차지하는 ARM 아키텍처를 기준으로 한 커널 분석 책. 읽어보진 않았지만 꽤나 어렵고 중상급자에게 적당하다지만 그래도 그림과 자세한 설명이 있어 좋다고 한다. 읽을 예정의 책 중 하나다.
4. 리눅스 커널 프로그래밍 - IT EXPERT
옛 버전의 커널(2.4, 2.6)을 기준으로 프로그래밍을 하고 있지만, 기초적인 커널 관련 프로그래밍을 하기에는 아주 적당하다. 모듈 프로그래밍, 커스텀 시스템 콜 추가하기 등을 직접 해볼 수 있는 개념과 코드를 알려줘서 말 그대로 리눅스 커널 프로그래밍의 입문자라면 정말 많은 도움을 받을 수 있는 책이다.
커널이 옛 버전이다 보니 옛 버전을 그대로 따라서 세팅하고 하는 것도 좋지만 실력 향상(프로그래밍 실력, 검색 실력, documentation 읽기 실력 등)을 위해서는 최신 버전의 커널로 세팅하고 달라진 점을 인지하면서 프로그래밍하는 것을 추천한다. 필자도 이렇게 공부하고 있다.
5. 임베디드 개발자를 위한 코드로 읽는 리눅스 디바이스 드라이버
여러 드라이버들을 소개하고 없는 디바이스 드라이버 개발할 때 도움이 될만한 책이다. 4번에서 소개한 '리눅스 커널 프로그래밍' 책에서는 디바이스 드라이버로 문자, 블록 디바이스 드라이버만을 다루고 있지만 이 책에서는 훨씬 다양한 종류의 디바이스 드라이버에 대한 내용을 다루고 있다. 비디오 드라이버, 오디오 드라이버, 직렬 드라이버 등 그 내용이 다양하다.
아직 읽어보지는 않았지만 디바이스 드라이버에 대한 더 다양한 지식을 알고 싶다면 이 책을 읽어볼 만할 것 같다. 커널 2.6 버전을 다룬다고 하니 이 책도 최신 버전에 맞춰 바꿔가며 프로그래밍한다면 도움이 될 것 같다.
6. ★ 임베디드 레시피 (http://recipes.egloos.com/)
링크 안에서 책 구매가 가능한 네이버 스토어 링크가 있다.
임베디드 시스템 엔지니어가 되고 싶은 사람이라면 이 책을 거쳐가지 않을 수 없을 만큼 바이블 취급(?)을 받고 있는 책이다. 커널에만 초점이 맞춰진 것이 아니라 전반적인 임베디드에 대한 지식에 초점에 맞춰져 있다. 또 블로그에는 실무적인 내용이 많고 취업에 대한 조언도 있다. 커널을 연구 목적으로 하는 사람도 있겠지만 보통은 임베디드 시스템 엔지니어가 되고 싶어 공부 중인 사람이 대부분일 것이라 생각한다. 그런 의미에서 이 블로그 & 책은 큰 도움이 될 것이다.
7. Linux Device Drivers, Third Edition
위 사이트에서 PDF로 다운로드할 수 있다. 커널 2.6 버전을 기준으로 드라이버에 대한 내용을 상세히 다루고 있는데 커널 개발에 직접적으로 참여하고 있는 개발자들이 만든 책인 만큼 내용도 짜임새 있고 신뢰도도 높다. 필자도 디바이스 드라이버 만들 때 관련 챕터를 꼭 읽는다.
Extra) pr0gr4m 님이 커널 관련 책 리뷰를 하시고 추천 순서를 적어두었다. 참고하면 좋을 것이다.
BLOG
1. 문c 블로그
문영일 님이 운영하시는 블로그다. 현재 국내 커널 관련 블로그 중에서 가장 많은 내용, 그리고 가장 최신의 내용들이 올라오고 있는 곳이다.
꾸준히 둘러보면 도움이 될 사이트다. 최신 버전의 커널도 분석해서 올리시고 그림과 함께 자세한 설명이 있어 이해하기 정말 좋다.
2. Arm Linux Kernel Hacks
내가 현재 공부하고 있는 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책의 저자 분인 김동현 님이 운영하고 계시는 블로그다. 이 책을 접하지 못했더라면 아마 시작하는 데 지금보다 더 오랜 시간이 걸리지 않았을까 하는 생각이 든다.
초보자들이 기초적인 수준부터 정보를 얻기에 좋은 블로그다.
3. pr0gr4m 님의 블로그
내가 알고 있는 20대 커널 컨트리부터 중 단연 최고다.
이 분이 이루고 계신 걸 보면 자극이 많이 된다. 언젠가 같이 토론할 수 있는 날이 오면 좋겠다. ㅎㅎ
4. hyeyoo 님의 블로그
어린 나이에도 불구하고 커널 공부를 정말 열심히 하신다.
이 분이랑도 꼭 교류를 하면서 지내고 싶다.