참고자료 (References)
리눅스 커널 학습을 위한 공식 문서, 추천 도서, 온라인 강좌, 한국 커뮤니티, 소스 코드 탐색 도구, 컨퍼런스, 개발 환경, 표준 및 규격(RFC, IEEE, POSIX, FIPS, NIST) 종합 참고자료입니다.
핵심 요약
- 빠른 참조 — 용어, 배경, 관련 문서를 짧게 연결합니다.
- 출처 신뢰성 — 공식 문서와 1차 자료를 우선 확인합니다.
- 학습 경로 — 입문에서 고급까지 연결 순서를 제공합니다.
- 맥락 보강 — 본문 문서와 교차 링크로 이해를 보완합니다.
- 업데이트 관점 — 변경 가능성이 큰 정보는 주기적으로 점검합니다.
단계별 이해
- 키워드 확인
필요한 개념을 먼저 정확한 용어로 찾습니다. - 원문 확인
공식 문서에서 정의와 예외를 확인합니다. - 관련 문서 확장
연결된 기술 문서로 범위를 넓힙니다. - 실무 맥락 연결
현재 문제와 직접 연결되는 부분만 추려 적용합니다.
리눅스 커널 학습과 개발에 유용한 공식 문서, 도서, 온라인 강좌, 커뮤니티, 소스 탐색 도구, 컨퍼런스, 개발 환경을 종합 정리합니다.
학습 경로 로드맵 (Learning Roadmap)
리눅스 커널을 처음 접하는 학습자부터 커널 메인테이너를 지향하는 고급 개발자까지, 단계별로 어떤 자료를 어떤 순서로 학습하면 효과적인지 시각화한 로드맵입니다. 각 단계는 이전 단계의 지식을 전제로 하며, 화살표 방향으로 학습을 진행하면 됩니다.
Documentation/ 문서부터 시작하고, 모르는 개념이 나올 때마다 이전 단계 자료로 돌아가는 방식도 효과적입니다. 중요한 것은 항상 최신 소스 코드와 함께 읽는 것입니다.
공식 문서 (Official Documentation)
리눅스 커널 개발의 가장 권위 있는 1차 자료들입니다. 커널 소스 트리 내 문서와 커널 커뮤니티가 직접 운영하는 사이트를 우선적으로 참조하는 것이 좋습니다.
kernel.org
리눅스 커널의 공식 홈페이지. 최신 안정 버전, LTS 버전, 릴리스 노트, 소스 타볼 등을 제공합니다. Git 저장소(git.kernel.org)에서 전체 커널 소스 히스토리를 확인할 수 있습니다.
- 메인 사이트:
https://www.kernel.org/ - Git 저장소:
https://git.kernel.org/ - 릴리스 히스토리:
https://www.kernel.org/category/releases.html
커널 소스 내 문서 (Documentation/)
커널 소스 트리의 Documentation/ 디렉토리는 가장 정확하고 최신인 기술 문서를 포함합니다. RST(reStructuredText) 형식으로 작성되어 make htmldocs로 HTML 빌드가 가능합니다.
- 온라인 렌더링:
https://docs.kernel.org/ - 주요 하위 디렉토리:
Documentation/process/— 개발 프로세스(Process), 코딩 스타일(Coding Style), 패치(Patch) 제출 가이드Documentation/admin-guide/— 커널 매개변수, sysctl, 시스템 관리Documentation/driver-api/— 드라이버 개발 API 레퍼런스Documentation/networking/— 네트워크 서브시스템 문서Documentation/filesystems/— 파일시스템별 설계 문서Documentation/mm/— 메모리 관리(Memory Management) 서브시스템
# 커널 소스에서 HTML 문서 빌드
make htmldocs
# Documentation/output/에 HTML 생성
LWN.net
리눅스 커널 개발 뉴스와 심층 기술 기사를 제공하는 사이트. 커널 메인테이너와 개발자들이 직접 기고하며, 새로운 커널 기능의 설계 배경과 기술적 논의를 상세히 다룹니다.
- Kernel index:
https://lwn.net/Kernel/Index/— 주제별 커널 기사 색인 - Weekly edition: 매주 발행되는 리눅스/오픈소스 뉴스레터
- Merge window 요약: 매 릴리스 사이클마다 merge window에 들어온 변경사항을 정리
man-pages 프로젝트
리눅스 시스템 콜(System Call), C 라이브러리 함수, 커널 인터페이스의 공식 매뉴얼 페이지(Page). 시스템 콜의 정확한 시맨틱, 에러 코드, 주의사항을 확인할 때 매우 유용합니다.
- 온라인:
https://man7.org/linux/man-pages/ - 섹션 2: 시스템 콜 (
man 2 read,man 2 ioctl) - 섹션 7: 개요/개념 (
man 7 namespaces,man 7 cgroups)
커널 Documentation/ 디렉토리 구조
커널 소스 트리의 Documentation/ 디렉토리는 수백 개의 하위 디렉토리로 구성됩니다. 아래 다이어그램은 가장 자주 참조하는 핵심 디렉토리와 그 역할을 보여줍니다.
커널 문서는 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)
커널 내부 구조를 체계적으로 학습하기 위한 핵심 도서들입니다. 커널 버전에 따라 세부 구현이 달라질 수 있으므로, 최신 소스 코드와 함께 읽는 것을 권장합니다.
핵심 도서 비교표
가장 많이 추천되는 커널 도서를 한눈에 비교합니다. 자신의 수준과 관심 분야에 맞는 도서를 선택하십시오.
| 도서 | 저자 | 대상 수준 | 주요 범위 | 장점 | 주의사항 |
|---|---|---|---|---|---|
| LKD | Robert Love | 입문~중급 | 프로세스, 스케줄링, 메모리, VFS, 동기화 | 명확한 설명, 빠른 개요 파악 | 3판 기준 (2.6.34) |
| ULK | Bovet & Cesati | 중급~고급 | 소스 수준 내부 분석, x86 중심 | 구현 상세 분석, 코드 참조 | 3판 기준 (2.6.11) |
| LDD3 | Corbet, Rubini, Kroah-Hartman | 드라이버 개발 | 모듈, 캐릭터/블록/네트워크 드라이버 | 무료 온라인, 실습 중심 | 2.6 기준, API 변경 많음 |
| PLKA | Wolfgang Mauerer | 중급~고급 | 전체 서브시스템 종합 | 1,300+ 페이지 방대한 범위 | 2.6.24 기준 |
| BPF Perf Tools | Brendan Gregg | 중급~고급 | eBPF, bpftrace, BCC, 성능 분석 | 실전 도구 수백 개 수록 | eBPF 특화, 커널 전반 아님 |
| TLPI | Michael Kerrisk | 입문~중급 | 시스템 콜, POSIX API 전체 | 시스템 콜 백과사전 | 커널 내부보다 인터페이스 중심 |
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/로 보완해서 읽기를 권장합니다.
- 무료 온라인 버전:
https://lwn.net/Kernel/LDD3/
Professional Linux Kernel Architecture (PLKA)
저자: Wolfgang Mauerer
추천 대상: 중급~고급
프로세스 관리, 메모리 관리, VFS, 네트워킹, 모듈 등을 광범위하게 다루는 종합 참고서. 1,300페이지 이상의 방대한 분량으로 커널 내부를 깊이 파헤칩니다.
Linux Networking / TCP-IP 관련
- Understanding Linux Network Internals (Christian Benvenuti) — 네트워크 스택(Network Stack) 내부 구조 분석
- Linux Kernel Networking (Rami Rosen) — 최신 커널 네트워킹 서브시스템 설명
- TCP/IP Illustrated (W. Richard Stevens) — TCP/IP 프로토콜의 고전적 참고서
eBPF & 성능 분석 도서
- Learning eBPF (Liz Rice, 2023, O'Reilly) — eBPF 입문 최신 도서. 무료 PDF 제공. 커널 훅, Map, BPF CO-RE까지 단계별 실습
- BPF Performance Tools (Brendan Gregg, 2019) — BPF를 활용한 성능 분석 가이드.
bpftrace,BCC, 수백 가지 분석 도구 수록 - Linux Observability with BPF (David Calavera, Lorenzo Fontana, 2019) — eBPF 기반 관측성 도구. 네트워크·시스템 추적 실습 중심
- Systems Performance: Enterprise and the Cloud (Brendan Gregg, 2nd Ed., 2020) — 성능 분석 바이블.
perf,ftrace, eBPF 실전 활용을 체계적으로 다룹니다
2019년 이후 최신 도서
- Linux Kernel Development Cookbook (Kaiwan N. Billimoria, 2019, Packt) — 실습 중심 레시피. 커널 모듈, 드라이버, 동기화, NUMA 메모리 관리까지 단계별 예제 제공
- Rust for Rustaceans (Jon Gjengset, 2021, No Starch) — Rust. unsafe, FFI, 매크로(Macro), 트레이트 오브젝트를 깊이 다뤄 커널 Rust 코드 이해에 유용
기타 유용한 도서
- Linux System Programming (Robert Love) — 시스템 프로그래밍 입문
- The Linux Programming Interface (Michael Kerrisk) — 시스템 콜과 POSIX API의 백과사전
온라인 강좌 & 튜토리얼 (Online Courses & Tutorials)
무료로 접근 가능한 양질의 온라인 학습 자료들입니다.
Bootlin 교육 자료
Bootlin(구 Free Electrons)은 임베디드 리눅스와 커널 교육 전문 기업으로, 교육 자료를 무료로 공개하고 있습니다.
- Linux Kernel Training: 커널 내부, 드라이버 개발 슬라이드 및 실습 자료
- Embedded Linux Training: 임베디드 리눅스 시스템 구축 교육
- 사이트:
https://bootlin.com/training/
kernelnewbies.org
커널 개발 입문자를 위한 커뮤니티 사이트. 커널 빌드 방법, 첫 패치 제출 가이드, 릴리스별 변경사항 요약 등을 제공합니다.
- 사이트:
https://kernelnewbies.org/ - First Kernel Patch: 첫 커널 패치 제출 단계별 가이드
- Linux Changes: 매 릴리스마다 주요 변경사항을 알기 쉽게 정리
The Linux Kernel Module Programming Guide
커널 모듈 프로그래밍을 단계별로 설명하는 무료 온라인 가이드. Hello World 모듈부터 /proc 파일, 디바이스 드라이버, 시스템 콜 후킹까지 실습 중심으로 학습할 수 있습니다.
- GitHub:
https://github.com/sysprog21/lkmpg
linux-insides
커널 부팅 과정(Boot Process), 인터럽트(Interrupt), 메모리 관리, 동기화 등을 소스 코드 수준에서 분석하는 오픈소스 온라인 도서.
- GitHub:
https://github.com/0xAX/linux-insides
Linux Foundation 공식 강좌
Linux Foundation이 운영하는 커널 개발 공인 강좌. 일부 강좌는 무료로 제공됩니다.
- LFD103 "A Beginner's Guide to Linux Kernel Development" — 무료 입문 강좌:
https://training.linuxfoundation.org/training/a-beginners-guide-to-linux-kernel-development-lfd103/ - LFD201 "Introduction to Open Source Development, Git, and Linux" — 오픈소스 개발 흐름과 Git 기초
- 수료 후 Linux Foundation 인증(LFCS, CKA 등)으로 이어지는 커리큘럼 제공
eBPF 학습 자료
최근 커널 개발의 핵심 기술인 eBPF를 집중적으로 다루는 자료들입니다.
- ebpf.io 공식 포털 — eBPF 입문 가이드, 사용 사례, 프로젝트 목록:
https://ebpf.io/get-started/ - XDP Tutorial — XDP 실습 튜토리얼. 네트워크 패킷(Packet) 처리 실전 예제:
https://github.com/xdp-project/xdp-tutorial - BCC Tools Reference Guide — BCC 내장 분석 도구 전체 레퍼런스. 설치 후
/usr/share/bcc/tools/에서 확인 - bpftrace Reference Guide — 고수준 eBPF 추적 언어. 원라이너 시스템 추적에 적합
Rust for Linux 학습 자료
커널에 Rust 코드를 기여하거나 이해하기 위한 자료들입니다.
- Rust for Linux 공식 위키 — 개발 환경 설정, 기여 가이드, 예제 드라이버:
https://rust-for-linux.com/ - The Rustonomicon — unsafe Rust. FFI, 원시 포인터, 메모리 레이아웃:
https://doc.rust-lang.org/nomicon/ - Rust Reference — 언어 공식 명세. 소유권, 수명, 트레이트, 매크로 규칙
Eudyptula Challenge & 대안 실습 프로젝트
단계별 커널 개발 과제를 통해 실력을 키우는 프로그램이었습니다. 현재는 운영되지 않지만, 아카이브와 대안 프로젝트가 남아있습니다.
- Eudyptula Challenge 아카이브 — 20개 과제 원문 보존:
https://github.com/agelastic/eudyptula - Linux Kernel Labs (LKL) — 루마니아 폴리테흐니카대가 운영하는 커널 실습 사이트. 한국어 번역 포함:
https://linux-kernel-labs.github.io/
소스 코드 탐색 (Source Code Browsing)
커널 소스 코드를 효율적으로 탐색하고 참조하기 위한 도구들입니다.
Bootlin Elixir Cross Referencer
웹 브라우저에서 커널 소스를 탐색할 수 있는 가장 인기 있는 도구. 심볼 정의/참조 추적, 버전별 소스 비교, 파일 검색 등을 지원합니다.
- 사이트:
https://elixir.bootlin.com/linux/latest/source - 여러 커널 버전 간 소스 비교 가능
- 함수명, 구조체(Struct)명, 매크로 등을 클릭하면 정의/사용처로 이동
# 예: 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)이 개발한 강력한 소스 코드 검색/탐색 도구. 전체 텍스트 검색, 정규식, 파일 경로 필터, 히스토리 조회를 지원합니다.
- 커널 공식 인스턴스:
https://opengrok.kernel.org/ - 정규식 검색과 파일 경로 필터를 조합하면 대용량 커널 소스에서도 빠른 검색 가능
GitHub 미러
Linus Torvalds의 공식 GitHub 미러. PR은 불가능하지만 코드 검색과 브라우저 탐색 편의가 높습니다.
- 저장소:
https://github.com/torvalds/linux - GitHub 코드 검색 팁:
repo:torvalds/linux "function_name" language:c - 커밋 메시지 검색, 파일 히스토리, 브랜치 비교 등 GitHub UI 활용 가능
로컬 소스 탐색 도구
대규모 커널 소스를 로컬에서 효율적으로 탐색하기 위한 도구들:
- cscope: 대화형 심볼 탐색 도구. 함수 호출 관계, 정의 위치, 사용처를 빠르게 검색합니다.
- ctags: 태그 파일을 생성하여 편집기에서 심볼 정의로 바로 이동할 수 있게 합니다.
- GNU Global (gtags): cscope와 ctags의 장점을 결합한 소스 코드 태깅 시스템.
- clangd / ccls: LSP 기반 C 언어 서버로, IDE에서 정의 이동, 참조 찾기, 자동 완성 등을 제공합니다.
- ripgrep (
rg): grep보다 빠른 전체 텍스트 검색. 커널 소스 전체를 수 초 안에 탐색합니다. - Bear:
bear -- make로compile_commands.json을 생성하는 대안 도구 (gen_compile_commands.py보완).
# 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. 코드 수정 후 커밋 (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
Signed-off-by:, Fixes:, Cc: 태그를 포함합니다. Documentation/process/submitting-patches.rst에서 전체 규칙을 확인할 수 있습니다.
LKML (Linux Kernel Mailing List)
리눅스 커널 개발의 중심 메일링 리스트. 패치 제출, 코드 리뷰, 기술 논의가 이루어집니다.
- 아카이브:
https://lkml.org/ - lore.kernel.org: 커널 메일링 리스트의 공식 아카이브.
https://lore.kernel.org/
서브시스템별 메일링 리스트
각 서브시스템은 전담 메일링 리스트를 운영합니다. MAINTAINERS 파일에서 담당 메인테이너와 메일링 리스트를 확인할 수 있습니다.
- netdev: 네트워킹 서브시스템 (
netdev@vger.kernel.org) - linux-mm: 메모리 관리 (
linux-mm@kvack.org) - linux-fsdevel: 파일시스템 개발 (
linux-fsdevel@vger.kernel.org) - linux-block: 블록 I/O 레이어 (
linux-block@vger.kernel.org) - linux-pci: PCI 서브시스템 (
linux-pci@vger.kernel.org)
# 특정 파일의 메인테이너와 메일링 리스트 확인
scripts/get_maintainer.pl -f drivers/net/ethernet/intel/e1000e/netdev.c
Patchwork
메일링 리스트에 제출된 패치의 상태를 추적하는 웹 도구. 패치가 적용되었는지, 리뷰 중인지 등을 확인할 수 있습니다.
- 사이트:
https://patchwork.kernel.org/
IRC / Matrix
실시간(Real-time) 소통 채널. OFTC IRC 네트워크의 #kernelnewbies 채널은 입문자에게 유용합니다. 최근에는 Matrix 브릿지도 제공됩니다.
- IRC:
irc.oftc.net—#kernelnewbies,#linux-kernel - Matrix:
#kernelnewbies:oftc.net
커널 버그 추적
- Bugzilla:
https://bugzilla.kernel.org/— 커널 버그 리포트 및 추적 - syzbot:
https://syzkaller.appspot.com/— 자동 퍼징으로 발견된 커널 버그 대시보드
한국 커뮤니티 & 참고자료 (Korean Communities & Resources)
한국에서 활동하는 리눅스 커널 커뮤니티와 한국어로 작성된 참고 자료들입니다. 영어 원문이 최신이고 정확하지만, 학습 초기 단계나 개념 이해에는 한국어 자료가 큰 도움이 됩니다.
커뮤니티 & 포럼
KLDP (Korean Linux Documentation Project)
한국 리눅스 커뮤니티의 오랜 역사를 가진 사이트. 커널 관련 질문/답변, 기술 토론, 번역 자료를 제공합니다. 과거 활발했던 게시판 아카이브에 유용한 정보가 많이 남아있습니다.
- Wiki:
https://wiki.kldp.org/— 리눅스 관련 기술 문서 - 게시판 아카이브: 커널 개발, 드라이버, 시스템 프로그래밍 토론
리눅스 커뮤니티 (소셜 미디어)
활발한 실시간 토론과 질의응답이 이루어지는 한국 커뮤니티들:
- 페이스북 그룹:
- "리눅스 커널 및 디바이스 드라이버" — 현업 개발자들의 기술 토론
- "Linux Korea" — 일반적인 리눅스 주제 및 커널 논의
- 오픈카톡: 커널 스터디 그룹, 드라이버 개발 모임 등
GitHub 스터디 저장소
한국 개발자들이 운영하는 커널 학습 저장소:
- 리눅스 커널 스터디 노트 — 주요 서브시스템별 정리
- 커널 소스 분석 프로젝트 — 코드 리뷰 및 번역
- 드라이버 개발 예제 — 실습 코드 및 튜토리얼
한국어 문서 & 번역
커널 공식 문서 한국어 번역
리눅스 커널 소스 트리 내 Documentation/translations/ko_KR/ 디렉토리에 한국어 번역 문서가 포함되어 있습니다. 커뮤니티 기여자들이 지속적으로 번역 중입니다.
# 한국어 번역 문서 위치
ls Documentation/translations/ko_KR/
# 주요 번역 문서:
# - process/ (개발 프로세스, 코딩 스타일)
# - howto.rst (커널 개발 방법)
# - memory-barriers.txt (메모리 배리어)
한국어 도서
- 리눅스 커널 내부구조 (번역서) — Understanding the Linux Kernel 한국어판
- 리눅스 커널 프로그래밍 (번역서) — Linux Kernel Development 한국어판
- 리눅스 디바이스 드라이버 (번역서) — Linux Device Drivers 한국어판
- 실습과 그림으로 배우는 리눅스 구조 (다케우치 사토루) — 커널 기초 입문서
개발자 블로그
한국 개발자들이 운영하는 기술 블로그. 커널 내부 구조, 디버깅(Debugging) 기법, 실무 경험을 상세히 공유합니다.
커널 분석 블로그
- Pigbrain's Lab — 메모리 관리, 스케줄러, 동기화 상세 분석
- Studyfoss — 커널 소스 단계별 분석, 버전별 변경사항 추적
- Jake's Linux Lab — ftrace, perf, 디버깅 실전 활용법
- iamroot 커널 스터디 — 국내 대표 커널 스터디 그룹의 정리 자료
기업 기술 블로그
- LG전자 오픈소스 블로그 — webOS 커널, 드라이버 최적화 사례
- 삼성 오픈소스 — Android 커널 커스터마이징, Tizen 커널
- 네이버 D2 — 클라우드 인프라, 커널 최적화 경험 공유
- 카카오 기술 블로그 — 서버 커널 튜닝, cgroup/namespace 활용
학술 자료 & 연구실
- 서울대학교 운영체제 연구실 — 커널 스터디 자료, 논문, 슬라이드 공유
- KAIST 시스템 소프트웨어 연구실 — 파일시스템, 메모리 관리 연구
- 한국정보과학회 논문지 — 커널 관련 학술 논문 (일부 한국어)
한국 컨퍼런스 & 행사
- Linux Kernel Summit Korea (과거 개최) — 삼성, LG 등 주관 커널 컨퍼런스
- SOSCON (Samsung Open Source Conference) — 오픈소스 및 커널 세션
- if(kakao) dev — 인프라 트랙에서 커널 관련 발표
- Deview (네이버) — 시스템 프로그래밍 및 커널 세션
한국 자료 활용 팁
- 개념 이해: 처음에는 한국어 자료로 큰 그림 파악
- 정확성 확인: 공식 문서(kernel.org)와 최신 소스 코드로 검증
- 실습 병행: 블로그 예제를 현재 커널 버전에 맞춰 수정하며 학습
- 커뮤니티 참여: 막히는 부분은 한국 커뮤니티에 질문하여 빠르게 해결
- 오래된 블로그 글은 커널 2.6/3.x 기반일 수 있습니다 — 현재 6.x 버전과 API가 다를 수 있음
- 번역서는 원서보다 1~2년 늦게 출판되므로 최신 기능 누락 가능
- 의심스러운 내용은 반드시
Documentation/또는 소스 코드로 재확인
컨퍼런스 & 발표 (Conferences & Talks)
커널 개발자들이 최신 기술과 설계 결정을 공유하는 주요 컨퍼런스들입니다. 대부분의 발표 영상이 YouTube에 공개되어 있어 무료로 시청할 수 있습니다.
Linux Plumbers Conference (LPC)
커널 및 저수준 리눅스 인프라 개발자들의 기술 컨퍼런스. 네트워킹, 스토리지, 보안, 컨테이너(Container) 등 서브시스템별 마이크로컨퍼런스가 진행됩니다. 이전 발표 슬라이드와 영상 아카이브는 공식 사이트에서 확인할 수 있습니다.
- 공식 사이트:
https://lpc.events/— 연도별 발표 자료 및 영상 아카이브
Kernel Summit / Maintainer Summit
커널 메인테이너들이 모여 개발 프로세스와 기술적 방향을 논의하는 연례 모임입니다. LPC와 함께 개최되는 경우가 많습니다.
FOSDEM
매년 2월 브뤼셀에서 열리는 대규모 오픈소스 컨퍼런스. 커널 관련 트랙과 devroom이 운영되며, 모든 발표가 무료로 공개됩니다.
- 발표 영상:
https://video.fosdem.org/— 전체 연도 발표 영상 무료 제공
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와 공식 사이트에서 무료 공개합니다.
- 공식 사이트:
https://kernel-recipes.org/— 연도별 발표 자료 및 영상
발표 영상 YouTube 채널 & 검색 팁
- Linux Foundation:
https://www.youtube.com/@LinuxfoundationOrg— LPC, OSS Summit, ELC 영상 아카이브 - FOSDEM:
https://www.youtube.com/@fosdem— FOSDEM 전체 발표 영상 - Kernel Recipes:
https://www.youtube.com/@KernelRecipes— 커널 심층 기술 발표
LPC 2023 BPF, FOSDEM 2024 scheduler, Kernel Recipes memory. 슬라이드 PDF는 각 컨퍼런스 공식 사이트의 연도별 아카이브 페이지에서 별도 제공됩니다.
개발 도구 & 환경 (Development Tools & Environment)
커널 개발, 빌드, 테스트, 디버깅에 필요한 핵심 도구들입니다. 자세한 사용법은 개발 도구 페이지를 참고하십시오.
GNU 도구체인 (GNU Toolchain)
리눅스 커널 빌드와 디버깅에 필수적인 GNU 도구들입니다. 각 도구의 공식 문서는 gnu.org에서 제공됩니다.
- GCC (GNU Compiler Collection): 커널 빌드의 기본 컴파일러.
커널 전용 옵션(
-fno-pie,-mno-sse,-ffreestanding등)을 사용합니다. 공식 사이트:https://gcc.gnu.org/ - GNU Binutils:
ld(링커(Linker)),objdump(역어셈블),nm(심볼 조회),readelf(ELF 헤더 분석),as(어셈블러) 등 커널 분석에 자주 쓰이는 도구 모음. 공식 사이트:https://www.gnu.org/software/binutils/ - GDB (GNU Debugger): QEMU
-s -S옵션과 연동한 커널 원격 디버깅. 공식 사이트:https://www.gnu.org/software/gdb/ - GNU Make: Kbuild 빌드 시스템(Build System)의 기반 도구.
공식 사이트:
https://www.gnu.org/software/make/(사용법: GNU Make 페이지 참고) - GNU Global (gtags): 소스 코드 태깅 시스템.
공식 사이트:
https://www.gnu.org/software/global/
# 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: 다양한 아키텍처(x86, ARM, RISC-V 등)를 에뮬레이션
- virtme / virtme-ng: 호스트 파일시스템을 공유하여 커널을 빠르게 부팅·테스트
# 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: 커널 전용 정적 분석기.
__user,__kernel등 address space 어노테이션 검증 - Coccinelle: 의미 기반 패치(semantic patch) 도구. 패턴 매칭으로 코드 변환을 자동화
- smatch: 커널 코드의 잠재적 버그를 탐지하는 정적 분석 도구
- checkpatch.pl: 커널 코딩 스타일 검사 스크립트
# sparse로 정적 분석
make C=1 drivers/net/
# checkpatch로 패치 스타일 검사
scripts/checkpatch.pl --strict my-patch.patch
디버깅 도구
- GDB + QEMU: QEMU의
-s -S옵션으로 GDB 원격 디버깅 - ftrace: 커널 내장 함수 트레이서.
/sys/kernel/debug/tracing/에서 제어 - perf: 성능 카운터 기반 프로파일링(Profiling) 도구
- crash: 커널 크래시 덤프(kdump) 분석 도구
- KASAN / UBSAN / KCSAN: 메모리 오류, 정의되지 않은 동작, 동시성 버그를 런타임에 탐지
자세한 내용은 디버깅 페이지를 참고하십시오.
테스트 프레임워크
- KUnit: 커널 내 유닛 테스트 프레임워크. 커널 부팅 없이도 빠르게 테스트 실행 가능
- kselftest: 커널 셀프 테스트 스위트.
tools/testing/selftests/에 위치 - LTP (Linux Test Project): 종합 커널 테스트 스위트
- syzkaller: 커버리지 기반 커널 퍼저. 시스템 콜 시퀀스를 자동 생성하여 버그를 탐지
커널 릴리스 모델 & 버전 추적
커널 참고자료를 올바르게 활용하려면 커널의 릴리스 모델을 이해해야 합니다. 도서나 블로그가 참조하는 커널 버전과 현재 사용 중인 버전의 차이를 파악하는 것이 실수를 줄이는 첫걸음입니다.
릴리스 주기
리눅스 커널은 약 9~10주 주기로 새 버전을 릴리스합니다. 각 릴리스 사이클은 다음 단계를 거칩니다.
| 단계 | 기간 | 활동 | 추적 방법 |
|---|---|---|---|
| Merge Window | ~2주 | 서브시스템 트리에서 mainline으로 새 기능 머지 | LWN.net merge window 요약 |
| rc1 ~ rc7+ | ~7~8주 | 버그 수정, 회귀 테스트, 안정화 | git log v6.x-rc1..v6.x-rc2 |
| Release | 1일 | 안정 버전 태깅, 다음 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로 파일 이동 이력도 확인할 수 있습니다.
버전별 변경사항 추적 도구
- kernelnewbies.org/Linux_X.Y: 매 릴리스마다 주요 변경사항을 알기 쉽게 정리
- LWN.net Merge Window: 각 merge window에서 들어온 변경사항을 서브시스템별로 요약
git log --oneline v6.8..v6.9 -- 경로/: 특정 서브시스템의 버전 간 변경 확인- Elixir (elixir.bootlin.com): 버전 드롭다운으로 코드 변경 시각적 비교
- patchwork.kernel.org: 진행 중인 패치의 상태 (적용/보류/거절) 추적
표준 & 규격 (Standards & Specifications)
리눅스 커널 개발에서 참조하는 주요 산업 표준과 규격을 카테고리별로 정리합니다. 커널은 수많은 하드웨어 사양과 프로토콜 표준을 구현하며, 관련 표준 문서를 함께 읽으면 커널 코드의 설계 의도를 보다 깊이 이해할 수 있습니다.
네트워킹 (Networking)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| RFC 791 | IETF | IPv4 프로토콜 명세 — 패킷 구조, 단편화(Fragmentation), 라우팅(Routing) | 네트워크 스택, 라우팅 |
| RFC 8200 | IETF | IPv6 프로토콜 명세 — 128비트 주소, 확장 헤더, Flow Label | 네트워크 스택, 라우팅 |
| RFC 793 | IETF | TCP 프로토콜 — 3-way 핸드셰이크, 흐름 제어(Flow Control), 재전송(Retransmission) | 네트워크 스택, Netfilter |
| RFC 768 | IETF | UDP 프로토콜 — 비연결 데이터그램 전송 | 네트워크 스택 |
| RFC 826 | IETF | ARP (Address Resolution Protocol) — IPv4 → MAC 주소 변환(Address Translation) | 네트워크 스택 |
| RFC 4291 | IETF | IPv6 주소 체계 — 주소 형식, 스코프, 유니캐스트/멀티캐스트 | 라우팅 |
| RFC 4861 | IETF | NDP (Neighbor Discovery Protocol) — IPv6 이웃 탐색 | 라우팅 |
| RFC 1918 | IETF | 사설 IP 주소 대역 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) | NAT |
| RFC 4787 | IETF | NAT UDP 동작 요구사항 — Endpoint-Independent Mapping 등 | NAT |
| RFC 6888 | IETF | CGN(Carrier-Grade NAT) 요구사항 | NAT |
| RFC 7413 | IETF | TCP Fast Open — SYN 패킷에 데이터 포함하여 지연(Latency) 감소 | 네트워크 스택 |
| RFC 3168 | IETF | ECN (Explicit Congestion Notification) — 명시적 혼잡 알림 | Netfilter |
| IEEE 802.3 | IEEE | 이더넷 표준 — 프레임 구조, MAC, PHY, 속도별 규격 | sk_buff, BPF/XDP |
| IEEE 802.1Q | IEEE | VLAN 태깅 — 가상 LAN 프레임 분리 | 네트워크 스택 |
플랫폼 & 부팅 (Platform & Boot)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| UEFI Specification 2.10 | UEFI Forum | 통합 확장 펌웨어(Firmware) 인터페이스 — 부팅 서비스, 런타임 서비스, Secure Boot | UEFI, 부팅 과정, Secure Boot |
| ACPI Specification 6.5 | UEFI Forum | 고급 구성 및 전원 인터페이스 — DSDT/SSDT, 전원 상태, 핫플러그(Hotplug) | ACPI, 부팅 과정, 전원 관리(Power Management) |
| Intel SDM (Software Developer's Manual) | Intel | x86/x64 아키텍처 전체 레퍼런스 — 명령어, 메모리, 인터럽트, 가상화 | 커널 아키텍처, 메모리 관리 |
| ARM Architecture Reference Manual (ARM ARM) | ARM | AArch64 아키텍처 레퍼런스 — 예외 레벨, 메모리 모델, NEON/SVE | 커널 아키텍처, 메모리 관리 |
| Multiboot Specification | GNU/FSF | 부트로더(Bootloader) ↔ 커널 인터페이스 표준 (GRUB 등) | 부팅 과정 |
| GPT (GUID Partition Table) | UEFI Forum | UEFI 기반 디스크 파티션 테이블 형식 | 디스크 파티션, UEFI |
| Device Tree Specification | devicetree.org | 하드웨어 구성 기술 형식 — ARM/RISC-V 플랫폼의 디바이스 열거 | 디바이스 드라이버 |
POSIX & ABI
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| POSIX.1-2017 (IEEE Std 1003.1) | IEEE/The Open Group | UNIX 호환 OS 표준 — 시스템 콜, 시그널, IPC, 파일 시맨틱 | 시스템 콜, 프로세스, VFS, IPC |
| System V ABI | SCO/AT&T | UNIX 호출 규약(Calling Convention) — 공유 라이브러리(Shared Library), ELF 적재, IPC 시맨틱 | 프로세스, 시스템 콜 |
| ELF (Executable and Linkable Format) | TIS Committee | 실행 파일/공유 라이브러리/코어 덤프(Core Dump)의 표준 바이너리 형식 | 프로세스 |
| DWARF Debugging Format | DWARF Committee | 디버그 정보 표준 — GDB, ftrace 등에서 사용 | 디버깅 |
메모리 & DMA (Memory & DMA)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| Intel VT-d (Virtualization Technology for Directed I/O) | Intel | IOMMU 사양 — DMA 리매핑, 인터럽트 리매핑 | DMA, 메모리 |
| AMD-Vi (AMD I/O Virtualization Technology) | AMD | AMD IOMMU 사양 — DMA/인터럽트 가상화 | DMA, 메모리 |
| JEDEC DDR5 SDRAM (JESD79-5) | JEDEC | DDR5 메모리 타이밍, 전압, 채널 구조 사양 | 메모리 관리, NUMA |
| CXL Specification 3.1 | CXL Consortium | Compute Express Link — CPU-디바이스 간 캐시 일관성(Cache Coherency) 인터커넥트 | NUMA, PCI/PCIe |
동기화 & 메모리 모델 (Synchronization & Memory Model)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| C11 Memory Model (ISO/IEC 9899:2011) | ISO/IEC | C 언어 원자적 연산(Atomic Operation) 및 메모리 순서(memory order) 정의 | 동기화, Atomic |
| C++11 Memory Model (ISO/IEC 14882:2011) | ISO/IEC | C++ 원자적 연산, 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 Community | ext4 디스크 레이아웃, 저널링(Journaling), extents, 기능 플래그 문서 | ext4 |
| FUSE Protocol (kernel.org) | Linux Community | 사용자 공간(User Space) 파일시스템 프로토콜 — 커널 ↔ 사용자 메시지 형식 | FUSE |
디바이스 (Devices)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| PCI Local Bus Specification 3.0 | PCI-SIG | PCI 버스(Bus) 아키텍처 — 설정 공간, BAR, 인터럽트 | PCI/PCIe |
| PCI Express Base Specification 6.0 | PCI-SIG | PCIe 직렬 인터커넥트 — 레인, 속도(64 GT/s), TLP, DLLP | PCI/PCIe, GPU |
| DisplayPort 2.1 | VESA | 디스플레이 인터페이스 — 고해상도, MST, DSC | GPU |
| HDMI 2.1 | HDMI Forum | 멀티미디어 인터페이스 — 4K/8K, eARC, VRR, ALLM | GPU |
| E-EDID (Enhanced Extended Display Identification Data) | VESA | 디스플레이 정보 교환 — 해상도, 주사율, HDR 메타데이터 | GPU |
컨테이너 & 가상화 (Containers & Virtualization)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| OCI Runtime Specification 1.0 | OCI (Open Container Initiative) | 컨테이너 런타임 표준 — 네임스페이스(Namespace), cgroups, seccomp 프로파일 | Linux Containers, 네임스페이스, cgroups |
| OCI Image Format Specification | OCI | 컨테이너 이미지 형식 — 레이어, 매니페스트, 설정 | Linux Containers |
| Intel VT-x (Virtualization Technology) | Intel | CPU 하드웨어 가상화 — VMX, VMCS, EPT, VPID | 가상화 (KVM) |
| AMD-V (AMD Virtualization) | AMD | AMD CPU 가상화 — SVM, VMCB, NPT, AVIC | 가상화 (KVM) |
| virtio Specification 1.2 | OASIS | 가상 I/O 디바이스 표준 — virtqueue, vring, 디바이스 타입 | 가상화 (KVM) |
보안 & 암호화 (Security & Cryptography)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| FIPS 140-3 | NIST | 암호 모듈 보안 요구사항 — 커널 Crypto Framework (Crypto API) 인증 기준 | Linux Crypto Framework (Crypto API), Secure Boot |
| FIPS 197 (AES) | NIST | AES 블록 암호 표준 — 128/192/256비트 키 | Linux Crypto Framework (Crypto API) |
| FIPS 180-4 (SHA) | NIST | SHA-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~F | NIST | 블록 암호 운용 모드 — CBC, CTR, GCM, CCM, XTS 등 | Linux Crypto Framework (Crypto API) |
| ISO/IEC 15408 (Common Criteria) | ISO/IEC | IT 보안 평가 기준 — EAL 등급, 보안 기능 요구사항 | 커널 보안 |
| TPM 2.0 Library Specification | TCG | 신뢰 플랫폼 모듈 — 보안 부팅, 키 저장, 원격 증명 | 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 Pro | FIPS 채널 지원 여부, 커널/라이브러리 적용 범위 | Ubuntu Pro 보안 문서 + pro status + 릴리스 노트 |
| SUSE 계열 | FIPS 모듈 제공 범위, 커널 옵션, 정책 파일 | SUSE 보안 문서 + 배포판 도구(YaST 등) 상태 점검 |
| 클라우드 배포판 | 클라우드 이미지의 FIPS 인증/검증 범위 | 클라우드 공급자 보안 가이드 + 이미지 릴리스 노트 |
/proc/sys/crypto/fips_enabled값 확인 (부트 파라미터 적용 여부)/proc/crypto의selftest,driver,priority점검- 벤더 정책 문서의 적용 범위(커널만/사용자 공간 포함) 확인
- 인증 번호/유효 기간/대상 버전이 현재 운영 버전과 일치하는지 검증
스토리지 (Storage)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| NVMe Specification 2.0 | NVM Express | NVMe 인터페이스 — 커맨드 세트, 큐 구조, 네임스페이스 | 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, TRIM | Block I/O |
타이머(Timer) & 클럭 (Timers & Clocks)
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| IEEE 1588 (PTP) | IEEE | 정밀 시간 프로토콜 — 나노초 수준 네트워크 시간 동기화 | 타이머, ktime/Clock |
| ACPI Power States (C-states, P-states) | UEFI Forum | CPU/디바이스 전원 상태 정의 — 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) | AMD | AMD64 아키텍처 — 명령어, 시스템 프로그래밍, MSR | CPU 토폴로지, CPU 캐시, MSR |
| CPUID Specification | Intel / AMD | CPU 기능 식별 — 기능 플래그, 캐시 정보, 토폴로지 열거 | CPU 토폴로지 |
기타 ABI & Language
| 규격명 | 발행 기관 | 설명 | 관련 페이지 |
|---|---|---|---|
| System V AMD64 ABI (x86-64 ABI) | AMD / community | x86-64 호출 규약 — 레지스터 용도, 스택 프레임(Stack Frame), 시스템 콜 ABI | 어셈블리(Assembly), 시스템 콜 |
| ARM AAPCS (Procedure Call Standard) | ARM | ARM/AArch64 함수 호출 규약 — 레지스터, 스택, 반환 값 | 어셈블리 |
| The Rust Reference | Rust Project | Rust 언어 명세 — 소유권, 수명, unsafe, FFI | Rust 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/cpuinfo | CPU 정보, 기능 플래그 | 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 -w vm.swappiness=10은 즉시 적용되지만 재부팅 시 초기화됩니다. 영속적으로 적용하려면 /etc/sysctl.d/99-custom.conf에 vm.swappiness = 10을 추가하고 sysctl --system을 실행합니다. 프로덕션 환경에서는 변경 전 반드시 현재 값을 기록해 두십시오.
참고 링크
커널 공식 사이트
- The Linux Kernel Archives — 최신 안정/LTS 릴리즈, 소스 타볼, 변경 로그
- docs.kernel.org — Documentation/ 디렉토리의 온라인 HTML 렌더링
- git.kernel.org — 커널 공식 Git 저장소 브라우저 (Linus 트리, 서브시스템 트리)
- lore.kernel.org — 커널 메일링 리스트 공식 아카이브 (LKML, netdev, linux-mm 등)
- patchwork.kernel.org — 메일링 리스트 패치 상태 추적
- bugzilla.kernel.org — 커널 버그 리포트 및 추적 시스템
- kernel.org — Releases — 릴리즈 히스토리 및 EOL 정보
커널 공식 문서 핵심 경로
- HOWTO do Linux kernel development — 커널 개발 참여 방법 공식 가이드
- Submitting patches — 패치 형식, 커밋 메시지, Signed-off-by 규칙
- Linux kernel coding style — 커널 코딩 스타일 가이드
- Development Process — 릴리즈 사이클, 머지 윈도우, RC 프로세스
- Stable kernel rules — Stable/LTS 패치 백포트 기준
- Core API Documentation — 커널 핵심 API 레퍼런스
- Driver API Documentation — 디바이스 드라이버 API
- Admin Guide — 커널 파라미터, sysctl, 시스템 관리
- Networking Documentation — 네트워킹 서브시스템 문서
LWN.net
- LWN.net — 리눅스 커널 개발 뉴스, 심층 기술 기사
- LWN Kernel Index — 주제별 커널 기사 색인
- Linux Device Drivers, 3rd Edition (무료 온라인) — LDD3 전문 무료 공개
소스 코드 탐색
- Bootlin Elixir Cross-Referencer — 심볼 정의/참조 추적, 버전별 소스 비교
- OpenGrok (kernel.org) — 전체 텍스트 검색, 정규식, 파일 경로 필터
- GitHub — torvalds/linux — Linus Torvalds 공식 GitHub 미러
- Linux man-pages project — 시스템 콜, C 라이브러리, /proc 파일 공식 매뉴얼
- Linux Kernel Driver DataBase (LKDDb) — Kconfig 옵션과 디바이스 ID 매핑
온라인 강좌 및 학습
- LFD103 — A Beginner's Guide to Linux Kernel Development — Linux Foundation 무료 입문 강좌
- Bootlin Training — 커널 내부/드라이버/임베디드 리눅스 무료 슬라이드
- kernelnewbies.org — 입문자용 커널 개발 가이드, 릴리즈별 변경사항
- KernelNewbies — Linux Versions — 버전별 주요 기능 변경사항 인간 친화적 정리
- LKMPG (Linux Kernel Module Programming Guide) — 커널 모듈 프로그래밍 단계별 가이드
- linux-insides — 커널 부팅, 인터럽트, 메모리 관리 소스 수준 분석
- Linux Kernel Teaching Labs — 부쿠레슈티 공과대학 커널 실습 자료
- Eudyptula Challenge 아카이브 — 20개 단계별 커널 개발 과제
eBPF 및 성능 분석
- ebpf.io — Get Started — eBPF 공식 포털, 입문 가이드, 프로젝트 목록
- XDP Tutorial — XDP 네트워크 패킷 처리 실습
- Brendan Gregg's Homepage — 성능 분석 도구, eBPF, 시스템 성능 자료
- BCC (BPF Compiler Collection) — eBPF 기반 성능 분석 도구 모음
- bpftrace — 고수준 eBPF 추적 언어
Rust for Linux
- Rust for Linux 공식 위키 — 개발 환경 설정, 기여 가이드, 예제 드라이버
- The Rustonomicon — unsafe Rust, FFI, 원시 포인터, 메모리 레이아웃
- The Rust Reference — Rust 언어 공식 명세
커뮤니티 및 소통 채널
- LKML.org — LKML 메일링 리스트 웹 아카이브
- syzbot dashboard — 자동 퍼징으로 발견된 커널 버그 현황
- Stack Overflow — linux-kernel 태그 — 커널 관련 Q&A
- ArchWiki — 리눅스 시스템 관리 가이드 (실무 중심)
컨퍼런스 및 발표 영상
- Linux Plumbers Conference (LPC) — 커널 저수준 인프라 개발자 컨퍼런스
- Kernel Recipes — 고밀도 커널 기술 컨퍼런스 (파리)
- FOSDEM Video Archive — FOSDEM 전체 발표 영상 무료 제공
- Linux Foundation YouTube — LPC, OSS Summit, ELC 영상 아카이브
- Kernel Recipes YouTube — 커널 심층 기술 발표 영상
- FOSDEM YouTube — FOSDEM 전체 발표 영상
개발 도구
- GCC (GNU Compiler Collection) — 커널 빌드의 기본 컴파일러
- GNU Binutils — ld, objdump, nm, readelf, as 도구 모음
- GDB (GNU Debugger) — 커널 원격 디버깅 도구
- GNU Make — Kbuild 빌드 시스템의 기반 도구
- GNU Global (gtags) — 소스 코드 태깅 시스템
- Clang/LLVM — 커널 빌드 대체 컴파일러 (CONFIG_CC_IS_CLANG)
- Coccinelle — 의미 기반 패치(semantic patch) 도구
- syzkaller — 커버리지 기반 커널 퍼저
- KUnit Documentation — 커널 유닛 테스트 프레임워크 공식 문서
- LTP (Linux Test Project) — 종합 커널 테스트 스위트
표준 및 규격 원문
- POSIX.1-2017 (IEEE Std 1003.1) — UNIX 호환 OS 표준
- Intel® 64 and IA-32 Architectures SDM — x86/x64 아키텍처 전체 레퍼런스
- Arm Architecture Reference Manual (ARMv8-A/ARMv9) — AArch64 아키텍처 레퍼런스
- RISC-V Specifications — RISC-V ISA 공식 규격
- UEFI Specifications — UEFI, ACPI 규격 원문
- RFC Editor — 네트워킹 프로토콜 공식 규격 (TCP, UDP, IP 등)
- JEDEC — DDR, eMMC, UFS 등 메모리/스토리지 규격
- PCI-SIG Specifications — PCI Express 규격
- NVM Express Specifications — NVMe 인터페이스 규격
- CXL Specification — Compute Express Link 인터커넥트 규격
- Device Tree Specification — 하드웨어 구성 기술 형식
- NIST FIPS Publications — FIPS 140-3, AES, SHA 등 암호화 표준
- virtio Specification 1.2 — 가상 I/O 디바이스 표준
- Open Container Initiative (OCI) — 컨테이너 런타임/이미지 표준
한국 커뮤니티 및 자료
- KLDP Wiki — 한국 리눅스 문서 프로젝트 위키
- 커널 공식 문서 한국어 번역 — Documentation/translations/ko_KR/ 온라인 렌더링
관련 문서
참고자료와 함께 활용하면 좋은 문서들입니다.