ARM内核测试模块

fre*_*nix 10 c testing debugging kernel arm

我有一个双核ARM嵌入式系统设备运行我编写的RTOS /内核.我希望编写一个内部诊断工具/模块来模拟内核的I/O以进行测试.显然,这不会完全取代现实世界的测试,物理硬件接口和所有.我猜这将接近虚拟机管理程序.这样做的方法/概念是什么?

art*_*ise 4

我使用了L4的微内核,硬件权限映射为MMU页面;ARM 选项有 1k、4k、64k 页和 1M 段。另外,您可以查看Linux 的 FB 延迟 I/O。这个想法是提供一个内存映射 伪寄存器集。然后,您可以使用带有错误地址的页面错误处理程序来确定哪个伪寄存器被命中。您可能需要查看说明。例如,代码可以使用回写和其他更新。Linux对齐处理程序代码可能非常有启发性。

\n

请参阅:ARM ARM - B3 章内存管理单元。
\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0 ARM ARM - 2.6.5 数据中止(数据访问内存中止)。

\n

您还需要模拟中断。使用计时器(无论您喜欢什么发行版)都可以调用驱动程序/操作系统 ISR。为了最大限度地减少定时器的使用,可以使用定时轮来创建中断到达的不同概率分布函数。如果可能的话,您可能还希望将此计时器设置为FIQ。这可以让您的测试设备的 ISR 即使在常规IRQ屏蔽的情况下也能接收数据更新。您还可以使用FIQ恒定定时器中断上的处理程序来模拟 DMA。当然,这假设您的测试驱动程序不使用FIQ并且您有FIQ可用的计时器。

\n

许多操作系统驱动程序都有寄存器缓存,特别是当设备是只写芯片时。看一下这段代码也可能会有所帮助。

\n

通过L4,特定单元被授予实际物理设备范围的许可。这被转移到虚拟空间中。虚拟机管理程序的额外问题是您运行多个操作系统,并且必须切换权限以眨入/眨出不同的硬件外设。我不相信你必须这样做。

\n

注意事项: 多 CPU 锁定可能会出现data fault处理问题;您的驱动程序不应通过多个 CPU 访问硬件。处理程序可以在中断锁定的情况下运行,并且在单个 CPU 上,此解决方案将起作用。我相信如果出现异常情况strex将返回一个条件代码集。也许你可以在错误处理程序中处理这个问题。

\n

我提出了上面的解决方案,因为你提出问题和

\n
\n

正如Pekka指出的,如果您选择使用 C++,这可能有助于测试设计。一种有用的模式是驱动程序中访问硬件的纯虚拟接口。当你测试的时候,你用一个模拟类来替换这个虚拟接口;在“C”中使用函数指针包也可以实现这一点。这些类型的活动都有详细记录,所以我排除了它们。但是,如果这是您正在寻找的解决方案,您可以考虑澄清问题并重新标记。

\n