Openwrt 4.1内核对WPS支持
处理逻辑
点击按键触发gpio -> 内核捕获信号gpio_button_hotplug -> 选择执行逻辑 /etc/hotplug.json -> 执行shell脚本 /etc/rc.button/wps
/etc/rc.button/wps
#!/bin/sh
if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then
cd /var/run/hostapd
for socket in *; do
[ -S "$socket" ] || continue
hostapd_cli -i "$socket" wps_pbc
done
fi
return 0
内核代码添加
修改mach-ap143.c文件,通过ath79_register_gpio_keys_polled 实现对按键轮询。
static struct gpio_keys_button ap143_gpio_keys[] __initdata = {
{
.desc = "WPS button",
.type = EV_KEY,
.code = KEY_WPS_BUTTON,
.debounce_interval = AP143_KEYS_DEBOUNCE_INTERVAL,
.gpio = AP143_GPIO_BTN_WPS,
.active_low = 1,
},
}
......
ath79_register_gpio_keys_polled(-1, AP143_KEYS_POLL_INTERVAL,
ARRAY_SIZE(ap143_gpio_keys),
ap143_gpio_keys);
测试
通过电脑连接具有WPS功能的热点,然后点击路由器上的按钮,等一会就可以连接成功。