首页 > 解决方案 > 在qemu-system-arm virt机器上模拟AT91SAM9260嵌入式Linux的难点

问题描述

我已经为 AT91SAM9260 构建了一个内核和根文件系统,并在“文件系统设置”上使用以下 buildroot 菜单选项:

在此处输入图像描述

内核构建设置包括 at91_dt_defconfig 选项。

buildroot 的输出文件夹包含以下图像:

rootfs.cpio rootfs.ext2 rootfs.tar zImage

我尝试使用带有以下命令的 qemu 启动:

qemu-system-arm -machine virt -kernel zImage -initrd rootfs.cpio -hda rootfs.ext2 -append "console=ttyS0,115200 root=/dev/sda" -serial stdio

这导致了一个空白的 qemu 屏幕。

我究竟做错了什么?是qemu操作还是buildroot配置问题?

标签: linuxarmkernelvirtual-machineqemu

解决方案


问题在于,如果内核是为该硬件编译的,那么它只会在一个 Arm 硬件上启动。否则它通常会失败,通常是在它能够输出任何有用的东西之前崩溃。这是因为(与 x86 系统不同),每个嵌入式 Arm 板和 SoC 都彼此不同,具有不同的设备、设备和位于不同地址的 RAM,等等。QEMU“virt”板不是 AT91SAM9260,不会运行为该 SoC 构建的内核。

您可以:

  • 构建一个打算在“virt”板上运行的内核,然后运行它
  • 为您感兴趣的 SoC 编写用于 QEMU 的设备模型和 SoC 模型(请注意,这是一项大量工作;它的工作量与移植 Linux 内核和为硬件编写设备驱动程序一样多;它还需要拥有或学习很多关于 QEMU 内部的知识)

推荐阅读