memteser简介
memtester 是一个用于测试内存可靠性的工具。
它可以对计算机的内存进行压力测试,以检测内存中的错误,例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行,并且可以针对不同大小的内存进行测试。
下载源码
memtester官方地址
https://pyropus.ca./software/memtester/
最新源码下载版本是4.6.0
下载源码解压后文件比较简单:
内置到安卓SDK
把这个文件夹放到android sdk下的externel中重命名为memtester
创建Android.mk放memtester中
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
memtester.c \
tests.c
LOCAL_MODULE:= memtester
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
编译
在sdk中
- source build/envsetup.sh
- lunch xxx
这里的xxx不同的平台不一样. - mmm external/memtester/
编译出错
external/memtester/memtester.c:143:22: error: using the result of an assignment as a condition without parentheses [-Werror,-Wparentheses]
if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/memtester/memtester.c:143:22: note: place parentheses around the assignment to silence this warning
if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
^
( )
external/memtester/memtester.c:143:22: note: use '==' to turn this assignment into an equality comparison
if (env_testmask = getenv("MEMTESTER_TEST_MASK")) {
^
==
external/memtester/memtester.c:314:75: error: arithmetic on a pointer to void is a GNU extension [-Werror,-Wpointer-arith]
aligned = (void volatile *) ((size_t) buf & pagesizemask) + pagesize;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
external/memtester/memtester.c:367:67: error: arithmetic on a pointer to void is a GNU extension [-Werror,-Wpointer-arith]
aligned = (void volatile *) ((size_t) buf & pagesizemask) + pagesize;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
external/memtester/memtester.c:239:9: error: variable 'memshift' is used uninitialized whenever switch default is taken [-Werror,-Wsometimes-uninitialized]
default:
^~~~~~~
external/memtester/memtester.c:243:55: note: uninitialized use occurs here
wantbytes_orig = wantbytes = ((size_t) wantraw << memshift);
^~~~~~~~
external/memtester/memtester.c:121:29: note: initialize the variable 'memshift' to silence this warning
int memfd, opt, memshift;
在Android.mk中添加上一行
LOCAL_CFLAGS += -Wno-parentheses \
-Wno-pointer-arith \
-Wno-sometimes-uninitialized
编译成功后生成 sdkout/xx/system/bin/memtester
放到安卓设备上
把memtester放到安卓设备上
adb root
adb remount
adb push memtester /system/bin/
memtester测试指令
放到设备上后,就可以进行测试了
以下是一些常见的 memtester 测试命令示例:
- 基本测试:
memtester <内存大小> <测试次数>:这是最基本的用法,比如 memtester 1G 10,表示测试 1GB 的内存,测试 10 次。如果不指定测试次数,memtester 会一直测试下去,直到你手动中断(通常使用 Ctrl + C)。 - 指定内存范围测试(适用于特定硬件开发或深入排查问题):
memtester -p <起始物理地址(十六进制)> <内存大小>:这种方式可以测试特定物理地址开始的一段内存。例如,如果要测试从物理地址 0x10000000 开始的 512MB 内存,可以使用 memtester -p 0x10000000 512M。请注意,这种测试可能会覆盖正在使用的系统内存或其他应用程序的内存,导致系统崩溃,所以要谨慎使用。 - 结合其他参数进行测试:
memtester -d <设备文件>:通过 -d 参数指定一个设备文件来进行测试。默认情况下,memtester 会使用 /dev/mem 设备文件,但在某些特殊情况下,你可能需要指定其他的内存映射设备文件。例如,如果你的系统中有一个特殊的内存设备 /dev/my_memory_device,你可以使用 memtester -d /dev/my_memory_device 100M 5 来测试该设备对应的 100MB 内存,测试 5 次。
作者:帅得不敢出门