• 欢迎访问伊栖物联网社区,聚焦物联网技术和解决方案QQ群:735553309
  • ,从传感器到片上嵌入式系统,无线接入,边缘计算,在这里您可以讨论一切
  • 参加最新的物联网研讨会报名
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏伊栖Eccee

Linux WiFi万事通-PC和嵌入式Linux的Wifi调试方法及工具

片上系统 Robin TU 2年前 (2021-11-03) 1439次浏览 0个评论

大多数人都是拿来主义,Wifi能用不就行了么,研究这个做甚?一旦碰到问题,就会无从下手,必须对Linux下的WiFi机制,软硬件,驱动原理,配置方式,工具等做一个全面的说明。本文提到的命令和相关工具既适用于普通电脑用户,也适合嵌入式开发者参考。本文中用到的嵌入式Linux的板子是基于Digi的ConnectCore 6UL的开发板。

一、硬件和驱动信息

对于已经安装好驱动的系统来说,本不该操心这个,但如果你的驱动不对,或是你用了一种很新的网卡需手动安装驱动时,就要理解硬件了,也就是你需要先知道你的无线网卡是哪一款。在有些发行版或嵌入式系统,只要熟悉和了解自身的硬件及其加载的驱动,才能更好地配置Wifi.

ethtool 是用于查询及设置网卡的工具。此外,读取硬件信息和相关接口也是一种方法,命令是lshw, lsusb或lspci(根据您硬件上wifi的接口)此外,还可以看启动信息dmesg中的相关硬件信息。默认地,PC机上的ubuntu已经自带有这些命令。

在PC机上,一般可以通过lspci来查询硬件驱动信息,常用命令为:

lspci -k |mroe 
或
lspci -vvv

一般可以找到Wifi芯片及内核驱动信息。

对于嵌入式Linux来说,一般需要在定制和编译系统时添加到rootfs中,如果您想在ConnectCore 6UL中测试这些工具,可以下载预编译好的集成ethtool和lshw的Linux卡刷包. 当然,这种硬件相关的命令,在嵌入式linux中的支持程度也是因板子而异的。

在ConnectCore 6UL的开发板上用

lshw -c network

列出所有网卡信息,可以找到wifi相关的项:

注意,嵌入式板子的相关硬件信息不仅和系统定制时的配置信息有关,也和工具软件的支持有关,并不能总是显示完整信息。从上面的信息可以看到,这个板子上的Wifi配置是Qualcomn芯片组,支持802.11n,驱动是ar6k_wlan。事实上这个信息并不准确,应该是早期ConnectCore28遗留下的配置信息,而并非系统真正加载的驱动程序。

用ethtool 这个工具更主要是在PC机上使用,它可直接获取到对应网卡接口的内核驱动及版本信息。但在Digi 嵌入式开发板上用

ethtool -i wlan0

能获取的信息并不多(只有驱动名称),同样地,它依赖于BSP的配置信息。不过,在PC机上,这个命令可以获取很多网卡的信息。这是因为PC上大多是采用Intel和AMD的芯片组,BSP 信息大多是完整且准确的。

用dmesg获取信息:

 dmesg |grep wireless 

可以获取Wifi芯片的型号类型:QCA65x4。

综上,硬件信息读取工具不仅取决于软件对硬件的支持程度,也和BSP的配置信息密确相关,它毕竟不是扫描出来的信息,在嵌入式板卡上,除非是网卡驱动安装错误等场景,一般不依赖于这些工具来识别硬件。对于Wifi来说,只要硬件和对应驱动可正常工作,大多可以通过lsmod(列出内核模块驱动)和modinfo(内核驱动信息)两个工具来检查所加载的驱动信息。

在ConnectCore 6UL单板计算机上,用lsmod可以查得其加载的无线设备驱动内核模块为wlan,再通过modinfo wlan来列出详细信息。

值得注意的是,Linux虽然是开源软件,但不论是PC机还是嵌入式设备,像wifi,以及显卡等商业设备,它们的固件是闭源的,由制造商提供。所以.ko内核驱动并不是驱动程序的全部,通常它会调用厂家提供的固件,来实现完整的wifi功能。芯片厂家的固件程序一般位于/lib/firmware中。通常厂家会提供固件的配置文件,除了用默认的配置外,高端用户也可以通过修改配置文件来实现对wifi功能的一些自定义配置。如果要对默认的wifi固件配置文件进行变更,请先备份一份原始配置文件(位于/lib/firmware/wlan目录下)以便可以随时恢复。

二、配置工具和工作模式

如果硬件驱动加载正确,就可以通过通用的无线工具软件来获取相关信息并进行配置。iwconfig是个已经过时的软件,iw则是更新的软件工具。常用的工具软件还包括wpa_cli和nmcli。

linux下用wpa_cli来连接wifi:

wpa_cli -i wlan0 scan              //扫描附近热点
wpa_cli -i wlan0 scan_result   //打印热点信息
wpa_cli -i wlan0 add_network // 添加一个网络连接,并返回网络ID号,如果wpa_supplicant.conf文件为空,则返回0,表示第一个热点,然后该ID号会在连接热点用到
wpa_cli -i wlan0 set_network 0 ssid '"HiByMusic_5G-1"'    //设置ID为0的热点SSID
wpa_cli -i wlan0 set_network 0 psk '"hibymusic1109"'    //设置ID为0的热点的密码
PS:如果是没有加密的公共网络,则输入以下密码:

wpa_cli -i wlan0 set_network 0 key_mgmt NONE
继续输入:

复制代码
wpa_cli -i wlan0 set_network 0 priority 2     //设置当前网络优先级,默认为2
wpa_cli -i wlan0 set_network 0 scan_ssid 1    //设置ssid默认为1即可
wpa_cli -i wlan0 enable_network 0            //启动连接ID为0的网络

wpa_cli -i wlan0 select_network 0             //选择网络0(这样做的好处在于,可以取消先前的其它网络连接)

udhcpc -b -i wlan0 -q    
         //此时只是连接上,所以还要自动分配IP地址,-b:后台(back) –i:指定接口 –q:获得续约后退出  ,如果想尽在前台运行,则去掉-b,加上-f

https://www.cnblogs.com/lifexy/p/10180653.html

参考:https://www.digi.com/resources/documentation/digidocs/embedded/dey/3.0/cc6ul/bsp_r_wifi-get-started

未完待续

 

 

三、ConnectCore系列SOM的Wifi配置
更改区域,默认为USA

=> setenv regdomain 1 (0 = USA, 1=WW, 2=JP)

Using the standard hostapd.
Qualcomm/Digi recommends a maximum number of 10 connected clients. Empirically up to 16 connections have been established.
hostapd vs wpa_supplicant: Although the WPA supplicant can also be used for softAP modes, hostapd offers extra functionality and flexibility:
Channel  and protocol selection
MAC filtering
Automatic channel selection
Beacon interval configuration
Rates managements
Multiple BSSIDs
The extra features that are not supported by the WPA supplicant are not currently part of Digi’s validation
Enabling it on the DUT
Modify /etc/network/interfaces:
auto wlan0
iface wlan0 inet dhcp
       udhcpc_opts -b
       wpa-driver ##WPA_DRIVER##
       # wpa-conf /etc/wpa_supplicant.conf
       post-up /etc/init.d/hostapd start
       pre-down /etc/init.d/hostapd stop

Configure /etc/hostapd.conf

四、PC端的一些wifi小技巧

* 硬件没打开时如何处理

sudo ip link set wlo1 up
RTNETLINK answers: Operation not possible due to RF-kill

 
这个一般是有硬件的Wifi开关没打开所至,可以安装rfkill来查看
sudo rfkill list all
如果有phy0有hard blocked: yes字样,一般可以检查BIOS的电源管理或是Fn+F2无线开关。

* 休眠时wifi不断开
有时候电脑只接着wifi,其它机器通过wifi访问这台电脑,这时如果长期不用,息屏后wifi会断开,要解决定个问题,只需更改一个配置参数:

sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
#把wifi.powersave改为2,如下:
[connection]
wifi.powersave = 2

ECCEE版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux WiFi万事通-PC和嵌入式Linux的Wifi调试方法及工具
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址