리눅스 커널 소스의 구조

이 글에서는 리눅스 커널 소스의 주요 구조를 간략하게 알아본다.

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 에 위치하고 있다.

참고

답글 남기기