QEMU에서 AARCH64 Linux 커널을 실행하려고 합니다.
그러나 오류가 발생했으며 오류 로그는 다음과 같습니다.
rom: requested regions overlap (rom bootloader. free=0x00000000422c0a00, addr=0x0000000040000000)
qemu-system-aarch64: rom check and register reset failed
내 개발 환경은 다음과 같습니다
host: x86_64 Ubuntu 18.04
linux kernel source version: v5.19
busybox version: 1_36_stable
먼저 확인해야 할 사항을 찾을 수 없습니다. 그래서 도움이 필요해요.
내 목표를 달성하기 위해 내가 한 일은 다음과 같습니다.
- AARCH64용 Linux 커널 빌드
- 기본 구성 적용
make ARCH=arm64 defconfig -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-
- menuconfig를 사용하여 RAM 디스크를 사용하도록 "CONFIG_BLK_DEV_RAM" 구성을 설정합니다.
- 커널 빌드
make ARCH=arm64 -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-
- initramfs.gz를 만들기 위해 'busybox'를 빌드하세요.
- 기본 구성 적용
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
- menuconfig를 사용하여 라이브러리를 정적 라이브러리로 빌드하여 "CONFIG_STATIC" 구성을 설정합니다.
- 비지박스 구축
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
- 비지박스 설치
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install
- initramfs.gz 만들기
cd _install
mkdir -p dev etc/init.d home/root lib mnt proc root sys tmp usr/lib var
cp -v /usr/aarch64-linux-gnu/lib/* ./lib/
cat > etc/init.d/rcS << EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
[ ! -h /etc/mtab ] && ln -s /proc/mounts /etc/mtab
[ ! -f /etc/resolv.conf ] && cat /proc/net/pnp > /etc/resolv.conf
EOF
chmod +x etc/init.d/rcS
find . | cpio -o --format=newc > ../initramfs
cd ..
gzip -vc initramfs > initramfs.gz
- qemu 설치
sudo apt install qemu-system-arm qemu-efi-aarch64
- qemu 실행
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-smp 4 \
-m 2048 \
-kernel arch/arm64/boot/Image \
-initrd busybox/initramfs.gz \
-append "rdinit=/sbin/init root=/dev/ram rootfstype=ramfs rw nokaslr" \
-nographic
이 문제에 대해 어떤 생각이라도 있으시면 저를 도와주세요. 감사해요!