ramdisk
이전에 설명한 루트 파일 시스템을 마운트하기 전, 임시로 RAM을 disk로 사용하여 최소한의 기능만을 가진 initrd(initial RAM disk)가 마운트 되어 커널 부팅 프로세스의 일부로 실행됨.
부트로더는 커널과 ramdisk를 load하고, 커널에게 ramdisk에 대한 정보를 전달 함(메모리 내 위치 정보).
커널은 initrd를 마운트 하고 linuxrc가 실행되어 리눅스 부팅 초기화를 실행 함.
이와 같이 초기 부팅 과정을 따로 분리함으로써 최소한의 커널 드라이버와 기능을 가지고 insmod를 통해 커널 모듈을 동적으로 loading 할 수 있는 장점과 동적으로 파일 시스템(ext4, etc...)을 마운트 하는 등 부팅 과정에서 유연한 구성이 가능해 짐.
이후 실제 루트 파일 시스템을 마운트 한 뒤 initrd는 umount
소규모 임베디드 시스템에서는 initrd를 언마운트 하지 않고 initrd를 그대로 루트 파일 시스템으로 사용.
initramfs
최근에는 initrd보다 initramfs를 주로 사용 함
initramfs는 .cpio의 압축된 형태로 메모리를 최소한으로 사용한다는 점과 사용자가 쉽게 수정하여 사용할 수 있다는 장점이 있음. 또한 커널에 포함시킬수 있는 편리성이 있음
Busybox를 이용한 initramfs 생성
1. busybox 설치 및 빌드
target에 맞게 config 설정 후 빌드를 진행하면 _install 디렉토리에 빌드 결과물 생성
git clone git://busybox.net/busybox.git
cd busybox
# config 설정
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
# 빌드
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
2. 디렉토리 구성
이후 _install 디렉토리로 이동하여 필요한 기본 디렉토리를 추가ㅣ해야 함
cd _install
mkdir -p dev etc/init.d home/root lib mnt proc root sys tmp usr/lib var
3. init script(rcS)생성
vi etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
exec /bin/sh
위와 같이 init script에 mount할 내용이나 모듈 insmod 명령을 기재, 또한 sh 실행 명령을 기재
이후 하기와 같이 실행 권한 부여
chmod +x rcS
4. 압축
cd initramfs # 구성한 initramfs 디렉토리로 이동
find . | cpio -o -H newc | gzip > ../initramfs.cpio
'Linux System > Linux' 카테고리의 다른 글
Root File System (0) | 2023.12.28 |
---|---|
[cmd] sed (0) | 2022.03.15 |
Console, Terminal, TTY (0) | 2022.03.10 |
[func] mmap() / munmap() - memory 맵핑 (0) | 2021.07.23 |
[cmd] install 명령어 (0) | 2020.08.05 |