[原创]ath网卡调试工具的使用_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3021 | 回复: 1   主题: [原创]ath网卡调试工具的使用        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-4-27 16:02:36 | [全部帖] [楼主帖] 楼主

FreeBSD下的ath有一系列的debug工具,在/usr/src/tools/tools/ath目录下,可以单独进行安装,也可以在这个目录下运行make && make install来安装:

root@test:/usr/src/tools/tools/ath # lf
Makefile                ath_prom_read/          athpoke/                athspectral/
Makefile.inc            athaggrstats/           athpow/                 athstats/
arcode/                 athalq/                 athprom/                athsurvey/
ath_ee_9287_print/      athctrl.sh              athradar/               common/
ath_ee_9300_print/      athdebug/               athratestats/
ath_ee_v14_print/       athdecode/              athrd/
ath_ee_v4k_print/       athkey/                 athregs/


这当中最常用的几个是:
athsurvey:  相当于top,查看当前无线频道的繁忙程度;
athstats:   必备工具,能查看当前网卡的许多状态;
athdebug:    对可以调试的对象进行控制,代替了sysctl的操作;
athregs:     导出网卡的寄存器状态;

在使用这些之前,必须在内核中启用可调试选项:

options ATH_DEBUG
options AH_DEBUG
options ATH_DIAGAPI


其中,ATH_DEBUG是针对网卡的,可以针对某个网卡进行;AH_DEBUG是针对ath_hal的,对所有网卡都有效;最后一个是包括athstats在内好几个工具都需要的选项,为了保险起见,一般都把这三个同时放进内核配置文件。
重新编译、安装完内核后,就可以使用这些工具了。

# athsurvey -i ath0
min                   avg                   max
tx%  rx%  bc%  ec%    tx%  rx%  bc%  ec%    tx%  rx%  bc%  ec%
(26.1 36.9 69.4  0.0) (32.6 48.7 81.2  0.0) (41.4 56.9 85.6  0.0)
(26.1 36.9 69.4  0.0) (33.1 48.6 81.7  0.0) (41.4 55.4 87.1  0.0)


当前ath0所在频道的繁忙程序,包括其他ap在内,其中bc代表:busy count,表示繁忙程序。如果该频道在没有使用的时候已经超过50%,那么说明已经有ap在该频道工作,最好换一个频道吧。

# athstats -i ath1
54           data frames received
41           data frames transmit
7            short on-chip tx retries
38           long on-chip tx retries
9            tx failed 'cuz too many retries
MCS7         current transmit rate
6            tx frames with no ack marked
10           tx frames with short preamble
408          beacons transmitted
5            periodic calibrations
-0/+0        TDMA slot adjust (usecs, smoothed)
37           rssi of last ack
36           avg recv rssi
-96          rx noise floor
25           tx frames through raw api
12           A-MPDU sub-frames received
10           Frames transmitted with HT Protection
1            OFDM weak signal detect
495          listen time
1            ANI disabled OFDM weak signal detect
19           cumulative OFDM phy error count
27           cumulative CCK phy error count
2            ANI forced listen time to zero
38           missing ACK's
7            RTS without CTS
11           successful RTS
3            bad FCS
2            average rssi (beacons only)
Antenna profile:
[0] tx       32 rx        0
[1] tx        0 rx       48
[2] tx        0 rx        6


athstats是调试用的比较多的工具,显示的内容比较多。我这几天用的最多的是调试天线的部分,所以最后几行对我很有帮助,可以看出哪根天线进入和流出了数据:

# athregs -i ath0
CR       0000000c RXDP     00000000 CFG      00080100 MIRT     00000000
IER      00000001 TIMT     00000000 TXCFG    00020085 RXCFG    00000005
MIBC     00000000 TOPS     00000000 RXNPTO   00000008 TXNPTO   00000010
……


athregs对于搞硬件相关的人员非常有用,可以看出各寄存器的值。

另外还有一个问题,就是到底debug哪些状态的问题,在调试的时候,由于默认情况下会出太多的东西,所以可以针对某一方面进行调试,比如说只对“发送功率”进行调试,那么可以设置debug的掩码:

sysctl hw.ath.hal.debug=0xffffffff
sysctl hw.ath.debug=0xffffffffffffffff


这两者的定义在下面两个文件中,请注意最后的ANY字样。
在国外的几个站点上,都说这是64位的一个掩码,但是看源代码,ah_debug应该是32位的,也有人建议使用0x8这种,我总有种不踏实的感觉,还是老老实实0x00000008吧:

/usr/src/sys/dev/ath/ath_hal/ah_debug.h
enum {
      ……
      HAL_DEBUG_POWER_MGMT = 0x01000000, /* power calibration */
      HAL_DEBUG_CHANNEL = 0x02000000,
      HAL_DEBUG_QUEUE = 0x04000000,
      HAL_DEBUG_PRINT_REG = 0x08000000,
      HAL_DEBUG_FCS_RTT = 0x10000000,
      HAL_DEBUG_BT_COEX = 0x20000000,
      HAL_DEBUG_UNMASKABLE = 0x80000000, /* always printed */
      HAL_DEBUG_ANY = 0xffffffff
      ……
};
/usr/src/sys/dev/ath/if_ath_debug.h
enum {
      ……
      ATH_DEBUG_SW_TX_RETRIES = 0x040000000ULL, /* software TX retries */
      ATH_DEBUG_FATAL = 0x080000000ULL, /* fatal errors */
      ATH_DEBUG_SW_TX_BAR = 0x100000000ULL, /* BAR TX */
      ATH_DEBUG_EDMA_RX = 0x200000000ULL, /* RX EDMA state */
      ATH_DEBUG_SW_TX_FILT = 0x400000000ULL, /* SW TX FF */
      ATH_DEBUG_NODE_PWRSAVE = 0x800000000ULL, /* node powersave */
      ATH_DEBUG_DIVERSITY = 0x1000000000ULL, /* Diversity logic */
      ATH_DEBUG_ANY = 0xffffffffffffffffULL
      ……
};


还有一种方法可以控制当前调试的类型,就是用athdebug命令:

# athdebug "-?"
usage: athdebug [-i device] [flags]
where flags are:
xmit
xmit_desc
recv
recv_desc
rate
reset
mode
beacon
watchdog
intr
xmit_proc
recv_proc
beacon_proc
calibrate
keycache
state
node
led
ff
dfs
tdma
tdma_timer
regdomain
fatal


ath网卡的调试还是很方便的。
另外再说一下,ar9300系列中,athsurvey还不是太好用,作者说临时还没有把ar9300加进ath_tools,但是已经开始考虑这件事情,希望ar9300能早日用上这些命令。




赞(0)    操作        顶端 
ainy
注册用户
等级:中士
经验:221
发帖:0
精华:0
注册:2015-4-27
状态:离线
发送短消息息给ainy 加好友    发送短消息息给ainy 发消息
发表于: IP:您无权察看 2015-4-28 9:35:30 | [全部帖] [楼主帖] 2  楼

啊西吧,看不懂



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论