棋子 · 11月5日

芯片debug:awk结合grep获取读数据

在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)加入技术交流群,请备注研究方向。

推荐阅读
关注数
20172
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息