1,
修改无线驱动mac80211文件夹中的rx.c文件,获取probe帧的mac。
struct sk_buff *skb)函数进行修改
上图红框中的代码是添加的,struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);用于获取sta设备状态,这里增加这行代码是为了获取status->signal,也就是信号强度。
vim build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/compat-wireless-2016-01-10/net/mac80211/rx.c
找到 static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,

上图红框中的代码是添加的,struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);用于获取sta设备状态,这里增加这行代码是为了获取status->signal,也就是信号强度。
get_maclist是我自己写的一个函数,用于处理hdr->addr2(probe帧中取得的mac)、status->signal。
2,
mac80211文件夹下编写csx_netlink.c、csx_netlink.h两个文件,利用genetlink将mac数据由内核层传送到用户层(当然你也可以使用其他方法来实现),以下为主要部分代码:
初始化
数据接收与发送
3,修改mac80211文件夹中的
main.c,初始化时加入对csx_netlink的初始化
4,修改mac80211文件夹中的
Makefile,编译csx_netlink
PS:
1, genetlink的具体实现请参考上一篇文章
2, wifi驱动内核源码下载地址:
http://download.youkuaiyun.com/download/caoshunxin01/9990463 (需要积分)
压缩包内容 :
3, 用户空间示例程序:
https://gitee.com/caosx/maclist.git
(开源)