이 글에서는 리눅스 커널 소스의 주요 구조를 간략하게 알아본다.
arch
arch 하부 디렉토리에는 아키텍처별로 동작하는 커널 코드가 있다 .예를 들어, x86, ARM, MIPS 등 아키텍처 dependency가 있는 코드들이 위치한다.
/arch
/arm
/boot
/config
...
/x86
/boot
/kernel
...
...
include
include 에는 커널 코드 빌드에 필요한 헤더파일들이 위치한다.
/include
/asm-generic
/linux
/uapi
...
Documentation
커널 기술 문서가 위치한 폴더로, 커널 기본 Feature 들을 설명하는 문서를 찾을 수 있다. 따라서, 개발자들이 코드를 이해하는데 도움이 되는 문서들이 많이 있다.
/Documentation
/admin-guide
/devicetree
/filesystems
...
kernel
커널 핵심 코드가 여기에 위치하는데 다음과 같은 하위 디렉토리를 확인할 수 있다.
irq
: 인터럽트 관련 코드sched
: 스케줄링 코드power
: 커널 파워 관리 코드locking
: 커널 동기화 관련 코드printk
: 커널 콘솔 관련 코드trace
: ftrace 관련 코드
mm
Memory Managerment 약자로 가상 메모리 및 페이징 관련 코드들이 위치한다. 아키텍처 종속전인 메모리 관리 관련 소스는 arch/*/mm
아래에 위치한다.
/mm
/debug.c
/filemap.c
/mempolicy.c
...
drivers
디바이스 드라이버 코드가 위치한다. 하부 디렉토리에 디바이스 드라이버 종류별 소스가 분류되어 있다.
/drivers
/block
/char
/gpu
/net
...
fs
리눅스에서 사용되는 다양한 파일시스템 과 관련된 코드가 위치한다. fs 폴더에는 파일 시스템 공통 코드들이 위치하고 각 파일 시스템별로 세분화된 코드들은 개별 디렉토리들에 위치한다.
/fs
/ext4
/fat
/ntfs
...
block
블록 디바이스와 관련된 코드, 즉 디스크 및 파일 시스템과 관련된 코드들이 위치한다.
/block
/bsg.c
/crypto
/genhd.c
...
lib
lib 디렉토리에는 커널에서 제공하는 라이브러리 코드들이 위치한다. 커널은 libc 함수들을 사용할 수 없기 때문에 별도로 라이브러이가 구현되어 있다. 아키텍처 종속적인 코드는 arch/*/lib
에 위치하고 있다.