LINUX下使用SHELL脚本,给起始地址为0x05877000终止地址为0x3ffff000的DDR4写入0x55 0xAA,从起始地址开始,写满一个地址后开始写入下一个地址直到把终止地址0x3ffff000写满后停止。然后从起始地址0x05877000开始读取数据,直到读取完终止地址0x3ffff000内的数据位置。比较写入的所有数据和读取的所有数据,如果写入数据和读取数据完全一致则输出PASS,如果不完全一致,则输出FAIL。最后以百分比的形式输出读取数据和写入数据的一致率。
时间: 2024-02-27 20:54:04 浏览: 77
好的,这是一个关于Linux下使用SHELL脚本的问题,需要写一个脚本实现给起始地址为0x05877000终止地址为0x3ffff000的DDR4写入0x55 0xAA,然后从起始地址0x05877000开始读取数据,比较写入的所有数据和读取的所有数据,输出结果。
下面是一个示例脚本:
```bash
#!/bin/bash
# 定义变量
start_addr=0x05877000
end_addr=0x3ffff000
data=0x55aa55aa
# 写入数据
for ((i=start_addr;i<=end_addr;i+=4)); do
echo $data | dd of=/dev/mem bs=4 count=1 seek=$((i/4)) conv=notrunc >/dev/null 2>&1
done
# 读取数据
for ((i=start_addr;i<=end_addr;i+=4)); do
read_data=$(dd if=/dev/mem bs=4 count=1 skip=$((i/4)) 2>/dev/null | xxd -p)
if [ "$read_data" != "55aa55aa" ]; then
echo "FAIL"
exit 1
fi
done
echo "PASS"
# 计算一致率
total_bytes=$((end_addr-start_addr+1))
same_bytes=$((total_bytes/4))
same_percent=$(echo "scale=2; $same_bytes/$total_bytes*100" | bc)
echo "一致率:$same_percent%"
```
这个脚本会先定义起始地址、终止地址和写入的数据,然后使用循环将数据写入DDR4,接着再使用循环读取数据并比较写入的数据是否一致,最后输出结果和读写一致率。
阅读全文