1초 만에 부팅되는 '맨몸' 리눅스 커널 만들기
리눅스 커널을 활용해 불필요한 OS 요소를 제거하고 단일 프로세스만 실행하는 초고속 부팅 시도
커스텀 initrd 제작 및 정적 컴파일을 통해 부팅 시간 1초 미만 달성
가상화 환경(QEMU/KVM) 및 EFI 부팅을 통한 실제 하드웨어 적용 방안 모색
커뮤니티에서는 RAM 기반 시스템 및 SD 카드 내구성 문제 해결 사례 공유
커널 최소화를 통한 부팅 최적화
본문에서는 리눅스 커널(Linux Kernel)에서 불필요한 모듈과 서비스를 제거하여 부팅 시간 단축을 목표로 한다. 특히, 정적 컴파일(Static Compilation)된 단일 `init` 프로세스를 포함하는 커스텀 initrd를 생성하여, 기존 배포판의 수십 MB에 달하는 initrd와 달리 극도로 경량화된 환경을 구축한다. 이는 시스템 리소스(System Resources) 사용을 최소화하고 특정 목적에 최적화된 임베디드 시스템 구축에 유용할 수 있다.
커스텀 initrd 및 init 프로세스 구현
작성자는 `init.c` 파일을 작성하고 `gcc -static`으로 컴파일한 후, `cpio`와 `gzip`을 사용하여 단일 파일 initrd를 생성하는 과정을 상세히 설명한다. `init` 프로세스는 단순히 메시지를 출력하고 시스템을 종료(`reboot(RB_POWER_OFF)`)하도록 설계되었다. 이는 리눅스 부팅 프로세스(Linux Boot Process)의 핵심인 `/init` 프로세스 실행 메커니즘을 직접 제어하는 방법을 보여준다. 커뮤니티에서는 `/dev/console` 노드 부재 시 부팅 실패 가능성을 언급하며, devtmpfs 마운트의 중요성을 강조한다.
가상화 및 EFI 부팅 환경 구성
실제 하드웨어 적용의 번거로움을 피하기 위해 QEMU/KVM을 활용한 가상화 환경에서 실험을 진행한다. `-kernel`, `-initrd`, `-append` 옵션을 사용하여 커스텀 커널과 initrd로 부팅하는 방법을 제시한다. 또한, EFI 부팅을 위해 `systemd-ukify` 도구를 사용하여 통합 커널 이미지(Unified Kernel Image)를 생성하고 USB에 배포하는 과정을 설명한다. 이는 UEFI 펌웨어(UEFI Firmware)의 부팅 메커니즘과 파일 시스템 요구사항을 이해하는 데 도움을 준다.
커널 설정(menuconfig) 및 최적화
기존의 거대한 커널 대신 `make tinyconfig` 후 필요한 기능만 선택적으로 활성화하는 커널 재컴파일(Kernel Recompilation) 과정을 소개한다. 최적화 레벨(-Os) 설정, devtmpfs 지원, 직렬 포트(Serial Port) 드라이버 활성화 등 특정 목적에 맞게 커널을 경량화하는 기법을 다룬다. 이는 공격 표면(Attack Surface)을 줄여 보안성을 향상시키고, 임베디드 시스템(Embedded Systems)이나 특수 목적 장치 개발에 필수적인 과정이다.
커뮤니티의 유사 경험 및 대안
한 사용자는 라즈베리 파이(Raspberry Pi)에서 SD 카드 고장 문제로 인해 RAM 기반 시스템을 구축했던 경험을 공유한다. 이 과정에서 `/dev/console` 노드의 필요성을 언급하며, glibc, systemd, mesa 스택을 64MB 미만으로 압축하는 데 성공했다고 밝힌다. 또한, Rust로 작성된 유사 프로젝트인 'Building a tiny Linux from scratch'를 대안으로 제시하며, 다양한 접근 방식이 존재함을 시사한다.