
FreeBSD 디바이스 드라이버 서적
첫걸음부터 커널 마스터까지
에드손 브란디 저 · 버전 2.0 (2026년 4월)
FreeBSD Device Drivers: From First Steps to Kernel Mastery는 무료 오픈소스 책으로, "커널 코드를 한 번도 작성해 본 적 없는" 상태에서 "프로덕션 품질의 FreeBSD 드라이버를 작성, 디버깅, 제출할 수 있는" 수준까지 안내합니다. 참고서라기보다는 안내 과정에 가까우며, 38개의 장, 6개의 부록, 그리고 실제 FreeBSD 14.x 시스템에서 컴파일되어 로드되는 수십 개의 실습 랩으로 구성되어 있습니다.
이 책은 이미 자격을 갖춘 독자보다는 배우려는 의지가 있는 독자를 대상으로 합니다. 유닉스 기초와 C 언어부터 시작하여, 커널이 요구하는 모든 개념을 단계별로 설명한 후에야 드라이버 개발의 문을 엽니다. DMA, 인터럽트, PCI 작업에 도달할 즈음에는 어휘가 강요된 것이 아니라 자연스럽게 습득된 느낌이 들 것입니다.
"커널 프로그래밍은 여전히 프로그래밍일 뿐이며, 단지 더 명시적인 규칙, 더 큰 책임, 그리고 약간 더 강력함을 가질 뿐입니다. 이것을 이해하면 두려움은 흥분으로 바뀝니다." (1장에서)
이미 훌륭한 FreeBSD 커널 참고 자료가 있습니다. man 9, 아키텍처 핸드북, Newbus 논문 등이 그 예입니다. 그러나 다음을 충족하는 단일 텍스트는 없었습니다:
myfirst 드라이버는 장을 거듭하며 진화하여 동기화, 하드웨어 접근, 인터럽트, DMA를 차례로 획득합니다. 여러분이 직접 동일한 코드가 성숙해가는 모습을 보게 됩니다.이 책은 서로를 기반으로 하는 일곱 개의 파트로 구성되어 있습니다:
마지막까지 마치면 직접 커널 모듈을 작성하여 로드하고, 문자 드라이버를 구축하고, 실제 인터럽트와 DMA를 처리하고, 커널 패닉을 디버깅하고, 부하에서 드라이버를 프로파일링하고, 작업을 FreeBSD 프로젝트에 기여하는 모든 단계를 경험하게 됩니다.
권장 속도는 주당 약 5시간 공부로 일주일에 한 장입니다. 이 일정을 따르면 한 학기 안에 책 전체를 마칠 수 있습니다. 일부 장(특히 C에 관한 4장과 파트 4의 하드웨어 장)은 자연스럽게 여러 주에 걸쳐 진행됩니다.
랩은 강력히 권장됩니다. 커널 프로그래밍은 근육 기억을 요구하는 분야가 거의 없을 정도로 중요합니다. 동일한 연결 패턴, 동일한 정리 체인, 동일한 잠금 형태가 장을 넘나들며 반복됩니다. 이러한 패턴을 직접 입력하고, 컴파일하고, 실행 중인 커널에 로드하고, 의도적으로 실패하는 모습을 지켜보는 것이 이를 내면화하는 가장 효과적인 방법입니다.
이미 C, 유닉스, 운영 체제 커널의 일반적인 구조를 알고 있다면 파트 1 전체에 걸쳐 제공되는 빠른 패스 노트가 어떤 부분을 주의 깊게 읽고 어떤 부분을 훑어봐도 되는지 알려줍니다.
버전 2.0은 이제 릴리스 페이지에서 세 가지 언어와 세 가지 형식으로 제공됩니다:
마크다운 소스는 content/ 디렉토리에서 직접 탐색하거나 scripts/build-book.sh 스크립트를 사용하여 책을 직접 빌드할 수도 있습니다.
영어 버전은 책의 원본이자 권위 있는 버전입니다. 브라질 포르투갈어 및 스페인어 판은 AI를 사용하여 번역되었으며 아직 완전한 인간 기술 검토를 거치지 않았습니다. 더 많은 독자들이 자료에 접근할 수 있도록 게시되었지만, 번역 과정에서 발생한 오역, 어색한 표현, 기술적 부정확성이 있을 수 있습니다.
번역판에서 명확하지 않거나 일관성이 없거나 기술적으로 의심스러운 부분이 있으면 진실의 원천으로 영어 버전을 참조하십시오. 번역 검토 및 개선에 대한 도움은 환영합니다(아래 기여 참조).
이것은 매우 큰 책의 드래프트 릴리스입니다. 몇 가지 주의할 사항이 있습니다:
content/에서 해당 파일을 열어 깔끔한 버전을 확인하십시오.## Contributing
모든 종류의 기여를 환영합니다. 여기에는 FreeBSD 개발자와 학습자 모두의 수정, 설명, 새로운 예제, 번역, 리뷰가 포함됩니다.
### 기여 방법
- **콘텐츠:** 새 장(chapter) 추가, 기존 자료 개선
- **기술 리뷰:** FreeBSD 14.x 기준 정확성 검토
- **번역 리뷰:** AI 번역된 **pt_BR** 및 **es_ES** 판본 검토 및 개선 지원; 원어민으로 FreeBSD/커널 경험이 있는 분 특히 환영
- **새 번역:** 책을 다른 언어로 번역하는 데 도움
- **코드:** 예제, 빌드 스크립트, 도구 개선
- **이슈:** 버그, 사실 오류, 불명확한 구절, 포맷 문제 신고
### 이슈 보고
이슈를 제출할 때는 다음을 포함해 주세요:
- 읽고 있던 언어 버전(`en_US`, `pt_BR`, `es_ES`)
- 사용한 형식(PDF, EPUB, HTML, 또는 Markdown)
- 문제가 나타난 장(chapter) 또는 절(section)
- 문제에 대한 간단한 설명과, 있다면 제안하는 수정 사항
### 워크플로우
1. 저장소를 포크(fork)합니다
2. 브랜치를 생성합니다: `git checkout -b feature/your-change`
3. 변경 사항을 적용하고 `scripts/build-book.sh`로 빌드를 테스트합니다
4. 명확한 메시지로 커밋합니다: `git commit -m "Chapter 18: clarify BAR mapping"`
5. 푸시하고 Pull Request를 엽니다
책을 읽다가 막힐 때 **이슈를 제출하는 것이 도움이 됩니다.** 구절이 잘못되었거나 실습이 예상치 못하게 실패하는 경우, 모든 보고가 다음 독자의 길을 더 매끄럽게 만듭니다.
## 자주 묻는 질문
### 왜 이 책이 존재하나요?
정직한 답변은 FreeBSD 프로젝트에 새 기여자가 필요하고, 커널 및 드라이버 작업으로 가는 길이 항상 그래야 하는 것보다 가팔랐기 때문입니다. 대부분의 기존 자료는 이미 UNIX를 알고, C를 잘 알고, 버스가 무엇인지 알고, 커널 소스 트리를 읽는 방법을 알고 있다고 가정합니다. 그 방식은 이미 대부분의 길을 온 사람들에게는 효과적입니다. 시작하고 싶어하는 호기심 많은 개발자에게는 거의 도움이 되지 않습니다.
이 책의 목표는 그 진입로를 낮추는 것입니다. 소수의 독자라도 이 책을 완독하고 패치 제출, 코드 리뷰, 새 드라이버 작성, 나아가 FreeBSD 커미터(committer)가 되는 길로 나아간다면 이 책은 제 임무를 다한 것입니다. **차세대 FreeBSD 기여자를 양성하는 것이 이 저작이 쓰인 이유입니다.**
### 시작하기 전에 C를 알아야 하나요?
아닙니다. 4장과 5장은 기초부터 C를 가르치며, 커널 작업에 중요한 언어 부분(포인터, 구조체, 메모리 레이아웃, 전처리기, 호출 규약)에 초점을 맞춥니다. 이미 C를 잘 알고 있다면, 해당 장들에 있는 사이드바(sidebar)에서 무엇을 훑어보고 무엇을 주의 깊게 읽을지 알려줍니다.
### UNIX나 FreeBSD를 알아야 하나요?
아닙니다. 2장은 VM이나 실제 하드웨어에 FreeBSD를 설치하는 과정을 안내하고, 3장은 UNIX 명령줄, 파일 시스템, 프로세스, 권한, 편집기를 소개합니다. 1부를 마치면 작업용 랩(lab)과 이를 사용할 어휘를 갖추게 됩니다.
### 실제 하드웨어가 필요한가요?
책의 대부분은 아닙니다. FreeBSD 14.x를 실행하는 가상 머신으로도 기초, 첫 번째 드라이버 장, 동시성 및 동기화, 디버깅 자료의 상당 부분을 충분히 다룰 수 있습니다. 실제 하드웨어는 4부의 PCI, 인터럽트, DMA 장에 도달할 때 유용해집니다(그러나 여전히 엄격히 필수는 아닙니다). 해당 장들은 VM에서만 실행하더라도 개념이 이해되도록 작성되었습니다.
### 이 책이 리눅스 드라이버를 작성하는 데 도움이 되나요?
간접적으로는 그렇습니다. 커널 프로그래밍 규율(locking strategy, memory management, interrupt context, DMA mapping, sleeping과 non-sleeping 코드 경로의 차이, 방어적 정리 순서)은 매우 잘 전이됩니다. 구체적인 API는 다릅니다. 이 책을 읽은 후에는 리눅스 장치 모델을 알게 되지는 않지만, 그 문제와 해결책의 형태를 인식하게 되며, 리눅스 장치 드라이버(LDD)를 훨씬 더 쉽게 읽을 수 있습니다.
### 왜 구체적으로 FreeBSD 14.x인가요?
모든 API, 모든 예제, 모든 실습은 FreeBSD 14.3 소스 트리와 해당 `man 9` 페이지에서 실행되도록 계획되었습니다. 특정 릴리스를 대상으로 하면 함수 시그니처, 헤더 위치, 동작에 대해 정확할 수 있습니다. 개념은 14.x보다 몇 년 더 오래 갑니다. 정확한 줄 번호와 작은 API 세부 사항은 그렇지 않으며, 책은 이에 대해 솔직합니다.
### 이 책은 공식 FreeBSD 프로젝트 발행물인가요?
아닙니다. 이 책은 FreeBSD 장치 드라이버 개발에 관한 독립적인 교육용 서적입니다. FreeBSD 프로젝트의 공식 발행물이 아닙니다. 저자는 FreeBSD 커미터이자 문서 엔지니어링 팀(DocEng)의 구성원이지만, 책은 그의 작업과 의견을 반영하며 공식 프로젝트 입장이 아닙니다.
### 실제로 얼마나 오래 걸리나요?
주의 깊게 읽고 실습을 한다면 약 200시간의 총 작업 시간을 계획하세요. 이는 대략 100시간의 읽기와 100시간의 실습 시간입니다. 주당 5시간이면 약 6개월 저녁 프로젝트, 주당 10시간이면 집중적인 2개월 스프린트입니다. 실습 없이 읽기만 하면 시간은 대략 절반으로 줄지만 가치도 절반으로 줄어듭니다. 커널 프로그래밍은 거의 다른 분야가 그러하듯 근육 기억(muscle memory)을 보상합니다.
### 실습을 건너뛸 수 있나요?
가능은 하지만 아마 그러면 안 됩니다. 실습은 산문이 반사(reflex)가 되는 곳입니다. attach 순서, 정리 unwinding, 락 획득 패턴과 같은 패턴이 모든 장에서 반복되며, 이를 내면화하는 유일한 신뢰할 수 있는 방법은 직접 입력하고, 컴파일하고, 실행 중인 커널에 로드하고, 의도적으로 실패하는 것을 지켜보는 것입니다. 실습을 건너뛴 독자들은 처음에는 매끄럽게 진행되다가 3부 또는 4부쯤에서 조용히 정체되는 진행을 보고합니다.
### 이 책을 읽은 후 FreeBSD에 어떻게 기여할 수 있나요?
37장에서는 전체 제출 워크플로우를 다룹니다: 패치 준비 방법, Phabricator(FreeBSD 코드 리뷰 시스템) 사용 방법, 작업을 후원할 커미터 찾는 방법, 리뷰 피드백에 대응하는 방법, 드라이버를 트리에 안착시키는 방법. 앞 장들은 기술적 능력을 쌓고, 37장은 사회적 워크플로우를 쌓습니다. 둘 다 중요합니다.
### 책이 방대합니다. 어디서 시작해야 하나요?
특별한 이유가 없다면 1장부터 시작하세요. 책은 누적적입니다. 뒷장들은 앞서 확립된 어휘와 습관에 의존합니다. 이미 C, UNIX, OS 커널의 일반적인 형태를 알고 있다면, 1부 내 빠른 길 안내가 무엇을 훑어볼지 알려줍니다. 특정 하위 시스템(USB, 네트워킹, 스토리지, PCI) 때문에 여기 왔다면 1부와 2부를 주의 깊게 읽은 다음 뛰어넘어도 괜찮지만, 이전 장들의 용어가 다시 나타날 때 돌아와야 할 것을 예상하세요.
### 오류를 발견했습니다. 어떻게 해야 하나요?
GitHub에 이슈를 여세요. 언어 버전, 읽고 있던 형식, 장 또는 절, 문제에 대한 간단한 설명, 있다면 제안하는 수정 사항을 포함하세요. 모든 보고가 다음 독자의 경험을 개선합니다. pt_BR 및 es_ES 판의 번역 문제는 특히 환영합니다. 해당 판은 아직 완전한 인간 기술 리뷰를 거치지 않았기 때문입니다.
### 책이 정말 무료인가요?
네. MIT 라이선스로 배포됩니다. 읽고, 공유하고, 인쇄하고, 인용하고, 기반으로 구축하고, 번역할 수 있습니다. 개인적 사용에는 출처 표시가 필요하지 않지만 감사합니다. 이 작업을 지원하고 싶다면 가장 유용한 일은: 다른 사람들에게 책을 알리고, 문제를 발견하면 이슈를 제출하고, 리뷰나 번역에 기여하고, (결국 그곳으로 이끈다면) 자신의 작업을 FreeBSD 프로젝트에 제출하는 것입니다.
## 저자 소개
저는 Edson Brandi입니다. 기술로 가는 길은 전혀 전통적이지 않았습니다. 1995년 브라질의 Unicamp에서 화학을 전공하며 컴퓨터로 일할 계획은 없었지만, 한 가지 끈질긴 질문이 있었습니다: *이게 실제로 어떻게 작동하지?* 그 질문이 저를 FreeBSD로 이끌었고, FreeBSD는 그 이후로 제 경력을 형성했습니다.
그 후 몇 년 동안 저는 **브라질 FreeBSD 사용자 그룹(FUG-BR)** 을 창립하고, **FreeBSD LiveCD Tool Set**을 공동 창작했으며, 2002년에는 FreeBSD 교육, 컨설팅, 지원을 제공하는 **FreeBSD Brasil**을 공동 창립했으며, 이 회사는 오늘날에도 운영되고 있습니다. 저는 FreeBSD 커미터이며 현재 **FreeBSD 문서 엔지니어링 팀(DocEng)** 의 구성원으로서 FreeBSD의 문서를 전 세계에서 살아 있고 접근 가능하게 유지하는 시스템을 유지 관리하는 데 도움을 주고 있습니다.
전문적으로는 여러 산업에서 인프라 및 엔지니어링 리더십 역할을 수행해 왔으며, 현재 런던의 핀테크 회사에서 IT 디렉터로 재직 중입니다.
이 책을 쓴 이유는 다른 호기심 많은 사람들에게 제가 결코 가지지 못했던 진입로를 제공하고 싶었기 때문입니다. 커널 코드를 작성하는 데 컴퓨터 공학 학위는 필요하지 않습니다. 필요한 것은 호기심, 인내, 참을성, 그리고 여러분이 있는 곳에서 만나줄 안내자입니다.
Edson Brandi · [email protected]
## 라이선스
이 책과 그에 수반된 소스 코드는 **MIT 라이선스**로 배포됩니다. 전체 텍스트는 [LICENSE](https://github.com/ebrandi/fdd-book/blob/HEAD/LICENSE)를 참조하세요. 이 작업을 읽고, 공유하고, 기반으로 구축할 수 있습니다. 출처 표시는 감사히 여깁니다.
## 감사의 말
- FreeBSD 개발 커뮤니티
- 모든 기여자, 리뷰어, 번역가
- 이슈를 제기하거나 장을 개선한 질문을 한 모든 분들
## 링크
- **저장소:** https://github.com/ebrandi/FDD-book
- **이슈:** https://github.com/ebrandi/FDD-book/issues
- **토론:** https://github.com/ebrandi/FDD-book/discussions
- **저자:** Edson Brandi · [email protected]
---
<p align="center"><em>이 책이 도움이 된다면 저장소에 별표(star)를 눌러 주시고, 컴퓨터가 실제로 어떻게 작동하는지 궁금한 다른 사람과 공유해 주세요.</em></p>
| 파트 | 제목 | 주요 내용 |
|---|
| 1 | 기초: FreeBSD, C, 그리고 커널 | 랩 설정, 유닉스, 커널 작업을 위한 C, 드라이버 해부학 |
| 2 | 첫 번째 드라이버 구축 | 문자 드라이버, 장치 파일, 읽기/쓰기, 입출력 |
| 3 | 동시성 및 동기화 | 스레드, 뮤텍스, 조건 변수, 타이머, 태스크 큐, 세마포어 |
| 4 | 하드웨어 및 플랫폼 수준 통합 | PCI, 인터럽트, MSI/MSI-X, DMA, 전원 관리 |
| 5 | 디버깅, 도구, 실제 사례 | 트레이싱, KGDB, 고급 디버깅, 성능 튜닝 |
| 6 | 전송별 드라이버 작성 | USB, 직렬, 스토리지/VFS, 네트워크 드라이버 |
| 7 | 마스터리 주제: 특수 시나리오 및 에지 케이스 | 이식성, 가상화, 보안, 임베디드, 리버스 엔지니어링, 업스트림 제출 |
| 페이지 수 | 4,500+ |
| 장 | 38 |
| 부록 | 6 |
| 읽기 시간 | ~100시간 |
| 랩 시간 | ~100시간 |
| 총 학습 시간 | ~200시간 (주 5시간 기준 약 6개월) |
| 대상 FreeBSD 릴리스 | 14.3 |
| 언어 | 영어(원본) · 브라질 포르투갈어(AI 번역) · 스페인어(AI 번역) |
| 형식 | PDF · EPUB · HTML · 마크다운 소스 |
| 언어 | EPUB | HTML |
|---|
| 영어(원본) | EPUB | HTML | |
| 포르투갈어(브라질), AI 번역 | EPUB | HTML | |
| 스페인어, AI 번역 | EPUB | HTML |