참고자료 (References)

리눅스 커널 학습과 개발에 유용한 공식 문서, 도서, 온라인 강좌, 커뮤니티, 소스 탐색 도구, 컨퍼런스, 개발 환경을 종합 정리합니다.

팁: 커널 개발을 처음 시작한다면 공식 문서온라인 강좌 섹션부터 살펴보세요. 이미 개발 경험이 있다면 커뮤니티소스 코드 탐색 도구가 실무에 큰 도움이 됩니다.

공식 문서 (Official Documentation)

리눅스 커널 개발의 가장 권위 있는 1차 자료들이다. 커널 소스 트리 내 문서와 커널 커뮤니티가 직접 운영하는 사이트를 우선적으로 참조하는 것이 좋다.

kernel.org

리눅스 커널의 공식 홈페이지. 최신 안정 버전, LTS 버전, 릴리스 노트, 소스 타볼 등을 제공한다. Git 저장소(git.kernel.org)에서 전체 커널 소스 히스토리를 확인할 수 있다.

커널 소스 내 문서 (Documentation/)

커널 소스 트리의 Documentation/ 디렉토리는 가장 정확하고 최신인 기술 문서를 포함한다. RST(reStructuredText) 형식으로 작성되어 make htmldocs로 HTML 빌드가 가능하다.

# 커널 소스에서 HTML 문서 빌드
make htmldocs
# Documentation/output/에 HTML 생성

LWN.net

리눅스 커널 개발 뉴스와 심층 기술 기사를 제공하는 사이트. 커널 메인테이너와 개발자들이 직접 기고하며, 새로운 커널 기능의 설계 배경과 기술적 논의를 상세히 다룬다.

man-pages 프로젝트

리눅스 시스템 콜, C 라이브러리 함수, 커널 인터페이스의 공식 매뉴얼 페이지. 시스템 콜의 정확한 시맨틱, 에러 코드, 주의사항을 확인할 때 필수적이다.

추천 도서 (Recommended Books)

커널 내부 구조를 체계적으로 학습하기 위한 핵심 도서들이다. 커널 버전에 따라 세부 구현이 달라질 수 있으므로, 최신 소스 코드와 함께 읽는 것을 권장한다.

Linux Kernel Development (LKD)

저자: Robert Love
추천 대상: 커널 입문~중급
커널의 주요 서브시스템(프로세스, 스케줄링, 메모리, VFS, 동기화)을 명확하게 설명한다. 커널 개발 입문서로 가장 널리 추천되며, 핵심 개념을 빠르게 파악하기에 적합하다.

Understanding the Linux Kernel (ULK)

저자: Daniel P. Bovet, Marco Cesati
추천 대상: 중급~고급
커널 내부 구현을 소스 코드 수준에서 상세히 분석한다. 메모리 관리, 프로세스 스케줄링, 파일시스템, 시그널 등을 깊이 있게 다루며, x86 아키텍처 기반으로 설명한다.

Linux Device Drivers (LDD3)

저자: Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
추천 대상: 드라이버 개발자
커널 모듈과 디바이스 드라이버 개발의 표준 참고서. 3판은 온라인에서 무료로 읽을 수 있다. 커널 2.6 기준이지만 드라이버 개발의 기본 원리는 여전히 유효하다.

Professional Linux Kernel Architecture (PLKA)

저자: Wolfgang Mauerer
추천 대상: 중급~고급
프로세스 관리, 메모리 관리, VFS, 네트워킹, 모듈 등을 광범위하게 다루는 종합 참고서. 1,300페이지 이상의 방대한 분량으로 커널 내부를 깊이 파헤친다.

Linux Networking / TCP-IP 관련

기타 유용한 도서

온라인 강좌 & 튜토리얼 (Online Courses & Tutorials)

무료로 접근 가능한 양질의 온라인 학습 자료들이다.

Bootlin 교육 자료

Bootlin(구 Free Electrons)은 임베디드 리눅스와 커널 교육 전문 기업으로, 교육 자료를 무료로 공개하고 있다.

kernelnewbies.org

커널 개발 입문자를 위한 커뮤니티 사이트. 커널 빌드 방법, 첫 패치 제출 가이드, 릴리스별 변경사항 요약 등을 제공한다.

The Linux Kernel Module Programming Guide

커널 모듈 프로그래밍을 단계별로 설명하는 무료 온라인 가이드. Hello World 모듈부터 /proc 파일, 디바이스 드라이버, 시스템 콜 후킹까지 실습 중심으로 학습할 수 있다.

linux-insides

커널 부팅 과정, 인터럽트, 메모리 관리, 동기화 등을 소스 코드 수준에서 분석하는 오픈소스 온라인 도서.

Eudyptula Challenge (과거 자료)

단계별 커널 개발 과제를 통해 실력을 키우는 프로그램이었다. 현재는 운영되지 않지만, 과제 내용이 커널 개발 실습에 좋은 참고가 된다.

소스 코드 탐색 (Source Code Browsing)

커널 소스 코드를 효율적으로 탐색하고 참조하기 위한 도구들이다.

Bootlin Elixir Cross Referencer

웹 브라우저에서 커널 소스를 탐색할 수 있는 가장 인기 있는 도구. 심볼 정의/참조 추적, 버전별 소스 비교, 파일 검색 등을 지원한다.

Linux Cross Reference (LXR)

커널 소스의 크로스 레퍼런스 도구. Elixir와 유사한 기능을 제공한다.

로컬 소스 탐색 도구

대규모 커널 소스를 로컬에서 효율적으로 탐색하기 위한 도구들:

# cscope 데이터베이스 생성 (커널 소스 루트에서)
make cscope

# ctags 태그 파일 생성
make tags

# 커널 전용 compile_commands.json 생성 (clangd용)
scripts/clang-tools/gen_compile_commands.py

커널 Git 활용

커널 소스의 변경 이력을 추적하고 분석하는 데 Git은 필수 도구다.

# 특정 함수의 변경 이력 추적
git log -p -S 'function_name' -- path/to/file.c

# 특정 라인 범위의 blame (누가 언제 수정했는지)
git blame -L 100,200 kernel/sched/core.c

# 특정 커밋이 도입된 버전 태그 찾기
git describe --contains <commit-hash>

# 버그를 도입한 커밋 이진 탐색
git bisect start
git bisect bad    # 현재 버전이 깨진 상태
git bisect good v6.1  # 이 버전은 정상

커뮤니티 & 메일링 리스트 (Community & Mailing Lists)

커널 개발은 메일링 리스트 중심의 협업 문화를 갖고 있다. 관련 메일링 리스트를 구독하고 논의를 따라가는 것이 실력 향상에 매우 효과적이다.

LKML (Linux Kernel Mailing List)

리눅스 커널 개발의 중심 메일링 리스트. 패치 제출, 코드 리뷰, 기술 논의가 이루어진다.

서브시스템별 메일링 리스트

각 서브시스템은 전담 메일링 리스트를 운영한다. MAINTAINERS 파일에서 담당 메인테이너와 메일링 리스트를 확인할 수 있다.

# 특정 파일의 메인테이너와 메일링 리스트 확인
scripts/get_maintainer.pl -f drivers/net/ethernet/intel/e1000e/netdev.c

Patchwork

메일링 리스트에 제출된 패치의 상태를 추적하는 웹 도구. 패치가 적용되었는지, 리뷰 중인지 등을 확인할 수 있다.

IRC / Matrix

실시간 소통 채널. OFTC IRC 네트워크의 #kernelnewbies 채널은 입문자에게 유용하다. 최근에는 Matrix 브릿지도 제공된다.

커널 버그 추적

컨퍼런스 & 발표 (Conferences & Talks)

커널 개발자들이 최신 기술과 설계 결정을 공유하는 주요 컨퍼런스들이다. 대부분의 발표 영상이 YouTube에 공개되어 있어 무료로 시청할 수 있다.

Linux Plumbers Conference (LPC)

커널 및 저수준 리눅스 인프라 개발자들의 기술 컨퍼런스. 네트워킹, 스토리지, 보안, 컨테이너 등 서브시스템별 마이크로컨퍼런스가 진행된다.

Kernel Summit / Maintainer Summit

커널 메인테이너들이 모여 개발 프로세스와 기술적 방향을 논의하는 연례 모임. LPC와 함께 개최되는 경우가 많다.

FOSDEM

매년 2월 브뤼셀에서 열리는 대규모 오픈소스 컨퍼런스. 커널 관련 트랙과 devroom이 운영되며, 모든 발표가 무료로 공개된다.

Open Source Summit

Linux Foundation이 주관하는 오픈소스 종합 컨퍼런스. Embedded Linux Conference, LinuxCon 등이 통합되어 운영되며, 커널 관련 세션이 다수 포함된다.

발표 영상 & 슬라이드

개발 도구 & 환경 (Development Tools & Environment)

커널 개발, 빌드, 테스트, 디버깅에 필요한 핵심 도구들이다. 자세한 사용법은 개발 도구 페이지를 참고하라.

QEMU / KVM

커널 개발과 테스트에 가장 널리 사용되는 가상화 환경. 실제 하드웨어 없이 커널을 부팅하고 디버깅할 수 있다.

# QEMU로 커널 직접 부팅 (디스크 이미지 없이)
qemu-system-x86_64 \
    -kernel arch/x86/boot/bzImage \
    -initrd rootfs.cpio.gz \
    -append "console=ttyS0" \
    -nographic -m 512M

# virtme-ng로 현재 커널 빠르게 테스트
vng --build --run

Buildroot / Yocto

커널 테스트용 루트 파일시스템을 빌드하는 도구. Buildroot는 간단한 테스트 환경에, Yocto는 프로덕션급 임베디드 시스템에 적합하다.

정적 분석 도구

# sparse로 정적 분석
make C=1 drivers/net/

# checkpatch로 패치 스타일 검사
scripts/checkpatch.pl --strict my-patch.patch

디버깅 도구

자세한 내용은 디버깅 페이지를 참고하라.

테스트 프레임워크

표준 & 규격 (Standards & Specifications)

리눅스 커널 개발에서 참조하는 주요 산업 표준과 규격을 카테고리별로 정리합니다. 커널은 수많은 하드웨어 사양과 프로토콜 표준을 구현하며, 관련 표준 문서를 함께 읽으면 커널 코드의 설계 의도를 보다 깊이 이해할 수 있습니다.

네트워킹 (Networking)

규격명발행 기관설명관련 페이지
RFC 791IETFIPv4 프로토콜 명세 — 패킷 구조, 단편화, 라우팅네트워크 스택, 라우팅
RFC 8200IETFIPv6 프로토콜 명세 — 128비트 주소, 확장 헤더, Flow Label네트워크 스택, 라우팅
RFC 793IETFTCP 프로토콜 — 3-way 핸드셰이크, 흐름 제어, 재전송네트워크 스택, Netfilter
RFC 768IETFUDP 프로토콜 — 비연결 데이터그램 전송네트워크 스택
RFC 826IETFARP (Address Resolution Protocol) — IPv4 → MAC 주소 변환네트워크 스택
RFC 4291IETFIPv6 주소 체계 — 주소 형식, 스코프, 유니캐스트/멀티캐스트라우팅
RFC 4861IETFNDP (Neighbor Discovery Protocol) — IPv6 이웃 탐색라우팅
RFC 1918IETF사설 IP 주소 대역 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)NAT
RFC 4787IETFNAT UDP 동작 요구사항 — Endpoint-Independent Mapping 등NAT
RFC 6888IETFCGN(Carrier-Grade NAT) 요구사항NAT
RFC 7413IETFTCP Fast Open — SYN 패킷에 데이터 포함하여 지연 감소네트워크 스택
RFC 3168IETFECN (Explicit Congestion Notification) — 명시적 혼잡 알림Netfilter
IEEE 802.3IEEE이더넷 표준 — 프레임 구조, MAC, PHY, 속도별 규격sk_buff, BPF/XDP
IEEE 802.1QIEEEVLAN 태깅 — 가상 LAN 프레임 분리네트워크 스택

플랫폼 & 부팅 (Platform & Boot)

규격명발행 기관설명관련 페이지
UEFI Specification 2.10UEFI Forum통합 확장 펌웨어 인터페이스 — 부팅 서비스, 런타임 서비스, Secure BootUEFI, 부팅 과정, Secure Boot
ACPI Specification 6.5UEFI Forum고급 구성 및 전원 인터페이스 — DSDT/SSDT, 전원 상태, 핫플러그ACPI, 부팅 과정, 전원 관리
Intel SDM (Software Developer's Manual)Intelx86/x64 아키텍처 전체 레퍼런스 — 명령어, 메모리, 인터럽트, 가상화커널 아키텍처, 메모리 관리
ARM Architecture Reference Manual (ARM ARM)ARMAArch64 아키텍처 레퍼런스 — 예외 레벨, 메모리 모델, NEON/SVE커널 아키텍처, 메모리 관리
Multiboot SpecificationGNU/FSF부트로더 ↔ 커널 인터페이스 표준 (GRUB 등)부팅 과정
GPT (GUID Partition Table)UEFI ForumUEFI 기반 디스크 파티션 테이블 형식디스크 파티션, UEFI
Device Tree Specificationdevicetree.org하드웨어 구성 기술 형식 — ARM/RISC-V 플랫폼의 디바이스 열거디바이스 드라이버

POSIX & ABI

규격명발행 기관설명관련 페이지
POSIX.1-2017 (IEEE Std 1003.1)IEEE/The Open GroupUNIX 호환 OS 표준 — 시스템 콜, 시그널, IPC, 파일 시맨틱시스템 콜, 프로세스, VFS, IPC
System V ABISCO/AT&TUNIX 호출 규약 — 공유 라이브러리, ELF 적재, IPC 시맨틱프로세스, 시스템 콜
ELF (Executable and Linkable Format)TIS Committee실행 파일/공유 라이브러리/코어 덤프의 표준 바이너리 형식프로세스
DWARF Debugging FormatDWARF Committee디버그 정보 표준 — GDB, ftrace 등에서 사용디버깅

메모리 & DMA (Memory & DMA)

규격명발행 기관설명관련 페이지
Intel VT-d (Virtualization Technology for Directed I/O)IntelIOMMU 사양 — DMA 리매핑, 인터럽트 리매핑DMA 심화, 메모리 심화
AMD-Vi (AMD I/O Virtualization Technology)AMDAMD IOMMU 사양 — DMA/인터럽트 가상화DMA 심화, 메모리 심화
JEDEC DDR5 SDRAM (JESD79-5)JEDECDDR5 메모리 타이밍, 전압, 채널 구조 사양메모리 관리, NUMA
CXL Specification 3.1CXL ConsortiumCompute Express Link — CPU-디바이스 간 캐시 일관성 인터커넥트NUMA, PCI/PCIe

동기화 & 메모리 모델 (Synchronization & Memory Model)

규격명발행 기관설명관련 페이지
C11 Memory Model (ISO/IEC 9899:2011)ISO/IECC 언어 원자적 연산 및 메모리 순서(memory order) 정의동기화, Atomic
C++11 Memory Model (ISO/IEC 14882:2011)ISO/IECC++ 원자적 연산, acquire/release 시맨틱Atomic
LKMM (Linux Kernel Memory Model)Linux Community리눅스 커널 자체 메모리 모델 — C11보다 강한 보장, herd7 검증 도구동기화, RCU, Atomic

파일시스템 (Filesystem)

규격명발행 기관설명관련 페이지
POSIX 파일 시맨틱 (IEEE Std 1003.1)IEEE/The Open Group파일 I/O, 디렉토리, 퍼미션, 심볼릭 링크의 동작 규약VFS, inode, ext4
ext4 Documentation (kernel.org)Linux Communityext4 디스크 레이아웃, 저널링, extents, 기능 플래그 문서ext4
FUSE Protocol (kernel.org)Linux Community사용자 공간 파일시스템 프로토콜 — 커널 ↔ 사용자 메시지 형식FUSE

디바이스 (Devices)

규격명발행 기관설명관련 페이지
PCI Local Bus Specification 3.0PCI-SIGPCI 버스 아키텍처 — 설정 공간, BAR, 인터럽트PCI/PCIe
PCI Express Base Specification 6.0PCI-SIGPCIe 직렬 인터커넥트 — 레인, 속도(64 GT/s), TLP, DLLPPCI/PCIe, GPU
DisplayPort 2.1VESA디스플레이 인터페이스 — 고해상도, MST, DSCGPU
HDMI 2.1HDMI Forum멀티미디어 인터페이스 — 4K/8K, eARC, VRR, ALLMGPU
E-EDID (Enhanced Extended Display Identification Data)VESA디스플레이 정보 교환 — 해상도, 주사율, HDR 메타데이터GPU

컨테이너 & 가상화 (Containers & Virtualization)

규격명발행 기관설명관련 페이지
OCI Runtime Specification 1.0OCI (Open Container Initiative)컨테이너 런타임 표준 — 네임스페이스, cgroups, seccomp 프로파일Linux Containers, 네임스페이스, cgroups
OCI Image Format SpecificationOCI컨테이너 이미지 형식 — 레이어, 매니페스트, 설정Linux Containers
Intel VT-x (Virtualization Technology)IntelCPU 하드웨어 가상화 — VMX, VMCS, EPT, VPID가상화 (KVM)
AMD-V (AMD Virtualization)AMDAMD CPU 가상화 — SVM, VMCB, NPT, AVIC가상화 (KVM)
virtio Specification 1.2OASIS가상 I/O 디바이스 표준 — virtqueue, vring, 디바이스 타입가상화 (KVM)

보안 & 암호화 (Security & Cryptography)

규격명발행 기관설명관련 페이지
FIPS 140-3NIST암호 모듈 보안 요구사항 — 커널 Crypto API 인증 기준Crypto API, Secure Boot
FIPS 197 (AES)NISTAES 블록 암호 표준 — 128/192/256비트 키Crypto API
FIPS 180-4 (SHA)NISTSHA-1/SHA-224/SHA-256/SHA-384/SHA-512 해시 알고리즘Crypto API
FIPS 198-1 (HMAC)NIST해시 기반 메시지 인증 코드Crypto API
NIST SP 800-38A~FNIST블록 암호 운용 모드 — CBC, CTR, GCM, CCM, XTS 등Crypto API
ISO/IEC 15408 (Common Criteria)ISO/IECIT 보안 평가 기준 — EAL 등급, 보안 기능 요구사항커널 보안
TPM 2.0 Library SpecificationTCG신뢰 플랫폼 모듈 — 보안 부팅, 키 저장, 원격 증명Secure Boot
X.509 (ITU-T / RFC 5280)ITU-T / IETF공개키 인증서 형식 — 모듈 서명, Secure Boot 인증서 체인Secure Boot, 커널 보안

스토리지 (Storage)

규격명발행 기관설명관련 페이지
NVMe Specification 2.0NVM ExpressNVMe 인터페이스 — 커맨드 세트, 큐 구조, 네임스페이스Block I/O, io_uring
SCSI Architecture Model (SAM-6)T10 (INCITS)SCSI 명령 아키텍처 — 명령 집합, 태스크 관리, 전송 프로토콜Block I/O
ATA/ATAPI Command Set (ACS-4)T13 (INCITS)ATA 디스크 명령 세트 — SATA, NCQ, TRIMBlock I/O

타이머 & 클럭 (Timers & Clocks)

규격명발행 기관설명관련 페이지
IEEE 1588 (PTP)IEEE정밀 시간 프로토콜 — 나노초 수준 네트워크 시간 동기화타이머, ktime/Clock
ACPI Power States (C-states, P-states)UEFI ForumCPU/디바이스 전원 상태 정의 — C0~Cn, P0~Pn전원 관리, 타이머

CPU & ISA (CPU & Instruction Set Architecture)

규격명발행 기관설명관련 페이지
Intel SDM Vol.3 (System Programming Guide)Intel보호 모드, 페이징, 인터럽트, 가상화(VMX), 전원 관리CPU 토폴로지, CPU 캐시, MSR
Intel SDM Vol.4 (MSR Reference)Intel모델 특화 레지스터(MSR) 전체 목록 및 비트 필드MSR
AMD Architecture Programmer's Manual (APM)AMDAMD64 아키텍처 — 명령어, 시스템 프로그래밍, MSRCPU 토폴로지, CPU 캐시, MSR
CPUID SpecificationIntel / AMDCPU 기능 식별 — 기능 플래그, 캐시 정보, 토폴로지 열거CPU 토폴로지

기타 ABI & Language

규격명발행 기관설명관련 페이지
System V AMD64 ABI (x86-64 ABI)AMD / communityx86-64 호출 규약 — 레지스터 용도, 스택 프레임, 시스템 콜 ABI어셈블리, 시스템 콜
ARM AAPCS (Procedure Call Standard)ARMARM/AArch64 함수 호출 규약 — 레지스터, 스택, 반환 값어셈블리
The Rust ReferenceRust ProjectRust 언어 명세 — 소유권, 수명, unsafe, FFIRust in Kernel