linux下用wpa_supplicant命令行工具操作wifi
开启wifi并连接:
insmod /usr/drivers/wlan.ko
ifconfig wlan0 up
# wpa_supplicant -iwlan0 -Dnl80211 -c /data/wpa_supplicant.conf -dd &
然后用wpa_cli来连接网络即可:
# wpa_cli -i wlan0
> status
> add_network
下面的0为add_network返回的网络id(可以增加多个网络,这样就可以记下多个ssid和psk)。
> set_network 0 ssid “guest”
> set_network 0 psk “12345678”
> enable_network 0
> save_config
会把密码等配置保存到/data/wpa_supplicant.conf里面。
> quit
# dhclient -v wlan0
# ping 192.168.1.1
也可以用connman来连接(必须用dbus方式启动wpa_supplicant,即下面的-u参数):
# wpa_supplicant -u -iwlan0 -Dnl80211 -c /data/wpa_supplicant.conf -dd &
# connmanctl enable wifi
# connmanctl
connmanctl> technologies
connmanctl> scan wifi
connmanctl> services
connmanctl> agent on
connmanctl> connect wifi_000822a04268_636f5f6775657374_managed_psk
Phasepass? 12345678
connmanctl> exit
# cat /data/misc/connman/settings
# connmanctl disable wifi
密码保存位置:
/data/misc/connman/wifi_0008223cde12_54502d4c494e4b5f434f_managed_psk/settings
开启热点:
配置,先修改 /data/ap.config,设置好ssid(第一行,比如TEST_AP),鉴权类型(第二行,比如wpa2),口令(第三行,比如12345678)。
insmod /usr/drivers/wlan.ko
iwpriv wlan0 set_p2p_mode 1 1
ifconfig ap0 up
wpa_supplicant -u -iap0 -Dnl80211 -c/data/p2p_supplicant.conf -puse_p2p_group_interface=1 -ddd &
没法用wpa_cli来配置ssid之类的,也没有把hostapd编译进来。
如果wpa_supplicant不使能dbus(即不加-u参数),则能看到热点,但是无法连接:
修改p2p的idle等待时间,然后重新编译:
$ vi sources/src/oss/wpa_supplicant-2.5/wpa_supplicant/p2p_supplicant.c
#define P2P_MAX_CLIENT_IDLE 600
$ bitbake wpa-supplicant -c compile
$ cd .. && ./makall
生成:$ ll sources/build/tmp/work/ac8317-poky-linux-gnueabi/atc-qt-image/1.0-r0/rootfs/usr/sbin/wpa_supplicant
启动命令:
wpa_supplicant -iap0 -Dnl80211 -c/data/p2p_supplicant.conf -puse_p2p_group_interface=1 -ddd &
wpa_cli p2p_group_add
也可以在dbus启用(增加-u参数)情况下用connman来管理(在tether之后,要启动dhcpd才能让客户端得到IP地址,并且要给ap0接口(不是tether接口)增加ip才能让client得到地址):
# connmanctl
connmanctl> technologies
connmanctl> tether wifi on myNet 12345678
# cat /data/misc/connman/settings
然后可以用手机等来连接到该热点。