1. iwd概述
iNet Wireless Daemon(iwd)项目旨在为基于Linux的设备提供全面的Wi-Fi连接解决方案。该项目的目标是通过不依赖于任何外部库,并最大限度地利用Linux内核提供的功能来优化资源利用:存储、运行时内存和连接的成本。是一个仅依赖于Linux内核和运行时C库的自包含环境(self-contained environment)。具体的架构图如下所示:
ell(Embedded Learning Library)是iwd唯一真正依赖的库,提供了D-Bus, Netlink, Main event loop, Timers, and various primitives。 iwd将Linux内核的crypto子系统用于所有加密操作,不使用OpenSSL或任何其他用户空间加密库。
如何获得和编译iwd,请参考链接:gettingstarted [Wiki]
2. 使能iwd在ubuntu
2.1 disable wpa_supplicant
systemctl stop wpa_supplicant
systemctl disable wpa_supplicant
2.2 创建iwd.service文件
/lib/systemd/system/iwd.service
[Unit]
Description=Wireless service
After=network-pre.target
Before=network.target
Wants=network.target
[Service]
Type=dbus
BusName=net.connman.iwd
#Environment="IWD_TLS_DEBUG=1"
#Environment="IWD_GENL_DEBUG=1"
#Environment="IWD_RTNL_DEBUG=1"
#Environment="IWD_DHCP_DEBUG=1"
#Environment="IWD_ACD_DEBUG=1"
#Environment="IWD_WSC_DEBUG_KEYS=1"
ExecStart=/usr/bin/iwd -d
NotifyAccess=main
LimitNPROC=1
Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
PrivateTmp=true
NoNewPrivileges=true
DevicePolicy=closed
DeviceAllow=/dev/rfkill rw
ProtectHome=yes
ProtectSystem=strict
ProtectControlGroups=yes
ProtectKernelModules=yes
ConfigurationDirectory=iwd
StateDirectory=iwd
StateDirectoryMode=0700
[Install]
WantedBy=multi-user.target
2.3 Create iwd_path.conf and wifi-backend.conf
qingzong@qingzong-H81U:/etc/NetworkManager/conf.d$ ll
total 24
drwxr-xr-x 2 root root 4096 9月 1 20:09 ./
drwxr-xr-x 7 root root 4096 7月 31 10:28 ../
-rw-r--r-- 1 root root 50 1月 22 2021 10-ubuntu-fan.conf
-rw-r--r-- 1 root root 32 9月 17 2020 default-wifi-powersave-on.conf
-rw-r--r-- 1 root root 28 9月 1 20:08 iwd_path.conf
-rw-r--r-- 1 root root 80 9月 1 20:09 wifi-backend.conf
2.3.1 iwd_patch.conf
iwd_path.conf
[main]
iwd-config-path=auto
2.3.2 wifi-backend.conf
wifi-backend.conf
[device]
wifi.backend=iwd
wifi.iwd.autoconnect=yes