qemu中的ARM At91 CPU启动

Posted

技术标签:

【中文标题】qemu中的ARM At91 CPU启动【英文标题】:ARM At91 CPU startup in qemu 【发布时间】:2019-08-06 05:55:44 【问题描述】:

ARM AT91 在 QEMU 中无法启动。我无法在控制台上打印任何内容。

我正在尝试使用 QEMU(git 提取的最新代码)来模拟 ARM AT91 板。但是当启动 QEMU 时,我在控制台中没有打印。据我了解,实现这一点需要两个步骤:

1、用QEMU中的内存地址设置属性,让QEMU解压zImage。在这一步中,我会看到“Uncompressing Linux...done, booting the kernel”。

2,属性设置输出设备(例如:uart0)。我会收到内核启动消息。

我已经成功启动了 ARM 多功能 PB,因为 QEMU 本身支持多功能 PB。通用PB 和AT91 之间的区别在于它们具有不同的SDRAM 地址。我尝试将loader_start 修改为 0x20000000,但似乎仍然无法正常工作。

hwaddr loader_start;//0x2000000, which is AT91 SDRAM address
memory_region_add_subregion(sysmem, 0x2000000, ram);

至少应该打印Uncompressing Linux...done, booting the kernel.,表示zImage已执行并解压。

【问题讨论】:

【参考方案1】:

QEMU(至少是上游 QEMU)没有 AT91 SoC 的型号。这些系统与 QEMU 支持的通用 PB 之类的系统之间的差异不仅仅是“RAM 位于不同的地址”——它们将拥有各种不同的设备(包括 UART),它们的行为都不同,并且位于不同的位置。如果没有在 QEMU 中实现正确板的模型和至少一些 AT91 设备,就不可能运行用于 AT91 的裸机代码。所需的更改将比仅更改 RAM 基地址的几个地址要大得多。

【讨论】:

感谢您的回复,彼得。我了解不同的 CPU 将其设备映射到不同的地址。在这个时间段,我只想用最小的系统启动 Linux,没有任何 IO。据我了解,它应该包含属性引导地址、MMU 和一个 UART。对吗? 它需要包含 Linux 映像访问的所有内容。这可能包括很多东西,因为 Linux 假设它在真实硬件上运行。它可能包括一个时钟控制器、电源管理相关的东西、杂项 ID 寄存器,它很可能决定探测它认为可能存在的任何设备,等等。正如我所说,一个板模型是相当多的努力,即使对于一个初始最小版本。

以上是关于qemu中的ARM At91 CPU启动的主要内容,如果未能解决你的问题,请参考以下文章

Qemu搭建ARM vexpress开发环境----NFS网络根文件系统

At91sam9rl arm hello world 无操作系统

QEMU启动ARM32 Linux内核

arm 启动流程 2016.08.11

移值2016的u-boot-第2篇-支持Nand flash启动

u-boot 启动过程