참고자료 (References)

리눅스 커널 학습을 위한 공식 문서, 추천 도서, 온라인 강좌, 한국 커뮤니티, 소스 코드 탐색 도구, 컨퍼런스, 개발 환경, 표준 및 규격(RFC, IEEE, POSIX, FIPS, NIST) 종합 참고자료입니다.

전제 조건: 커널 아키텍처커널 개발 주의사항 문서를 먼저 읽으세요. 참고 문서는 문제 해결 중 빠르게 맥락을 확인하는 용도이므로, 기본 실행 모델을 알고 읽으면 활용 효율이 크게 올라갑니다.
일상 비유: 이 주제는 현장용 기술 핸드북과 비슷합니다. 작업 중 바로 펼쳐 보는 기준서처럼, 핵심 용어·배경·연결 문서를 짧은 경로로 확인하는 데 초점을 둡니다.

핵심 요약

  • 빠른 참조 — 용어, 배경, 관련 문서를 짧게 연결합니다.
  • 출처 신뢰성 — 공식 문서와 1차 자료를 우선 확인합니다.
  • 학습 경로 — 입문에서 고급까지 연결 순서를 제공합니다.
  • 맥락 보강 — 본문 문서와 교차 링크로 이해를 보완합니다.
  • 업데이트 관점 — 변경 가능성이 큰 정보는 주기적으로 점검합니다.

단계별 이해

  1. 키워드 확인
    필요한 개념을 먼저 정확한 용어로 찾습니다.
  2. 원문 확인
    공식 문서에서 정의와 예외를 확인합니다.
  3. 관련 문서 확장
    연결된 기술 문서로 범위를 넓힙니다.
  4. 실무 맥락 연결
    현재 문제와 직접 연결되는 부분만 추려 적용합니다.

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

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

학습 경로 로드맵 (Learning Roadmap)

리눅스 커널을 처음 접하는 학습자부터 커널 메인테이너를 지향하는 고급 개발자까지, 단계별로 어떤 자료를 어떤 순서로 학습하면 효과적인지 시각화한 로드맵입니다. 각 단계는 이전 단계의 지식을 전제로 하며, 화살표 방향으로 학습을 진행하면 됩니다.

커널 학습 로드맵 — 단계별 자료 가이드 1단계: 입문 C 언어 + POSIX 기초 - LKD (Robert Love) - kernelnewbies.org - LFD103 (무료 강좌) - LKMPG (모듈 가이드) - Bootlin 슬라이드 2단계: 중급 서브시스템 깊이 탐구 - ULK (Bovet & Cesati) - LWN.net 심층 기사 - docs.kernel.org - linux-insides - Elixir 소스 탐색 3단계: 고급 소스 분석 + 패치 기여 - PLKA (Mauerer) - LKML 패치 리뷰 - git bisect / blame - Kernel Recipes 발표 - syzkaller / KUnit 4단계 메인테이너 - LPC 참여 - RFC 패치 - 서브시스템 리뷰 참여 전 단계 공통 도구 QEMU/KVM GCC / Clang GDB ftrace / perf cscope / ctags checkpatch.pl Git (log/blame/bisect) ripgrep sparse / Coccinelle eBPF / bpftrace KUnit 항상 참조해야 하는 1차 자료 kernel.org 최신 소스, 릴리스 docs.kernel.org Documentation/ 렌더링 LWN.net 개발 뉴스, 심층 기사 lore.kernel.org 메일링 리스트 아카이브
학습 순서 안내: 로드맵은 권장 순서이지 필수 순서가 아닙니다. 관심 있는 서브시스템이 있다면 해당 영역의 Documentation/ 문서부터 시작하고, 모르는 개념이 나올 때마다 이전 단계 자료로 돌아가는 방식도 효과적입니다. 중요한 것은 항상 최신 소스 코드와 함께 읽는 것입니다.

공식 문서 (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 프로젝트

리눅스 시스템 콜(System Call), C 라이브러리 함수, 커널 인터페이스의 공식 매뉴얼 페이지(Page). 시스템 콜의 정확한 시맨틱, 에러 코드, 주의사항을 확인할 때 매우 유용합니다.

커널 Documentation/ 디렉토리 구조

커널 소스 트리의 Documentation/ 디렉토리는 수백 개의 하위 디렉토리로 구성됩니다. 아래 다이어그램은 가장 자주 참조하는 핵심 디렉토리와 그 역할을 보여줍니다.

Documentation/ 디렉토리 핵심 구조 Documentation/ process/ 코딩 스타일, 패치 제출, 메인테이너 가이드 admin-guide/ 커널 매개변수, sysctl, 시스템 관리, 보안 driver-api/ 디바이스 드라이버 API, DMA, GPIO, I2C, SPI mm/ 페이지 할당, 슬랩, vmalloc, hugepage, NUMA, OOM filesystems/ VFS, ext4, btrfs, XFS, proc, sysfs, tmpfs networking/ 소켓, TCP/IP, Netfilter, XDP, eBPF, NAPI arch/ 아키텍처별 문서: x86, arm64, riscv translations/ ko_KR, zh_CN, ja_JP, it_IT 등 다국어 번역 trace/ ftrace, tracepoint, kprobe, perf 이벤트 HTML 문서 빌드: make htmldocs 출력 경로: Documentation/output/ | 온라인 렌더링: docs.kernel.org

커널 문서는 RST(reStructuredText) 형식으로 작성되며, Sphinx 기반으로 빌드됩니다. 특정 서브시스템의 문서만 빌드하려면 다음과 같이 합니다.

# 전체 HTML 문서 빌드
make htmldocs

# 특정 서브시스템 문서만 빌드 (예: 네트워킹)
make SPHINXDIRS="networking" htmldocs

# PDF 형식으로 빌드
make pdfdocs

# 문서 빌드에 필요한 도구 설치 (Ubuntu/Debian)
sudo apt install python3-sphinx python3-sphinx-rtd-theme graphviz

# 특정 .rst 파일에서 특정 함수의 kerneldoc 주석 찾기
scripts/kernel-doc -function "kmalloc" include/linux/slab.h

kerneldoc 주석 규칙

커널 소스 코드에서 함수 위에 작성하는 /** ... */ 형식의 주석은 Sphinx 빌드 시 자동으로 API 문서로 변환됩니다. 이 규칙을 알면 커널 코드를 읽을 때 함수의 역할과 매개변수를 빠르게 파악할 수 있습니다.

/**
 * kmalloc - 커널 메모리 할당
 * @size: 할당할 바이트 수
 * @flags: GFP 플래그 (GFP_KERNEL, GFP_ATOMIC 등)
 *
 * 물리적으로 연속된 메모리를 할당한다.
 * 이 함수는 슬랩 할당자를 사용하며,
 * 할당 실패 시 NULL을 반환한다.
 *
 * Context: @flags에 GFP_KERNEL을 사용하면 슬립 가능.
 *          인터럽트 컨텍스트에서는 GFP_ATOMIC을 사용해야 한다.
 *
 * Return: 할당된 메모리의 포인터, 실패 시 NULL.
 */
static __always_inline void *kmalloc(size_t size, gfp_t flags)
{
    /* ... */
}
실전 활용: scripts/kernel-doc 스크립트로 로컬에서 특정 함수의 문서를 즉시 확인할 수 있습니다. scripts/kernel-doc -function 함수명 파일경로를 실행하면 kerneldoc 주석이 포맷팅되어 출력됩니다. 코드 리뷰 시 이 규칙에 맞지 않는 주석을 발견하면 패치를 제출할 기회이기도 합니다.

추천 도서 (Recommended Books)

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

핵심 도서 비교표

가장 많이 추천되는 커널 도서를 한눈에 비교합니다. 자신의 수준과 관심 분야에 맞는 도서를 선택하십시오.

도서저자대상 수준주요 범위장점주의사항
LKDRobert Love입문~중급프로세스, 스케줄링, 메모리, VFS, 동기화명확한 설명, 빠른 개요 파악3판 기준 (2.6.34)
ULKBovet & Cesati중급~고급소스 수준 내부 분석, x86 중심구현 상세 분석, 코드 참조3판 기준 (2.6.11)
LDD3Corbet, Rubini, Kroah-Hartman드라이버 개발모듈, 캐릭터/블록/네트워크 드라이버무료 온라인, 실습 중심2.6 기준, API 변경 많음
PLKAWolfgang Mauerer중급~고급전체 서브시스템 종합1,300+ 페이지 방대한 범위2.6.24 기준
BPF Perf ToolsBrendan Gregg중급~고급eBPF, bpftrace, BCC, 성능 분석실전 도구 수백 개 수록eBPF 특화, 커널 전반 아님
TLPIMichael Kerrisk입문~중급시스템 콜, POSIX API 전체시스템 콜 백과사전커널 내부보다 인터페이스 중심
커널 버전 주의: 위 도서들은 대부분 커널 2.6~3.x 시대에 출판되었습니다. 커널 6.x에서는 스케줄러(EEVDF 도입), 메모리 관리(folio 전환), 드라이버 API(devm_ 패턴 확산) 등 많은 부분이 변경되었으므로, 반드시 최신 Documentation/과 소스 코드를 함께 참고하십시오. 도서는 개념과 설계 원칙을 파악하는 데 활용하고, 구현 세부사항은 소스를 기준으로 삼아야 합니다.

Linux Kernel Development (LKD)

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

Understanding the Linux Kernel (ULK)

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

Linux Device Drivers (LDD3)

저자: Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
추천 대상: 드라이버 개발자
커널 모듈(Kernel Module)과 디바이스 드라이버 개발의 표준 참고서. 3판은 온라인에서 무료로 읽을 수 있습니다. 커널 2.6 기준이며 4판은 미출판 상태이므로, 최신 드라이버 API는 Documentation/driver-api/로 보완해서 읽기를 권장합니다.

Professional Linux Kernel Architecture (PLKA)

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

Linux Networking / TCP-IP 관련

eBPF & 성능 분석 도서

2019년 이후 최신 도서

기타 유용한 도서

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

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

Bootlin 교육 자료

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

kernelnewbies.org

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

The Linux Kernel Module Programming Guide

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

linux-insides

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

Linux Foundation 공식 강좌

Linux Foundation이 운영하는 커널 개발 공인 강좌. 일부 강좌는 무료로 제공됩니다.

eBPF 학습 자료

최근 커널 개발의 핵심 기술인 eBPF를 집중적으로 다루는 자료들입니다.

Rust for Linux 학습 자료

커널에 Rust 코드를 기여하거나 이해하기 위한 자료들입니다.

Eudyptula Challenge & 대안 실습 프로젝트

단계별 커널 개발 과제를 통해 실력을 키우는 프로그램이었습니다. 현재는 운영되지 않지만, 아카이브와 대안 프로젝트가 남아있습니다.

소스 코드 탐색 (Source Code Browsing)

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

Bootlin Elixir Cross Referencer

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

# 예: task_struct 정의 위치 확인 (latest 소스)
# https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h
# 함수명 클릭 → "Referenced in N files" 에서 사용처 전체 추적
# 버전 선택 드롭다운 → 커널 버전별 구현 비교 가능

Linux Cross Reference (LXR)

커널 소스의 크로스 레퍼런스 도구. 2016년 이후 사실상 업데이트가 중단되었으며, 현재는 Elixir로 대체 권장합니다.

OpenGrok

Sun(현 Oracle)이 개발한 강력한 소스 코드 검색/탐색 도구. 전체 텍스트 검색, 정규식, 파일 경로 필터, 히스토리 조회를 지원합니다.

GitHub 미러

Linus Torvalds의 공식 GitHub 미러. PR은 불가능하지만 코드 검색과 브라우저 탐색 편의가 높습니다.

로컬 소스 탐색 도구

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

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

# ctags 태그 파일 생성
make tags

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

# ripgrep으로 구조체 사용처 빠르게 검색
rg -t c 'task_struct' include/

# Bear로 compile_commands.json 생성 (gen_compile_commands.py 대안)
bear -- make -j$(nproc)

커널 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)

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

패치 제출 워크플로

커널에 코드를 기여하는 전체 과정을 이해하면, 메일링 리스트와 커뮤니티 도구의 역할이 명확해집니다. 아래는 첫 패치 제출부터 머지까지의 표준 워크플로입니다.

커널 패치 제출 워크플로 1. 코드 수정 버그 수정/기능 추가 2. 스타일 검사 checkpatch.pl 3. 메인테이너 get_maintainer.pl 4. git send-email 패치를 ML에 전송 5. 코드 리뷰 리뷰어 피드백 6. 머지 -next → mainline 수정 요청 시 v2, v3... 재제출 핵심 명령어 요약 git commit -s Signed-off-by 추가 scripts/checkpatch.pl 코딩 스타일 검사 scripts/get_maintainer.pl 담당자/ML 확인 git send-email 패치 이메일 전송 git format-patch b4 prep / b4 send git log --oneline
# 1. 코드 수정 후 커밋 (Signed-off-by 필수)
git add drivers/net/ethernet/intel/e1000e/netdev.c
git commit -s -m "e1000e: fix null pointer dereference in e1000_clean_rx_irq

Check for NULL skb before accessing skb->data to prevent
kernel oops when allocation fails under memory pressure.

Fixes: a1234b5c6d78 (\"e1000e: add support for rx buffer recycling\")
Cc: stable@vger.kernel.org"

# 2. checkpatch로 코딩 스타일 검사
scripts/checkpatch.pl --strict -g HEAD

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

# 4. 패치 파일 생성 (커버 레터 포함)
git format-patch -1 --cover-letter -o /tmp/patches/

# 5. 패치 이메일 전송
git send-email \
    --to="maintainer@kernel.org" \
    --cc="netdev@vger.kernel.org" \
    /tmp/patches/*.patch

# 대안: b4 도구 사용 (최신 워크플로)
b4 prep -n "fix-e1000e-null-deref"
b4 send
커밋 메시지 규칙: 커널 커밋 메시지는 서브시스템: 요약 형식을 따릅니다. 50자 이내의 제목 줄, 빈 줄, 상세 설명, 그리고 Signed-off-by:, Fixes:, Cc: 태그를 포함합니다. Documentation/process/submitting-patches.rst에서 전체 규칙을 확인할 수 있습니다.

LKML (Linux Kernel Mailing List)

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

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

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

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

Patchwork

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

IRC / Matrix

실시간(Real-time) 소통 채널. OFTC IRC 네트워크의 #kernelnewbies 채널은 입문자에게 유용합니다. 최근에는 Matrix 브릿지도 제공됩니다.

커널 버그 추적

한국 커뮤니티 & 참고자료 (Korean Communities & Resources)

한국에서 활동하는 리눅스 커널 커뮤니티와 한국어로 작성된 참고 자료들입니다. 영어 원문이 최신이고 정확하지만, 학습 초기 단계나 개념 이해에는 한국어 자료가 큰 도움이 됩니다.

주의: 한국어 자료는 커널 버전 업데이트가 느릴 수 있으므로, 항상 현재 커널 버전과 비교하며 학습하는 것을 권장합니다. 의심스러운 내용은 공식 문서나 최신 소스 코드로 확인하십시오.

커뮤니티 & 포럼

KLDP (Korean Linux Documentation Project)

한국 리눅스 커뮤니티의 오랜 역사를 가진 사이트. 커널 관련 질문/답변, 기술 토론, 번역 자료를 제공합니다. 과거 활발했던 게시판 아카이브에 유용한 정보가 많이 남아있습니다.

리눅스 커뮤니티 (소셜 미디어)

활발한 실시간 토론과 질의응답이 이루어지는 한국 커뮤니티들:

GitHub 스터디 저장소

한국 개발자들이 운영하는 커널 학습 저장소:

한국어 문서 & 번역

커널 공식 문서 한국어 번역

리눅스 커널 소스 트리 내 Documentation/translations/ko_KR/ 디렉토리에 한국어 번역 문서가 포함되어 있습니다. 커뮤니티 기여자들이 지속적으로 번역 중입니다.

# 한국어 번역 문서 위치
ls Documentation/translations/ko_KR/

# 주요 번역 문서:
# - process/ (개발 프로세스, 코딩 스타일)
# - howto.rst (커널 개발 방법)
# - memory-barriers.txt (메모리 배리어)

한국어 도서

개발자 블로그

한국 개발자들이 운영하는 기술 블로그. 커널 내부 구조, 디버깅(Debugging) 기법, 실무 경험을 상세히 공유합니다.

커널 분석 블로그

기업 기술 블로그

학술 자료 & 연구실

한국 컨퍼런스 & 행사

한국 자료 활용 팁

효과적인 학습 방법:
  1. 개념 이해: 처음에는 한국어 자료로 큰 그림 파악
  2. 정확성 확인: 공식 문서(kernel.org)와 최신 소스 코드로 검증
  3. 실습 병행: 블로그 예제를 현재 커널 버전에 맞춰 수정하며 학습
  4. 커뮤니티 참여: 막히는 부분은 한국 커뮤니티에 질문하여 빠르게 해결
주의사항:
  • 오래된 블로그 글은 커널 2.6/3.x 기반일 수 있습니다 — 현재 6.x 버전과 API가 다를 수 있음
  • 번역서는 원서보다 1~2년 늦게 출판되므로 최신 기능 누락 가능
  • 의심스러운 내용은 반드시 Documentation/ 또는 소스 코드로 재확인

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

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

Linux Plumbers Conference (LPC)

커널 및 저수준 리눅스 인프라 개발자들의 기술 컨퍼런스. 네트워킹, 스토리지, 보안, 컨테이너(Container) 등 서브시스템별 마이크로컨퍼런스가 진행됩니다. 이전 발표 슬라이드와 영상 아카이브는 공식 사이트에서 확인할 수 있습니다.

Kernel Summit / Maintainer Summit

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

FOSDEM

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

Open Source Summit

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

Embedded Linux Conference (ELC)

Linux Foundation 주관의 임베디드/IoT 커널 개발 전문 컨퍼런스. 드라이버 개발, Device Tree, 실시간 커널, 부트 최적화 등 임베디드 특화 세션이 집중적으로 다뤄집니다. Open Source Summit와 함께 개최되는 경우가 많습니다.

X.Org Developers Conference (XDC)

GPU 드라이버, DRM/KMS, Wayland/X11 컴포지터 개발자를 위한 컨퍼런스. 커널 그래픽스 서브시스템(DRM, KMS, GEM, TTM)의 최신 동향을 파악하는 데 유용합니다.

Kernel Recipes

프랑스 파리에서 개최되는 소규모 고밀도 커널 컨퍼런스. 참가 인원을 제한하여 커널 개발자들 간의 깊은 기술 논의에 집중합니다. 모든 발표 영상을 YouTube와 공식 사이트에서 무료 공개합니다.

발표 영상 YouTube 채널 & 검색 팁

발표 자료 찾는 팁: YouTube 검색창에 컨퍼런스명 + 주제어를 입력하면 원하는 발표를 빠르게 찾을 수 있습니다. 예: LPC 2023 BPF, FOSDEM 2024 scheduler, Kernel Recipes memory. 슬라이드 PDF는 각 컨퍼런스 공식 사이트의 연도별 아카이브 페이지에서 별도 제공됩니다.

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

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

GNU 도구체인 (GNU Toolchain)

리눅스 커널 빌드와 디버깅에 필수적인 GNU 도구들입니다. 각 도구의 공식 문서는 gnu.org에서 제공됩니다.

# GCC 버전 확인 (커널 빌드 최소 요구 버전 체크)
gcc --version

# objdump로 커널 함수 역어셈블
objdump -d vmlinux | grep -A 20 '<schedule>'

# nm으로 커널 심볼 테이블 조회
nm vmlinux | grep ' T schedule$'

# readelf로 커널 ELF 헤더 확인
readelf -h vmlinux

QEMU / KVM

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

# 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

디버깅 도구

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

테스트 프레임워크

커널 릴리스 모델 & 버전 추적

커널 참고자료를 올바르게 활용하려면 커널의 릴리스 모델을 이해해야 합니다. 도서나 블로그가 참조하는 커널 버전과 현재 사용 중인 버전의 차이를 파악하는 것이 실수를 줄이는 첫걸음입니다.

릴리스 주기

리눅스 커널은 약 9~10주 주기로 새 버전을 릴리스합니다. 각 릴리스 사이클은 다음 단계를 거칩니다.

단계기간활동추적 방법
Merge Window~2주서브시스템 트리에서 mainline으로 새 기능 머지LWN.net merge window 요약
rc1 ~ rc7+~7~8주버그 수정, 회귀 테스트, 안정화git log v6.x-rc1..v6.x-rc2
Release1일안정 버전 태깅, 다음 merge window 시작kernel.org 메인 페이지
Stable/LTS수년보안/버그 수정 백포트git.kernel.org/pub/scm/linux/kernel/git/stable/
# 현재 커널 버전 확인
uname -r

# 커널 소스 트리의 버전 확인
make kernelversion

# 특정 버전 사이의 변경 통계
git diff --stat v6.8..v6.9 | tail -1

# 특정 서브시스템의 변경사항만 확인
git log --oneline v6.8..v6.9 -- mm/

# 최신 안정 버전 태그 확인
git tag -l 'v6.*' | sort -V | tail -10
도서/블로그 읽을 때 팁: 참고 자료에서 언급하는 함수나 구조체가 현재 커널에 존재하는지 확인하려면 git log --all -S '함수명' -- '*.c' '*.h'로 해당 심볼의 추가/삭제 이력을 추적하십시오. 이름이 변경된 경우 git log --follow로 파일 이동 이력도 확인할 수 있습니다.

버전별 변경사항 추적 도구

표준 & 규격 (Standards & Specifications)

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

네트워킹 (Networking)

규격명발행 기관설명관련 페이지
RFC 791IETFIPv4 프로토콜 명세 — 패킷 구조, 단편화(Fragmentation), 라우팅(Routing)네트워크 스택, 라우팅
RFC 8200IETFIPv6 프로토콜 명세 — 128비트 주소, 확장 헤더, Flow Label네트워크 스택, 라우팅
RFC 793IETFTCP 프로토콜 — 3-way 핸드셰이크, 흐름 제어(Flow Control), 재전송(Retransmission)네트워크 스택, Netfilter
RFC 768IETFUDP 프로토콜 — 비연결 데이터그램 전송네트워크 스택
RFC 826IETFARP (Address Resolution Protocol) — IPv4 → MAC 주소 변환(Address Translation)네트워크 스택
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 패킷에 데이터 포함하여 지연(Latency) 감소네트워크 스택
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통합 확장 펌웨어(Firmware) 인터페이스 — 부팅 서비스, 런타임 서비스, Secure BootUEFI, 부팅 과정, Secure Boot
ACPI Specification 6.5UEFI Forum고급 구성 및 전원 인터페이스 — DSDT/SSDT, 전원 상태, 핫플러그(Hotplug)ACPI, 부팅 과정, 전원 관리(Power Management)
Intel SDM (Software Developer's Manual)Intelx86/x64 아키텍처 전체 레퍼런스 — 명령어, 메모리, 인터럽트, 가상화커널 아키텍처, 메모리 관리
ARM Architecture Reference Manual (ARM ARM)ARMAArch64 아키텍처 레퍼런스 — 예외 레벨, 메모리 모델, NEON/SVE커널 아키텍처, 메모리 관리
Multiboot SpecificationGNU/FSF부트로더(Bootloader) ↔ 커널 인터페이스 표준 (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 호출 규약(Calling Convention) — 공유 라이브러리(Shared Library), ELF 적재, IPC 시맨틱프로세스, 시스템 콜
ELF (Executable and Linkable Format)TIS Committee실행 파일/공유 라이브러리/코어 덤프(Core Dump)의 표준 바이너리 형식프로세스
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-디바이스 간 캐시 일관성(Cache Coherency) 인터커넥트NUMA, PCI/PCIe

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

규격명발행 기관설명관련 페이지
C11 Memory Model (ISO/IEC 9899:2011)ISO/IECC 언어 원자적 연산(Atomic Operation) 및 메모리 순서(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 디스크 레이아웃, 저널링(Journaling), extents, 기능 플래그 문서ext4
FUSE Protocol (kernel.org)Linux Community사용자 공간(User Space) 파일시스템 프로토콜 — 커널 ↔ 사용자 메시지 형식FUSE

디바이스 (Devices)

규격명발행 기관설명관련 페이지
PCI Local Bus Specification 3.0PCI-SIGPCI 버스(Bus) 아키텍처 — 설정 공간, 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)컨테이너 런타임 표준 — 네임스페이스(Namespace), 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 Framework (Crypto API) 인증 기준Linux Crypto Framework (Crypto API), Secure Boot
FIPS 197 (AES)NISTAES 블록 암호 표준 — 128/192/256비트 키Linux Crypto Framework (Crypto API)
FIPS 180-4 (SHA)NISTSHA-1/SHA-224/SHA-256/SHA-384/SHA-512 해시(Hash) 알고리즘Linux Crypto Framework (Crypto API)
FIPS 198-1 (HMAC)NIST해시 기반 메시지 인증 코드Linux Crypto Framework (Crypto API)
NIST SP 800-38A~FNIST블록 암호 운용 모드 — CBC, CTR, GCM, CCM, XTS 등Linux Crypto Framework (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, 커널 보안

FIPS 지원/인증 상태 확인 경로

배포판별 FIPS 인증 보유 여부와 지원 범위는 출시 주기, 백포트 정책, 인증 갱신 일정에 따라 수시로 변경됩니다. 운영 환경 반영 전에는 반드시 벤더의 공식 보안 문서와 릴리스 노트를 함께 확인하세요.

대상확인 항목권장 확인 방법
RHEL / Oracle Linux 계열FIPS 인증 버전, 커널 패키지 범위, 활성화 절차벤더 보안 문서 + fips-mode-setup --check + 릴리스 노트
Ubuntu ProFIPS 채널 지원 여부, 커널/라이브러리 적용 범위Ubuntu Pro 보안 문서 + pro status + 릴리스 노트
SUSE 계열FIPS 모듈 제공 범위, 커널 옵션, 정책 파일SUSE 보안 문서 + 배포판 도구(YaST 등) 상태 점검
클라우드 배포판클라우드 이미지의 FIPS 인증/검증 범위클라우드 공급자 보안 가이드 + 이미지 릴리스 노트
운영 반영 전 체크리스트:
  • /proc/sys/crypto/fips_enabled 값 확인 (부트 파라미터 적용 여부)
  • /proc/cryptoselftest, driver, priority 점검
  • 벤더 정책 문서의 적용 범위(커널만/사용자 공간 포함) 확인
  • 인증 번호/유효 기간/대상 버전이 현재 운영 버전과 일치하는지 검증

스토리지 (Storage)

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

타이머(Timer) & 클럭 (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 토폴로지(Topology), CPU 캐시(Cache), 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 호출 규약 — 레지스터 용도, 스택 프레임(Stack Frame), 시스템 콜 ABI어셈블리(Assembly), 시스템 콜
ARM AAPCS (Procedure Call Standard)ARMARM/AArch64 함수 호출 규약 — 레지스터, 스택, 반환 값어셈블리
The Rust ReferenceRust ProjectRust 언어 명세 — 소유권, 수명, unsafe, FFIRust in Kernel

실무 빠른 참조 (Quick Reference)

커널 개발 중 자주 필요한 명령어와 참조 경로를 한 곳에 모았습니다. 북마크해 두고 필요할 때 빠르게 찾아보는 용도로 활용하십시오.

커널 설정 및 빌드

# 현재 실행 중인 커널의 설정 가져오기
cp /boot/config-$(uname -r) .config
make olddefconfig

# 메뉴 기반 커널 설정
make menuconfig

# 특정 옵션 검색 (menuconfig 내에서 '/' 키)
# 또는 grep으로 직접 검색
grep -i 'CONFIG_BPF' .config

# 병렬 빌드 (CPU 코어 수에 맞춰)
make -j$(nproc)

# 모듈만 빌드
make -j$(nproc) modules

# 특정 디렉토리만 빌드
make -j$(nproc) drivers/net/

디버깅 빠른 참조

# dmesg로 커널 로그 확인 (최근 메시지, 사람이 읽기 쉬운 타임스탬프)
dmesg -T --level=err,warn | tail -50

# ftrace로 특정 함수 호출 추적
echo "function" > /sys/kernel/debug/tracing/current_tracer
echo "schedule" > /sys/kernel/debug/tracing/set_ftrace_filter
echo 1 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace_pipe

# perf로 CPU 핫스팟 프로파일링
perf top -g

# 시스템 콜 추적
strace -c -p <PID>

# QEMU + GDB 원격 디버깅
# 터미널 1:
qemu-system-x86_64 -kernel bzImage -s -S -nographic
# 터미널 2:
gdb vmlinux -ex "target remote :1234"

자주 참조하는 /proc & /sys 경로

경로용도관련 페이지
/proc/meminfo메모리 사용 현황메모리 관리
/proc/interrupts인터럽트 통계인터럽트
/proc/cpuinfoCPU 정보, 기능 플래그CPU 토폴로지
/proc/slabinfo슬랩 캐시 상세 통계슬랩 할당자(Slab Allocator)
/proc/vmstat가상 메모리(Virtual Memory) 통계메모리 관리
/sys/kernel/debug/tracing/ftrace 제어 인터페이스디버깅
/sys/fs/cgroup/cgroup v2 계층 구조cgroups
/sys/devices/system/cpu/CPU 온라인/오프라인, 주파수CPU 토폴로지
/proc/sys/vm/VM 튜닝 파라미터메모리
/proc/sys/net/네트워크 스택 튜닝네트워크 스택
sysctl 값 변경과 영속화: sysctl -w vm.swappiness=10은 즉시 적용되지만 재부팅 시 초기화됩니다. 영속적으로 적용하려면 /etc/sysctl.d/99-custom.confvm.swappiness = 10을 추가하고 sysctl --system을 실행합니다. 프로덕션 환경에서는 변경 전 반드시 현재 값을 기록해 두십시오.

참고 링크

이 페이지에서 언급한 주요 외부 자료의 직접 링크를 카테고리별로 정리합니다. 모든 링크는 외부 사이트로 연결됩니다.

커널 공식 사이트

커널 공식 문서 핵심 경로

LWN.net

소스 코드 탐색

온라인 강좌 및 학습

eBPF 및 성능 분석

Rust for Linux

커뮤니티 및 소통 채널

컨퍼런스 및 발표 영상

개발 도구

표준 및 규격 원문

한국 커뮤니티 및 자료

참고자료와 함께 활용하면 좋은 문서들입니다.