我无法在 QEMU 上执行 AARCH64 Linux 内核

我无法在 QEMU 上执行 AARCH64 Linux 内核

我正在尝试在 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

我找不到我应该首先检查的内容。所以,我需要帮助。

我为实现目标所做的工作如下:

  1. 针对 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-
  1. 构建 '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

如果您对这个问题有任何想法,请帮助我。谢谢!

相关内容