我正在尝试在 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 设置“CONFIG_BLK_DEV_RAM”配置以使用 RAM 磁盘
- 构建内核
make ARCH=arm64 -j$(nproc) CROSS_COMPILE=aarch64-linux-gnu-
- 构建 'busybox' 来制作 initramfs.gz
- 应用默认配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
- 通过使用 menuconfig 将库构建为静态库形式来设置“CONFIG_STATIC”配置。
- 构建busybox
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
- 安装busybox
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
如果您对这个问题有任何想法,请帮助我。谢谢!