在linux系统中进行芯片调试定位时,我们经常需要读取寄存器的数值,有些时候可能手动读取就可以了,当读取频率高且数据量较大的场景时,就需要需要使用脚本解决问题了,脚本语言可以采用Python、shell等等,很复杂的脚本实现推荐使用Python。简单的脚本实现推荐使用shell,因为所有的linux系统都支持shell命令,脚本可以直接使用。
在获取寄存器数值时,我们通常需要进行读信息过滤和筛选,留下需要的读数据。命令 “mem_access nic -d 06:00.0 -r 0xa8110868 1”是读取06:00.0(PCIe 的bdf)网卡设备
地址为0xa8110868的32bit寄存器。可得知读出的数据是0x10。
在命令 read_value1=$(mem_access nic -d $bdf_num -r 0xa8302f00 1 | grep "Value:" | awk '{print $4}') 中,首先执行了一个读命令,读结果是3行数据,grep "Value:" 筛选出来第3行,即“Addr: 0xa8110868, Value: 0x10”。
awk 是一个强大的文本处理工具,它默认使用空格或制表符作为字段分隔符,并将输入行分割成多个字段。$4 是 awk 命令中用于字段提取的一个参数。awk '{print $4}'匹配上了第四个参数,即0x10。最终,read_value1为0x10,其实在正式的调试脚本中,读数据的获取仅仅是其中最基础的一个功能。
[root@asic-lab-asic205 icxiaoge]# mem_access nic -d 06:00.0 -r 0xa8110868 1
nic: read register 0xa8110868
BDF:0000:06:00.0:
Addr: 0xa8110868, Value: 0x10
[root@asic-lab-asic205 icxiaoge]#
[root@asic-lab-asic205 icxiaoge]# cat ./read.sh
#!/bin/bash
bdf_num=06:00.0
read_value1=$(mem_access nic -d $bdf_num -r 0xa8110868 1 | grep "Value:" | awk '{print $4}')
echo "read value is:$read_value1"
[root@asic-lab-asic205 icxiaoge]#
[root@asic-lab-asic205 icxiaoge]# ./read.sh
read value is:0x10
END
作者:IC小鸽
文章来源:IC小鸽
推荐阅读
更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。