Linux Kernel은 운영체제의 핵심이지만, 모든 기능을 처음부터 Kernel 내부에 포함할 필요는 없습니다. 네트워크 카드, USB 장치, 파일 시스템, 그래픽 카드 등 다양한 하드웨어와 기능을 지원하기 위해 Kernel Module(커널 모듈) 이라는 구조를 사용합니다.
Kernel Module은 시스템을 재부팅하지 않고도 필요한 기능을 동적으로 추가하거나 제거할 수 있게 해주는 중요한 기능입니다. 새로운 장치를 연결했을 때 자동으로 드라이버가 로드되는 것도 대부분 Kernel Module 덕분입니다.
이번 글에서는 Kernel Module의 개념과 역할, 동작 방식, 그리고 실무에서 어떻게 활용되는지 알아보겠습니다.
Kernel Module이란?
Kernel Module은 Linux Kernel에 필요한 기능을 동적으로 추가하거나 제거할 수 있는 프로그램입니다.
Kernel을 다시 컴파일하거나 재부팅하지 않아도 필요한 기능을 메모리에 올릴 수 있습니다.
대표적인 Kernel Module은 다음과 같습니다.
- 장치 드라이버(Device Driver)
- 파일 시스템
- 네트워크 프로토콜
- USB 드라이버
- 사운드 드라이버
- 가상화 기능(KVM)
- 방화벽(Netfilter)
Kernel은 필요한 순간에 해당 모듈을 메모리에 로드하여 기능을 제공합니다.
Kernel Module이 필요한 이유
Kernel에 모든 드라이버와 기능을 항상 포함한다면 다음과 같은 문제가 발생합니다.
- Kernel 크기 증가
- 메모리 사용량 증가
- 부팅 속도 저하
- 유지보수 어려움
- 불필요한 드라이버 실행
Kernel Module을 사용하면 필요한 기능만 선택적으로 로드할 수 있어 시스템 자원을 효율적으로 사용할 수 있습니다.
Kernel Module의 동작 과정
Kernel Module의 동작 흐름은 다음과 같습니다.
시스템 부팅
↓
Kernel 실행
↓
장치 연결
↓
필요한 Kernel Module 검색
↓
Module 메모리 로드
↓
장치 사용 가능
예를 들어 USB 메모리를 연결하면 해당 USB 드라이버 모듈이 자동으로 로드됩니다.
Kernel Module 파일 위치
대부분의 Kernel Module은 다음 경로에 저장됩니다.
/lib/modules/커널버전/
예시
/lib/modules/6.8.0-52-generic/
현재 Kernel에 맞는 Module들이 이 디렉터리에 저장됩니다.
확인
ls /lib/modules/$(uname -r)
현재 로드된 Module 확인
현재 메모리에 로드되어 있는 Module은 다음 명령으로 확인할 수 있습니다.
lsmod
출력 예시
Module Size Used by
kvm 98304 1
nf_tables 327680 2
usb_storage 86016 1
각 행은 현재 Kernel이 사용 중인 Module을 의미합니다.
특정 Module 정보 확인
특정 Module의 상세 정보를 확인하려면 modinfo 명령을 사용합니다.
예시
modinfo usb_storage
출력 예시
filename:
/lib/modules/.../usb_storage.ko
license:
GPL
description:
USB Mass Storage Driver
라이선스, 작성자, 설명, 지원 장치 등을 확인할 수 있습니다.
Module은 언제 로드될까?
Kernel Module은 다음과 같은 경우 자동으로 로드됩니다.
- 시스템 부팅
- USB 장치 연결
- 네트워크 장치 활성화
- 파일 시스템 마운트
- 가상화 기능 사용
- 특정 하드웨어 인식
또한 관리자가 직접 로드할 수도 있습니다.
Kernel Module과 Device Driver의 관계
Device Driver 대부분은 Kernel Module 형태로 제공됩니다.
예를 들어
- NVIDIA 드라이버
- Intel Network Driver
- USB Driver
- SATA Driver
- NVMe Driver
모두 Kernel Module 형태로 동작하는 경우가 많습니다.
즉, Device Driver는 Kernel Module의 대표적인 예라고 볼 수 있습니다.
Kernel Module의 장점
Kernel Module을 사용하면 다음과 같은 장점이 있습니다.
- 재부팅 없이 기능 추가 가능
- 메모리 효율 향상
- Kernel 크기 감소
- 유지보수 편리
- 하드웨어 확장 용이
- 드라이버 업데이트 간편
이러한 이유로 대부분의 Linux 배포판은 모듈 방식을 적극적으로 사용합니다.
Kernel Module과 내장(Built-in) 기능의 차이
Kernel 기능은 크게 두 가지 방식으로 제공됩니다.
| 항목 | Kernel Module | Built-in |
|---|---|---|
| 로드 시점 | 필요 시 | 부팅 시 |
| 재부팅 필요 | 없음 | 변경 시 필요 |
| 메모리 사용 | 효율적 | 항상 사용 |
| 제거 가능 | 가능 | 불가능 |
| 파일 형태 | .ko | Kernel 내부 |
.ko는 Kernel Object 파일을 의미하며, Linux Kernel Module의 표준 형식입니다.
실무에서 자주 사용하는 명령어
현재 Kernel 확인
uname -r
로드된 Module 확인
lsmod
Module 정보 확인
modinfo 모듈명
Kernel Module 저장 위치 확인
ls /lib/modules/$(uname -r)
PCI 장치 확인
lspci -k
USB 장치 확인
lsusb
자주 묻는 질문
Kernel Module은 반드시 필요한가요?
모든 시스템에서 반드시 필요한 것은 아니지만, 대부분의 하드웨어 드라이버와 기능 확장은 Kernel Module을 통해 제공됩니다.
Module을 추가하면 재부팅해야 하나요?
대부분은 재부팅이 필요하지 않습니다. 모듈을 메모리에 로드하면 즉시 사용할 수 있습니다.
모든 Driver가 Module 형태인가요?
아닙니다. 일부 드라이버는 Kernel에 내장(Built-in)되어 있으며, 나머지는 .ko 파일 형태의 Kernel Module로 제공됩니다.
마무리
Kernel Module은 Linux Kernel에 필요한 기능을 동적으로 추가하거나 제거할 수 있도록 해주는 핵심 기술입니다. 장치 드라이버, 파일 시스템, 네트워크 기능 등 대부분의 확장 기능은 Kernel Module을 통해 제공되며, 이를 통해 Linux는 높은 확장성과 효율성을 유지합니다. lsmod, modinfo와 같은 명령어를 익혀두면 서버 운영과 장애 분석 시 큰 도움이 됩니다.