目录
最近daisy一直忙活这个linux的wifi驱动和bluze蓝牙驱动,相比较蓝牙,WiFi的驱动和内核配置已经简单了很多,还有很多坑🕳需要一点点的踩过才知道。
不过所有的走过的路,踩过的坑,跨过的石头都会成会让自己变得越来越……
内核配置
首先保证Linux设备的内核支持usb以及wifi(其中CFG80211是内核中wifi驱动)
配置 CFG80211
进入内核源码sdk目录,输入make menuconfig
然后到Networking support → Wireless设置cfg80211 和 mac80211
配置usb
如果内核没有开启usb驱动接口,需要进行配置,在设备的sdk环境下输入
make menuconfig->Device Drivers
按空格选选中USB2.0为* 编译到内核
(PS如果选中M将被编译为内核模块(.ko文件)。模块可以在内核运行时动态加载或卸载,如果你不经常使用某些功能,或者想要在不重启内核的情况下添加或移除功能,可以选中M模块化)
配置 Netlink
Networking support →Networking options → Network packet filtering framework (Netfilter)
当选项为空时进入无内容可选中,按空格切换到*再进入
再IP: Netfilter Configuration ---> 进入选中 <M> ARP tables support
配置DHCP
内核之前一直找不到 DHCP
一个个查看,才发现在IP: kernel level autoconfiguration 的子目录下,只有配置这个*后才会显示 IP: DHCP support 这个是为后续进行配置动态分配ip的前提
工作流程
Linux系统已经成功驱动了USB Wi-Fi设备(这里默认wifi设备已经有固件)并且通过ifconfig -a可以看到名为wlan0的接口,然后通过wifi配置工具进行工作模式的配置(具体可以看我下一篇文章的介绍)
linux环境的wifi配置工具及工作模式区分介绍-CSDN博客
1.连接到无线网络
首先,你需要知道无线网络的SSID(网络名称)和密码。使用iwlist wlan0 scan命令来扫描可用的无线网络。这将列出周围的无线网络及其相关信息,如SSID、加密类型等。
选择你想要连接的网络,使用wpa_supplicant或wpa_passphrase来创建一个安全的配置文件。例如:
wpa_passphrase SSID_PASSWORD > wpa.conf
其中,`SSID_PASSWORD`是你的网络名称和密码(两者之间用空格分隔)。
使用wpa_supplicant连接到网络。打开一个终端窗口并运行:
wpa_supplicant -Dwext -iwlan0 -c wpa.conf -B
`-Dwext`指定使用旧的无线扩展,`-i wlan0`指定了接口,`-c wpa.conf`是配置文件路径,`-B`让wpa_supplicant在后台运行。
2. 设置网络接口:
一旦wpa_supplicant成功连接,你需要将接口设置为up状态并分配IP地址。可以使用dhclient或手动配置IP。通常使用dhclient自动获取IP地址:
dhclient wlan0
或者,如果你的网络需要静态IP,可以手动设置:
ifconfig wlan0 <IP_ADDRESS> netmask <NETMASK> broadcast <BROADCAST_ADDRESS>
route add default gw <GATEWAY_IP>
3.验证连接:
使用ping命令测试网络连接:
ping -c 4 google.com
如果可以收到回应,说明网络连接成功。
4. 接收数据:
接收数据是通过网络接口自动进行的,一旦连接建立,你的系统将自动接收通过该接口的数据。你可以使用tcpdump或wireshark等工具来捕获和查看网络流量,但这通常用于调试或监控目的。
保持连接:为了保持连接,你可能需要在启动时自动运行wpa_supplicant和dhclient。这可以通过添加相关脚本到启动服务或者使用systemd服务来实现。