1. porting driver
各个厂商有个各厂商的driver, 配置方式, 拿过来,照着porting guide 去porting okay 就行, 有什么问题,问厂商就行!
2. 上层软件工具需求
- wpa_supplicant/iwd
- connman/NetworkManager
wpa_supplicant是linux系统的最基础无线网卡管理程序,可以没有connman/NetworkManager, 但不能没有 wpa_supplicant。 因为没有它, 无线将无法链接& 管理wifi。(iwd 我没有用过)
yocto 的默认连接管理器是connman,因为它比networkmanager 更轻量。它在zeus 中支持ethernet, wifi,vpn 等。尽管有很多bug, 但基本还是能用的。
3. 查询网络节点是否生成
$ ifconfig wifi
wifi0 Link encap:Ethernet HWaddr 88:da:1a:76:38:bc
inet6 addr: fe80::8ada:1aff:fe76:38bc/64 Scope:Link
UP BROADCAST MULTICAST DYNAMIC MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
或者也可以使用以下命令查看
ls /sys/class/net/
can0 can1 eth0 eth1 lo wifi0
如果有wifi 的网络节点生成,说明driver 加载正常。
4. 使能wifi 协议栈
connmand 会探测到是否有对应的wifi 节点生成:
$ connmanctl technologies
/net/connman/technology/p2p
Name = P2P
Type = p2p
Powered = False
Connected = False
Tethering = False
/net/connman/technology/wifi
Name = WiFi
Type = wifi
Powered = True
Connected = False
Tethering = False
/net/connman/technology/bluetooth
Name = Bluetooth
Type = bluetooth
Powered = True
Connected = False
Tethering = False
/net/connman/technology/ethernet
Name = Wired
Type = ethernet
Powered = True
Connected = True
Tethering = False
Powered = True 表示已经使能, 否则,将是没有使能。如果不存在wifi 节点,表示driver 没有正常工作。
如果没有使能,请执行以下命令:
$ connmanctl enable wifi
5. 扫描wifi 热点并获取结果
$ connmanctl scan wifi
$ connmanctl services
*AO Wired ethernet_c400ad7d091c_cable
advanxxx wifi_88da1a7638bc_616476616e74656368_managed_psk
TP-LINK_A990 wifi_88da1a7638bc_54502d4c494e4b5f41393930_managed_psk
QA-Test wifi_88da1a7638bc_51412d54657374_managed_psk
TP-LINK_603854 wifi_88da1a7638bc_54502d4c494e4b5f363033383534_managed_none
PCCWS_LOCAL wifi_88da1a7638bc_50434357535f4c4f43414c_managed_psk
QA-Test-5G wifi_88da1a7638bc_51412d546573742d3547_managed_psk
php wifi_88da1a7638bc_706870_managed_psk
wifi_88da1a7638bc_hidden_managed_none
wifi_88da1a7638bc_hidden_managed_psk
KOALXA-AP-2.4 wifi_88da1a7638bc_4b4f414c58412d41502d322e34_managed_psk
PCCWS_GDCN wifi_88da1a7638bc_50434357535f4744434e_managed_psk
ChinaNet-APUU wifi_88da1a7638bc_4368696e614e65742d41505555_managed_psk
DIRECT-8CAXA-JIANFENGmsMZ wifi_88da1a7638bc_4449524543542d38434158412d4a49414e46454e476d734d5a_managed_psk
HP-HOTSPOT-98-LaserJet M1218 wifi_88da1a7638bc_48502d484f5453504f542d39382d4c617365724a6574204d31323138_managed_none
KoalXARd@6 wifi_88da1a7638bc_4b6f616c584152644036_managed_psk
TP-LINK_F8FE wifi_88da1a7638bc_54502d4c494e4b5f46384645_managed_none
KOALXA-AP-5 wifi_88da1a7638bc_4b4f414c58412d41502d35_managed_psk
6.注册agent并链接wifi
需要创建一个agent 去操作这个请求。
链接一个加密的wifi 热点会提示你需要输入密码。
connmanctl
connmanctl> agent on
Agent registered
connmanctl> connect wifi_88da1a7638bc_616476616e74656368_managed_psk
Agent RequestInput wifi_88da1a7638bc_616476616e74656368_managed_psk
Passphrase = [ Type=psk, Requirement=mandatory ]
Passphrase? ******
Connected wifi_88da1a7638bc_616476616e74656368_managed_psk
connmanctl> quit
至此就完成了wifi的链接,便可以正常上网了。