使用 procfs 测试 WiFi Linux 驱动程序进行认证问题

问题描述 投票:0回答:1

我正在使用基于 NXP (w8987o) 的无线模块。该模块不需要进行太多的软件集成即可在 Linux 内核版本 5.15.67 下开始工作。内核似乎在

drivers/net/wireless/marvell/mwifiex/
下提供了驱动程序。我执行了以下操作来查找系统中运行的确切驱动程序:

readlink /sys/class/net/mlan0/device/driver
../../../../../../../../bus/sdio/drivers/mwifiex_sdio 
 
lsmod | grep mwifiex
mwifiex_sdio           36864  0 
mwifiex               266240  1 mwifiex_sdio
cfg80211              671744  1 mwifiex

到目前为止,Wifi 似乎运行良好。现在我们正准备进行用于认证目的的测试,供应商似乎建议使用以下类似的(示例)脚本进行认证:

echo "rf_test_mode=1" >> /proc/mwlan/adapter0/config                # enable RF test mode
echo "tx_antenna=1" >> /proc/mwlan/adapter0/config                  # 1x1
echo "rx_antenna=1" >> /proc/mwlan/adapter0/config                  # 1x1
echo "band=0" >> /proc/mwlan/adapter0/config                        # 2.4 GHz band
echo "bw=0" >> /proc/mwlan/adapter0/config                          # 20 MHz
echo "channel=11" >> /proc/mwlan/adapter0/config                    # Ch11 => 2462 MHz
echo "tx_power=16 2 0" >> /proc/mwlan/adapter0/config               # 16 dBm MCS PathA
echo "tx_continuous=0" >> /proc/mwlan/adapter0/config               # stop ongoing transmissions 
echo "tx_continuous=1 0 0xAAA 0 3 3" >> /proc/mwlan/adapter0/config # packet mode, 0xAAA payload, CS mode disabled, both subchannels active, MCS3
cat /proc/mwlan/adapter0/config

现在,当我查看 drivers/net/wireless/marvell/ 源代码时,我看不到任何上述 proc 接口是由

drivers/net/wireless/marvell/
代码提供/公开/创建的。显然,测试用例建议来自于另一个基于 i.MX 8M 的系统中相同无线芯片组的集成,其中(在我看来)驱动程序最有可能将这些 proc 接口导出给用户。现在,我的问题是如何在不更改现有 WiFi 驱动程序(marvell)的情况下实现类似的测试功能?我认为一定有一些 IOCTL,我可以使用它们来克服 proc 依赖性,但我找不到 IOCTL 命令所在的位置。我发现了一个名为
driver/net/wireless/marvell/mwiflex/sta_ioctl.c
的文件 - 但它没有告诉我从用户空间使用哪些命令,也没有告诉我如何打开驱动程序设备文件。我还安装了 debugfs,可以获取有关驱动程序的一些信息,如下所示:

mount -t debugfs none /sys/kernel/debug
# cat /sys/kernel/debug/mwifiex/mlan0/info 
[ 5013.941246] mwifiex_sdio mmc0:0001:1: info: MWIFIEX VERSION: mwifiex 1.0 (16.68.10.p33) 
driver_name = "mwifiex"[ 5013.974665] mwifiex_sdio mmc0:0001:1: info: MWIFIEX VERSION: mwifiex 1.0 (16.68.10.p33) 

driver_version = mwifiex 1.0 (16.68.10.p33) 
verext = w8987o-V0, RF878X, FP68_LINUX, 16.68.10.p33
interface_name="mlan0"
bss_mode="STATION"
media_state="Connected"
mac_address="xx:xx:xx:xx:xx:xx"
multicast_count="3"
essid="ABCXYZ"
bssid="xx:xx:xx:xx:xx:xx"
channel="x"
country_code = ""
region_code="0xYY"
multicast_address[0]="xx:xx:xx:xx:xx:xx"
num_tx_bytes = 248
num_rx_bytes = 11665
num_tx_pkts = 2
num_rx_pkts = 99
num_tx_pkts_dropped = 0
num_rx_pkts_dropped = 2
num_tx_pkts_err = 0
num_rx_pkts_err = 0
carrier on
tx queue 0:started 1:started 2:started 3:started

但这并不能帮助我围绕这个设计一个测试,因为上面的 debugfs 似乎是给用户的信息,反之亦然。我还在内核中启用了以下配置,以从内核获得额外的调试支持:

# cat /proc/config.gz | gunzip | grep CONFIG_CFG80211_DEBUGFS
CONFIG_CFG80211_DEBUGFS=y
# cat /proc/config.gz | gunzip | grep CFG80211_DEBUGFS
CONFIG_CFG80211_DEBUGFS=y
# cat /proc/config.gz | gunzip | grep CFG80211_WEXT
CONFIG_CFG80211_WEXT=y

但到目前为止我还没有弄清楚如何能够更改 WiFi 配置中的参数来进行一些测试。请建议是否有任何内容可以帮助我,而无需尝试用供应商提供的(如果他们 - 尚未检查)自定义驱动程序替换现有驱动程序。这对我来说是一个遥远的机会。请指教。

wifi linux-device-driver proc
1个回答
0
投票

我已经分析了这个测试脚本、现有的 WiFi 驱动程序源代码以及在驱动程序的当前形式中容纳此测试机制的可能性。我可以确认现有的 marvell/mwifiex 驱动程序中缺少 /proc/mwlan/ 。我在驱动程序源代码中进行了大量挖掘,以获得以下内容:

  • Linux 配置中未启用的隐藏进程条目。我实际上启用了相当少的可能的配置条目来尝试理解这一点。但不幸的是,这些配置(CONFIG_CFG80211_DEBUGFS、CONFIG_CFG80211_DEBUGFS、CONFIG_CFG80211_WEXT)都不能为我们提供可行的替代机制来实现此测试脚本(rf_test_2_4_ghz.sh、rf_test_5_ghz.sh)尝试实现的目标。

  • IOCTL - 理想情况下,驱动程序应通过 ioctl 调用提供相同的功能。因此,我浏览了可能的 IOCTL 命令的源代码,然后我们可以使用这些命令编写测试应用程序来实现相同的目的。但是,我发现没有ioctl接口可以帮助我们编写一个可以帮助测试的应用程序。

  • 启用 debugfs 接口,看看是否可以为我们提供一个通过路由来实现此目的,但 debugfs 接口仅限于很少的调试信息,仅此而已。

我查看了可用的恩智浦论坛和在线公共文档,看看他们是否提供了提供这些过程接口的驱动程序,看起来下面是我能找到的最接近的:

https://github.com/nxp-imx/mwifiex

在上面的源代码中,如果我们查看以下源文件,就会清楚这些 proc 接口是为 nxp-imx 测试自定义创建的:

moal_proc.c → func: woal_config_write() → 该函数实现了测试脚本中可以找到的所有 proc 节点(rf_test_mode、tx_antenna、rx_antenna、band、bw、channel、tx_power、tx_continuous、tx_continuous)。

© www.soinside.com 2019 - 2024. All rights reserved.