728x90
반응형
Embedded Linux에서 Root Filesystem 생성하기
임베디드 시스템에서 Linux Kernel을 구동하려면 Root Filesystem(이하 Rootfs)이 반드시 필요합니다. Rootfs는 커널이 부팅한 후 시스템 동작에 필요한 기본 파일, 라이브러리, 그리고 실행 파일 등을 포함합니다. 이 글에서는 Rootfs 생성 방법과 최적화, 커스터마이징 방법을 Rockchip RK3399 플랫폼을 기준으로 설명합니다.
1. Root Filesystem의 개념
Rootfs는 다음과 같은 요소들로 구성됩니다:
- 기본 디렉토리 구조:
/bin
,/lib
,/etc
,/dev
,/usr
,/var
등. - 필수 파일 및 라이브러리:
init
파일, C 표준 라이브러리 등. - 필수 디바이스 파일:
/dev
디렉토리 내의 파일들. - 응용 프로그램: 시스템 동작을 위해 필요한 실행 파일들.
2. Rootfs 생성 방법
2.1 BusyBox를 사용한 Rootfs 생성
BusyBox는 다양한 유닉스 명령어와 기능을 하나의 바이너리에 통합한 경량화된 도구입니다.
BusyBox 설치 및 컴파일
- BusyBox 소스 코드 다운로드:
wget https://busybox.net/downloads/busybox-<버전>.tar.bz2
tar -xvjf busybox-<버전>.tar.bz2
cd busybox-<버전>
- 컴파일 설정:
make menuconfig
Build Options
에서Build Static Binary
활성화.Installation Options
에서 설치 경로 설정.
- 컴파일 및 설치:
make -j$(nproc)
make install
- Rootfs 디렉토리 생성:
mkdir -p rootfs/{bin,sbin,etc,proc,sys,usr/{bin,sbin},dev}
cp -r _install/* rootfs/
- 디바이스 파일 생성:
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3
- Rootfs 압축:
cd rootfs
tar -czf ../rootfs-busybox.tar.gz .
2.2 Buildroot를 사용한 Rootfs 생성
Buildroot는 임베디드 Linux 시스템을 구성하는 도구입니다.
Buildroot 설치 및 컴파일
- Buildroot 다운로드:
git clone https://github.com/buildroot/buildroot.git
cd buildroot
- 기본 설정:
make menuconfig
Target options
에서 타겟 아키텍처를aarch64
로 설정.Filesystem images
에서 Rootfs 이미지 형식(ext4
,tar
) 선택.
- 컴파일:
make -j$(nproc)
- 생성된 Rootfs 확인:
ls output/images/
- Rootfs 압축:
cp output/images/rootfs.tar.gz ./rootfs-buildroot.tar.gz
2.3 Yocto를 사용한 Rootfs 생성
Yocto는 고도로 커스터마이징 가능한 빌드 시스템입니다.
Yocto 설치 및 환경 설정
- Yocto 다운로드:
git clone git://git.yoctoproject.org/poky.git
cd poky
git checkout <버전>
source oe-init-build-env
- 머신 설정:
conf/local.conf
파일에서 머신을 RK3399로 설정:
MACHINE = "rockchip-rk3399"
- Rootfs 빌드:
bitbake core-image-minimal
- 생성된 Rootfs 확인:
ls tmp/deploy/images/rockchip-rk3399/
3. Rootfs 최적화 및 커스터마이징
3.1 필요하지 않은 파일 제거
- 기본적으로 포함된 디렉토리와 파일 중 사용하지 않는 항목을 제거합니다.
rm -rf rootfs/usr/share/{man,doc,info}
3.2 경량화된 라이브러리 사용
- glibc 대신 musl 또는 uClibc와 같은 경량화된 라이브러리를 사용하여 크기를 줄입니다.
3.3 필수 응용 프로그램 추가
- 추가로 필요한 도구나 애플리케이션을 Rootfs에 포함합니다.
cp /path/to/app rootfs/usr/bin/
3.4 초기화 스크립트 작성
- Rootfs의
/etc/init.d/rcS
파일에 초기화 스크립트를 작성합니다.
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mdev -s
4. 테스트 및 배포
- QEMU를 사용한 테스트:
qemu-system-aarch64 -M virt -cpu cortex-a53 -m 512M -kernel Image \
-initrd rootfs-busybox.tar.gz -nographic
- 실제 RK3399 시스템에 Rootfs 배포:
- SD 카드에 Rootfs 복사:
sudo dd if=rootfs.tar.gz of=/dev/sdX bs=4M
결론
이 글에서는 BusyBox, Buildroot, Yocto를 사용하여 Rootfs를 생성하는 방법과 이를 최적화 및 커스터마이징하는 방법을 소개했습니다. Rootfs를 성공적으로 생성하면, 시스템에 적합한 애플리케이션과 설정을 추가하여 원하는 기능을 구현할 수 있습니다. RK3399와 같은 플랫폼에서도 이러한 방법을 활용하여 효율적인 Rootfs를 구축할 수 있습니다.
반응형
'Linux > Kernel Driver' 카테고리의 다른 글
Embedded Linux: Character Device Driver 작성 (0) | 2025.03.17 |
---|---|
Linux Kernel 모듈 기본 (0) | 2025.03.16 |
Embedded Linux Kernel 설정 - Kernel Configuration (0) | 2025.03.14 |
Embedded Linux Kernel: Bootloader 설정 및 커스터마이징 (0) | 2025.03.13 |
Board Support Package (BSP) 이해 (0) | 2025.03.12 |