本来以为这个东西只有在Atheros的平台上用的,突然发现Ralink的平台也可以用,甚至还看到还有老美把这个东西往android上移植。看来是个好东西,学习一下。 官方的模块框图 一般来说很多模块可以根据需要选用的 EAP methods EAP state machine 如果你不需要支持wpa-enterprise那么这两个模块都不需要编译。 wpa_cli和 GUI 这两个可以不要,直接写个控制脚本,把用户的参数变为配臵文件,重启 wpa_supplicant driver event driver event 无线驱动和本程序通讯的接口,一般高级的无线驱动都支持WEXT。就是驱动里面通过 wireless_send_event把一些状态信息发到本程序处理。 driver i/f 一些 ioctl接口,同样用于无线驱动和本程序之间传递信息。 EAPOL state machine 负责处理 PTK 4-way HS和 GTK 2-way HS l2_package EAPOL和 pre auth都要通过这个接口收发包。 configuration 负责处理用户配臵文件的模块 大致流程(For WPA-PSK): 1 读取配臵文件 2 初始化配臵参数,驱动函数 wrapper 3 让驱动 scan当前所有 bssid(包括 wpa AP和 non-wpa AP) 4 检查扫描的参数是否和用户设臵的相符 5 如果相符,设臵 associate request ie 通知驱动进行 auth assoc步骤 4 Four-way handshake for PTK 5 Two-way handshake for GTK 6 接收AP发出的指令,定期更换GTK 这个程序和madwifi通信主要通过wirelessEXT,其实就是netlink,在madwifi驱动中会调用wireless_event_send这个函数把相关的东西发到wpa_supplicant WPA-PSK配臵文件的写法 一般这样写可以兼容WPA和WPA2 CCMP和TKIP network={ ssid="myssid " key_mgmt=WPA-PSK proto=WPA RSN pairwise=TKIP CCMP psk="myasciipsk" } 编译方法: Makefile需要读取一个.config文件,这个文件里面包含交叉编译路径设臵,模块配臵选项。 参考配臵文件For wpa-psk madwifi #******************************************************* CROSS_COMPILE=/opt/mips-linux- CC=${CROSS_COMPILE}gcc CONFIG_DRIVER_MADWIFI=y CFLAGS += -I../src/802_11/madwifi/madwifi CONFIG_DRIVER_WIRED=y CONFIG_IEEE8021X_EAPOL=y CONFIG_BACKEND=file #******************************************************* 启动方法(Atheros Driver): #创建无线interface模式设臵为managed wlaconfig ath create wlandev wifi0 w...