如何在基于 ARM 的系统上测试 RAM 是否存在数据损坏?

如何在基于 ARM 的系统上测试 RAM 是否存在数据损坏?

我有一个嵌入式设备。它基于 ARM,采用 Linux 2.6.31,并具有 256 MB RAM。

我想了解一些关于测试设备 RAM 是否存在数据损坏的最有效方法的想法/技巧。有人可以推荐一个测试/软件吗?

笔记:

我现在有memtester。我是在乌尔里希·丹格尔(Ulrich Dangel)(如下)的建议下得到的。

mtest现在也已经从uboot设置了。

我可以使用其他测试/方法吗?

答案1

测试记忆力的一般解决方案是将特定模式写入0xFFFFFFFF您的记忆中,然后读取并比较结果。您当然可以而且应该改变模式来发现问题。有些解决方案memtest86+还生成随机模式并改变它们写入内存的方向。有关 memtest86 中使用的算法的更多详细信息,请查看他们的技术页面。本文中提供的所有解决方案基本上都使用相同的基本思想。

如果您想在 Linux 中运行测试(您在帖子中提到了 Linux),请查看内存测试仪内存测试套件两者都应该与手臂一起工作。首先你应该使用内存测试仪因为它基本上完全符合您的要求。

从 Linux 内部测试内存有一些缺点,例如您无法真正测试所有物理内存,因为内核也需要内存。要使用 uboot 测试内存(它比 linux 内核小得多),请查看集成的测试命令。它允许您指定地址范围、模式和迭代。和测试您应该能够在不依赖操作系统的情况下进行相当广泛的测试。您只需确保使用有效的内存范围,否则您可能会覆盖uboot内存区域。

如果测试由测试这还不够,您当然可以扩展 uboot 并将额外的内存测试功能集成到 uboot 中。

答案2

Das U-Boot 可能是 ARM 板上使用最广泛的引导加载程序,它包含一些内存测试功能。

有趣的是,其自述文件建议一种可能更便携和/或更有效的替代方法:

对这样的系统进行压力的最著名的测试用例是通过 NFS 安装根文件系统来引导 Linux,然后本地构建一些更大的软件包(例如,在系统上编译 Linux 内核) - 这将导致足够的上下文切换,网络流量(以及来自网络控制器的 DMA 传输)、不同的 RAM 使用情况等会触发该区域的任何弱点。

当您构建 Linux 内核时,您可能会对CONFIG_MEMTEST=y导致构建内置内存测试的选项感兴趣。这曾经仅适用于 x86 架构,但我相信最近的版本也支持其他架构,甚至可能是 ARM。

内存测试仪工具已经构建并可用一些Linux发行版,适用于各种架构,包括 ARM。

内核内存测试您可能也会对项目感兴趣。

请记住,没有工具可以测试它运行的内存(因此正在运行的操作系统中的程序将有明显的盲点),并且基本的读/写测试不会揭示每种类型的缺陷或其他错误。相应地设置您的期望,如果您有理由怀疑内存不好,请考虑尝试几种不同的测试工具。

相关内容