QEMU, buildroot 를 통해 Linux Kernel 부팅하기

문연수·2021년 8월 6일
1

Embedded Linux

목록 보기
1/4
post-thumbnail

먼저 주의사항에 대해 말하겠다. 필자도 이게 어떻게 돌아가는건지 정확하게 모른다! 다만 돌아간다는 것만 알고 있다. 일단 돌아가긴 하니까... 기록에 의미로 적어두려 한다...

말 그대로 Raspberry Pi 4 보드에서 QEMUbuildroot 를 통해 Linux Kernel 이미지를 부팅할 예정이다.

0. 하드웨어 & 커널 정보

하드웨어

보드: Raspberry Pi 4 8 GiB
운영체제: Raspberry Pi OS 64-bit

커널 버전 및 빌드 정보

  • Version - Linux Kernel 5.10v
  • Architecture - arm64
  • Configuration - defconfig

1. 기본 작업

Raspberry Pi OS 64-bit 설치

우선 Raspberry Pi 4 보드에 Raspberry Pi OS 64-bit 를 설치해야 한다. 이는 필자가 예전에 작성한 글을 토대로 진행하면 된다. 다만 이미지 파일은 여기에서 받아야 한다. 다운받고 uSD 를 RPI-Imager 로 지져버리면 된다.

커널 빌드 패키지 설치

커널 빌드에 필요한 기본적인 패키지를 설치한다:

sudo apt-get install aptitude
sudo aptitude install git-all fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
sudo apt-get install qemu

2. 커널 빌드

make mrproper
make ARCH=arm64 O=../build-5.10 defconfig CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 O=../build-5.10 -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-

3. buildroot 파일 시스템

여기가 진짜 극악이다. 정말 정말 오래 걸리니 (필자는 대략 4 시간 정도 걸렸다) 그냥 마음을 비우고 딴 일을 하기 바란다. 잠깐 다른 일 하고 오면 다 됐을.... 거라 생각했다면 큰 착각이니까 기대조차 하지 말길 바란다.

git clone "https://github.com/buildroot/buildroot.git"
make qemu_aarch_virt_defconfig
make menuconfig
=> Filesystem images => cpio the root filesystem (select)
make -j$(nproc)

4. QEMU 를 통해 Guest OS 실행

sudo qemu-system-aarch64 				\
-M virt 						\
-cpu host 						\
-enable-kvm 						\
-nographic 						\
-smp 1 							\
-kernel /home/pi/build-5.10/arch/arm64/boot/Image 	\
-append "rootwait root=/dev/vda console=ttyAMA0" 	\
-netdev user,id=eth0  					\
-device virtio-net-device,netdev=eth0  			\
-drive file=/home/pi/buildroot/output/images/rootfs.ext4,\
if=none,format=raw,id=hd0 				\
-device virtio-blk-device,drive=hd0

어찌저찌 되기는 잘 되는데 문제는 GNU 프로그램이 전혀 없는 완전 생커널이다. 앞으로가 걱정이다.

profile
2000.11.30

2개의 댓글

comment-user-thumbnail
2021년 9월 18일

sudo aptitude install git-all fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

에서 install이 빠졌어유

1개의 답글