-
Buildroot로 ARM64 Linux 이미지 만들기카테고리 없음 2026. 9. 25. 22:01
macOS에서 UTM으로 실행하는 Debian ARM64 가상머신을 빌드 환경으로 사용했다. VM에는 CPU 4개, RAM 4 GiB, 가상 디스크 약 54 GB를 할당했다. 이번 목표는 Buildroot의 기본 설정으로 커널과 루트 파일시스템 이미지를 만들고, 두 결과물을 확인하는 것이었다. 아직 새 시스템을 부팅하지는 않았다.
Debian에는
build-essential,git,rsync,file,bc,unzip,patch,bzip2를 설치했다.cpio와wget은 이미 있었다. Buildroot 공식 배포처에서buildroot-2026.08.tar.xz를 받아~/os-lab에 풀었다. 아래에 환경 재현에 필요한 명령을 적어 두었다.# 관리자 권한으로 실행 apt update apt install build-essential git rsync file bc unzip patch bzip2 cpio wget# 일반 사용자로 실행 mkdir -p ~/os-lab cd ~/os-lab wget https://buildroot.org/downloads/buildroot-2026.08.tar.xz tar -xf buildroot-2026.08.tar.xz짧은 설정 파일이 전체 설정이 되기까지
Buildroot 2026.08의
configs/qemu_aarch64_virt_defconfig를 읽었다. 18줄짜리 설정에서 ARM64, Linux 커널 6.18.7, ext4 루트 파일시스템, 호스트용 QEMU 빌드 등을 선택한 것을 확인했다. 이어서 설정을 적용했다.cd ~/os-lab/buildroot-2026.08 make qemu_aarch64_virt_defconfig wc -l configs/qemu_aarch64_virt_defconfig .config grep -E '^(BR2_PACKAGE_BUSYBOX|BR2_INIT_BUSYBOX|BR2_TOOLCHAIN_BUILDROOT)=' .config
wc결과는 각각 18줄과 5,306줄이었다. 생성된.config에는 기본값과 꺼진 선택지까지 기록돼 있었다.
Buildroot는 설정에 따라 소스를 내려받고, 새 Linux 시스템에 필요한 도구 모음·커널·사용자 프로그램·파일시스템 이미지를 빌드한다.
defconfig는 그 선택을 짧게 기록한 파일이고,.config는 기본값까지 펼친 빌드 설정이다.
세 설정은 모두
y로 표시됐다.
BR2_TOOLCHAIN_BUILDROOT는 Buildroot가 새 시스템용 컴파일러 등을 빌드한다는 뜻이다.BR2_PACKAGE_BUSYBOX는 새 시스템의 파일시스템에 BusyBox를 넣는다.BR2_INIT_BUSYBOX는 그 BusyBox의init을 첫 사용자 공간 프로세스로 쓰도록 파일시스템을 구성한다.
BusyBox는
ls,sh,init같은 여러 사용자 공간 기능을 하나의 작은 실행 파일로 제공한다.init은 커널이 파일시스템을 사용할 수 있게 된 뒤 실행하는 첫 사용자 공간 프로세스(PID 1)로, 시작 스크립트와 콘솔 프로그램 등을 띄운다. 이번 빌드에서 BusyBox는 임시 도구가 아니라 새 시스템의 구성 요소다.Debian에서 부팅 이후의 상태 관찰하기
먼저 지금 사용 중인 Debian의 첫 프로세스와
ls의 출처를 확인했다.ps -p 1 -o pid,comm,args type -a ls dpkg -S "$(type -P ls)" findmnt -no SOURCE,FSTYPE,TARGET / lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINTS
PID 1은
systemd였고, 실행 경로는/sbin/init으로 표시됐다./usr/bin/ls는coreutils패키지에서 왔다.ls에 셸 별칭이 설정돼 있어type -P ls로 실행 파일 경로를 확인했다.
findmnt는/dev/vda3 ext4 /를 출력했다.lsblk에서도 가상 디스크vda의 세 번째 파티션vda3가/에 연결된 것을 확인했다.
vda는 UTM이 Debian VM에 보여주는 가상 디스크다. 설치 프로그램이 디스크에 기록한 파티션 테이블을 커널이 읽어vda1부터vda4까지 구분한다.vda3의 ext4 파일시스템에는 디렉터리 이름, 파일의 위치 등을 찾을 수 있는 정보가 기록돼 있다. ext4의 주요 설명 정보인 superblock은 파티션 시작점에서 1,024바이트 떨어진 곳에 놓인다.
마운트는 파일시스템을
/같은 경로에 연결하는 작업이다. 단순한 부팅 경로에서는 커널이 부팅 인자로 지정된 루트 장치의 파일시스템을 마운트한다. 초기 RAM 파일시스템을 사용하는 부팅은 그 안의 프로그램이 실제 루트 장치를 찾아 연결하는 단계가 추가된다. 이번 관찰만으로 Debian이 어느 경로를 거쳤는지는 확인하지 않았다.
루트 파일시스템에 접근할 수 있게 되면 커널은
/sbin/init을 찾아 사용자 공간 프로세스로 실행한다. 디스크에 있는 실행 파일의 필요한 부분을 프로세스의 메모리에 배치해 시작한다. 루트 파일시스템 이미지는 파일을 담은 저장 공간이고, 프로세스는 그 안의 실행 파일을 바탕으로 동작한다.
관찰한
/dev/vda3는 Debian VM의 파티션이다. Buildroot가 만든rootfs.ext4는 앞으로 QEMU에서 사용할 새 시스템의 파일시스템 이미지다.첫 빌드의 결과물
Debian VM에서 다음 명령으로 빌드를 진행했다.
BR2_JLEVEL=2로 패키지별 동시 빌드 작업 수를 제한했다.make BR2_JLEVEL=2 ls -lh output/images/생성된 파일 목록을 아래에 옮겼다.
total 22M -rw-r--r-- 1 ... 13M Sep 25 21:23 Image -rw-r--r-- 1 ... 60M Sep 25 21:23 rootfs.ext2 lrwxrwxrwx 1 ... 11 Sep 25 21:23 rootfs.ext4 -> rootfs.ext2 -rwxr-xr-x 1 ... 839 Sep 25 21:23 start-qemu.sh
Image는 커널 이미지다.rootfs.ext2는 루트 파일시스템 이미지 파일이며,rootfs.ext4는 그 파일을 가리키는 심볼릭 링크다.start-qemu.sh는 생성된 시스템을 QEMU에서 실행하기 위한 스크립트다.재개 지점
~/os-lab/buildroot-2026.08에서qemu_aarch64_virt_defconfig를 적용했다.output/images/에 커널 이미지, 루트 파일시스템 이미지, QEMU 실행 스크립트가 생긴 것을 확인했다. 새 시스템의 부팅과 BusyBox의 PID 1 동작은 아직 검증하지 않았다.
다음에는 파일 형식과 실행 스크립트를 확인한 뒤 새 시스템을 부팅할 예정이다.
참고