工具/软件:
AM6232 上有定制 Yocto 映像。 SD 卡中恢复过来。 正确引导。 我想测试 eMMC 是否存在错误的块。 我使用了下面的脚本来实现这一点。
========================== START ==============================
#!/bin/sh
eMMC_dev=“/dev/mmcblk0
BLOCK_SIZE=512
START_BLOCK=0
TMP_FILE=“/tmp/pattern.bin
log_file=“/tmp/emmc_bad_blocks.log
#检查引导源
boot_dev=$(cat /proc/cmdline | sed -n 's/.*root=\([^]*\).*/\1/p')
回显“Boot device:$boot_dev“
如果[[“$boot_dev"==“==*“mmcblk1"*]]“]];则
回显“从 SD 卡 ($boot_dev) 引导“
暴露
回显“未从 SD 卡引导。 正在中止测试。“
退出 1
和数据
#生成 512 字节测试模式 (0x55AA55AA)
回波“正在生成测试模式...“
>“$TMP_FILE"</s>“
COUNTER=0
while [$counter -lt $((block_size / 4))];do
printf '\X55\XAA\X55\XAA'>>“$TMP_FILE"</s>“
counter=$((counter + 1))
已完成
#获取块总数
Total_Blocks=$(cat /sys/block/mmcblk0/size)
如果[-z “$total_blocks"]“];则
回显“无法确定 eMMC 大小。“
退出 1
和数据
回显“从块$START_BLOCK 到$TOTAL_BLOCKS 开始逐块测试...“
回显“将坏块记录到$LOG_FILE“
>“$LOG_FILE"</s>“
失败=0
TESTED= 0
counter=$start_block
而[$counter -lt $total_blocks ]; do
ECHO “Testing block $counter/$TOTAL_BLOCKs“
#写入图形
DD if=“$TMP_file" of="$EMMC_DEV"“ of="$EMMC_DEV" BS=$BLOCK_SIZE“ BS=$BLOCK_SIZE count=1“ count=1 seek=$counter 2>/dev/null
同步
#读取并验证
dd if=“$EMMC_DEV" BS=$BLOCK_SIZE“ BS=$BLOCK_SIZE count=1 skip=$COUNTER 2>/dev/null | CMP -“$TMP_FILE">“>/dev/null
如果[$? -ne 0 ];然后
回显“块计数器验证失败“| TEE -a “$LOG_FILE"</s>“
失败=$(失败+ 1)
和数据
已测试=$(已测试+ 1)
counter=$((counter + 1))
已完成
回波“"</s>“
回波“测试完成“。
ECHO “测试的总块数:$tested“
回显“故障块总数:$Failed“
echo “登录的坏块:$LOG_FILE“
#清理
rm -f “$TMP_FILE"</s>“
====================== END ========================
此脚本的输出如下所示
******************************** 启动*********************************
root@ETN-cbc9000:~# flash-eMMC-test
正在生成测试模式...
从块 0 到 62160896 开始逐块测试...
将错误模块记录到/tmp/emmc_bad_blocks.log
测试块 0/62160896
测试块 1/62160896
测试块 2/62160896
块计数器验证失败
测试块 3/62160896
块计数器验证失败
测试块 4 / 62160896
块计数器验证失败
测试块 5/62160896
块计数器验证失败
测试块 6/62160896
块计数器验证失败
测试块 7/62160896
块计数器验证失败
测试块 8/62160896
测试块 9/62160896
测试块 10/62160896
块计数器验证失败
测试块 11/62160896
块计数器验证失败
测试块 12/62160896
块计数器验证失败
测试块 13/62160896
块计数器验证失败
测试块 14/62160896
块计数器验证失败
测试块 15/62160896
块计数器验证失败
测试块 16/62160896
测试块 17/62160896
测试块 18/62160896
块计数器验证失败
测试块 19/62160896
块计数器验证失败
测试块 20/62160896
块计数器验证失败
测试块 21/62160896
块计数器验证失败
测试块 22/62160896
块计数器验证失败
测试块 23/62160896
块计数器验证失败
测试块 24/62160896
测试块 25/62160896
测试块 26/62160896
块计数器验证失败
测试块 27/62160896
块计数器验证失败
******************************** 结束日期*************************************
通过块模式:1,2,8,9,16,17,24,25,32,33,40,41,48,49………
另一个块测试失败。
在 AM62x-SK 板中、相同的测试通过。 我没有为定制硬件更改 DTS 文件。
连接原理图以供参考。
