在LINUX下用脚本给起始地址为0x05877000,终止地址为0x3ffff000的DDR循环写入数据0x55 0xAA,写入数据完毕后读取刚才写入的所有数据,并将读取数据和写入数据比较。如果读取数据和写入数据完全一致,则输出PASS,如过读取数据和写入数据不完全一致,则输出fail。最后输出读取数据和写入数据对比后的相同数据占总数据的百分比。
时间: 2024-02-17 14:04:34 浏览: 54
以下是一个可能的实现方法,你可以根据实际情况进行调整和优化:
```bash
#!/bin/bash
start_addr=0x05877000
end_addr=0x3ffff000 # 按需要调整结束地址
data_write=0x55aa55aa
data_read=$(printf "%08x" $data_write) # 转换为16进制字符串
count=0
match_count=0
# 写入数据
for ((addr=$start_addr; addr<$end_addr; addr+=4))
do
echo -ne "\x55\xaa\x55\xaa" | dd of=/dev/mem bs=4 count=1 seek=$(($addr/4)) conv=notrunc 2>/dev/null
done
# 读取数据并比较
for ((addr=$start_addr; addr<$end_addr; addr+=4))
do
data=$(dd if=/dev/mem bs=4 count=1 skip=$(($addr/4)) 2>/dev/null | hexdump -e '/4 "%08x\n"')
if [ "$data" == "$data_read" ]; then
match_count=$((match_count+1))
fi
count=$((count+1))
done
# 输出结果
if [ $match_count -eq $count ]; then
echo "PASS"
else
echo "FAIL"
fi
percent=$(echo "scale=2; $match_count * 100 / $count" | bc)
echo "Matched data: $match_count/$count ($percent%)"
```
该脚本与上一个问题的脚本类似,只是将终止地址调整为0x3ffff000,并没有其他区别。同样需要root权限才能执行。
阅读全文