1 场景描述
公司需要使用memtester压测DDR。
2 下载memtester源码
3 添加Android.mk编译脚本及源码
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
memtester.c \
tests.c
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/include
LOCAL_MODULE:= memtester
LOCAL_MODULE_TAGS := optional
#LOCAL_MULTILIB := 32
include $(BUILD_EXECUTABLE)
4 编译
source build/envsetup.sh && export OUT_DIR=out_sys && lunch sys_mssi_t_64_cn_armv82_datasms-next-userdebug
mm
编译完成 memtester
后,应检查生成的可执行文件的架构,以确保与目标设备的 CPU 架构一致,避免运行错误。
file ./target/product/mssi_t_64_cn_armv82_datasms/symbols/system/bin/memtester
./target/product/mssi_t_64_cn_armv82_datasms/symbols/system/bin/memtester: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, BuildID[md5/uuid]=232d133b1053b84186e19b8bc3b47cf7, with debug_info, not stripped
要求是ARM aarch64的,不能是x86-64的,要与目标运行机器架构一致
Android.mk写好后, cd进目录, mm编译即可,生成的文件在out/xxxx/xxx/system/bin/目录下,
adb root
adb remount
adb push memtester /system/bin/
adb shell
memtester 100M 1
在 device.mk
中加入:
PRODUCT_PACKAGES += memtester
即可将 memtester
工具加入系统工程进行编译和打包。
如果需要在应用中运行,只需通过命令行执行,例如:
memtester 100M 1
表示测试 100MB 内存,循环 1 次。
注意:由于 memtester
需要直接访问内存,应用必须修改对应的 SEPolicy 权限,否则普通应用没有权限运行。
4 退出码
0:正常退出
x01:内存分配或者锁定失败
x02:stuck Address测试失败
x04:其他测试失败
5 例子
1)首先查看本机内存
free -g,
2)分配10g内存用于memtest,循环十次
memtester 1g 10
文中打印了很多测试信息,可以看出来memtester对内存的逻辑操作进行了正确性验证。
3) 查看实际内存使用情况
输入: top