你好,
我在 openwrt 25 (6.12 内核) 上启动 IW610G 模块时遇到了困难。枚举过程现在进行得很顺利,固件下载似乎也没问题,但我遇到了崩溃。
USB枚举和固件下载每次都成功。该模块启动其主固件,打印“WLAN 固件已激活”,加载一个 VDLL 块(48000 字节)——然后,**大约 3.9 到 4.1 秒后**,固件崩溃并触发其自身的转储(“固件触发固件转储”)。在数十次启动(冷启动和热 EHCI 重新绑定周期)中,这种计时方式非常确定,这让我们怀疑是固定的内部定时器/看门狗,而不是随机信号噪声。
附件包含本次启动的完整固件转储文件(`file_fwdump`,1,230,600 字节)和驱动程序信息转储文件(`file_drv_info`,259,772 字节)。
以下是最近一次干净启动后的完整相关 dmesg 日志摘录:
[ 34.484411] usb 1-1:发现新的 USB 设备,idVendor=0471,idProduct=0214,bcdDevice=40.00
[ 34.500356] usb 1-1:产品:NXP 无线设备
[ 34.525526] VID/PID = 471/214,Boot2 版本 = 4000
[ 34.573668] 请求固件:nxp/usbusb_iw610.bin.se
[ 37.189918] fw_dnld:已下载 808824 字节
[ 37.381917] usb 1-1:USB 断开连接,设备编号 2
[ 37.883662] usb 1-1:使用 ehci 平台的新型高速 USB 设备,编号 3
[ 38.115044] usb 1-1:发现新的 USB 设备,idVendor=0471,idProduct=0215,bcdDevice=32.01
[ 38.131013] usb 1-1:产品:蓝牙和无线局域网复合设备
[ 38.288804] USB 探针:idVendor=471 idProduct=215 bInterfaceNumber=0
[ 38.295470] VID/PID = 471/215,Boot2 版本 = 3201
[ 38.300509] woal_usb_probe:无效的端点分配
[ 38.306315] USB 探针:idVendor=471 idProduct=215 bInterfaceNumber=0
[ 38.312906] VID/PID = 471/215,Boot2 版本 = 3201
[ 38.318003] woal_usb_probe:无效的端点分配
[ 38.473628] USB 探针:idVendor=471 idProduct=215 bInterfaceNumber=0
[ 38.480227] VID/PID = 471/215,Boot2 版本 = 3201
[ 38.485411] 附加 moal 句柄操作,卡接口类型:0x40d
[ 38.628304] WLAN 固件已激活
[ 38.631408] on_time 为 38628138922
[ 38.655388] VDLL:请求固件:nxp/usbusb_iw610.bin.se
[ 38.671234] VDLL 映像:长度=48000
[ 38.675868] fw_cap_info=0x487cbf03,dev_cap_mask=0xffffffff
[ 38.681912] uuid: 30548cc5aad797baaa0885c430d55486
[ 38.686932] max_p2p_conn = 8, max_sta_conn = 8
[ 42.576334] FW 触发信号转储 <-- “WLAN 固件已激活”后约 3.95 秒
[ 42.579535] =====固件触发器转储====
[ 42.589155] 目录 /var/dump_42 创建成功
[ 42.601497] 固件转储目录名称为 /var/dump_42
[ 42.607105] DRV 转储数据位于 /var/dump_42/file_drv_info
[ 43.786094] IOCTL 失败:d64defa8 id=0xd0000,sub_id=0xd0004 action=1,status_code=0x80000007 [CMD_CANCEL] (MLAN_OID_11D_功能域_INFO_EXT)
[ 43.796200] IOCTL 失败:12d298a2 id=0x30000,sub_id=0x30003 action=2,status_code=0x80000007 [CMD_CANCEL] (MLAN_OID_ANT_CFG)
[ 43.807348] 11D:在固件中设置功能域信息时出错
[ 43.844117] 获取固件信息失败!状态=-1,错误代码=0x0
[ 43.954897] 固件初始化失败
[ 43.963379] 卡片已移除:-2
[ 44.027311] woal_usb_probe: woal_add_card 失败
考虑到“WLAN 固件已激活”后约 4 秒的确定性以及两个已取消的命令(`ANT_CFG`、`11D_DOMAIN_INFO_EXT`),此崩溃特征是否与 `MM6X18540` 系列中的任何已知问题相匹配,或者我们应该在固件转储中检查哪些特定内容?如果这样有用,我很乐意直接分享 `file_fwdump`/`file_drv_info` 文件——您希望我们如何发送它们?
感谢您提供的任何建议。
- **主机SoC**:高通Atheros QCA9533(AR9531/QCA9533系列),定制板,OpenWrt,Linux内核6.12.71(ath79目标)。
- **模块**:NXP IW610(Wi-Fi 6 + BLE 5.4 + 802.15.4 组合),通过 USB2.0(Wi-Fi + BT)连接进行本次测试;板上存在 SPI(802.15.4)链路,但**目前已禁用**(见下文)。
- **驱动程序**:`nxp-imx/mwifiex`,提交 `09f41e1423e4806a127507d5fa284cd02c46772f` — "热修复版本 MM6X18540.p41 的驱动程序提交"(2025-12-23),分支“hotfix/lf-6.12.49_2.2.0_hotfix”。已编译 `MLAN_RELEASE_VERSION "540.p41"`。
- **固件**: `usbusb_iw610.bin.se`(仅限 Wi-Fi+BT,无 SPI 模块),从 `nxp-imx/imx-firmware` 提交 `216a015fea` 拉取 — “热修复版本 MM6X18540.p41 2025-12-23 的固件提交”,内部标签 `IW610-18.99.5.p86`。这是 NXP 官方发布的固件说明,与 p41 驱动程序配套使用。
- 模块参数(`wifi_mod_para.conf`):`USBIW610 = { dual_nb=0 fw_name=nxp/usbusb_iw610.bin.se }` — 明确禁用第二个窄带 (802.15.4/SPI) 固件块,以便我们能够单独测试纯 USB Wi-Fi+BT。
在调试模式下,DOMIAN INFO 似乎是固件未响应的最后一个命令:
[ 1221.243476]QUEUE_CMD:802_11_SNMP_MIB [0x16] 已加入队列
[ 1221.251155] 11D:Country=US band=0 sub-band=1 dfs_region=1
[ 1221.256730] 11D:第一个通道=1,通道数=11,最大传输功率=23
[ 1221.262395] mlan%d:
[ 1221.262402]QUEUE_CMD:802_11D_DOMAIN_INFO [0x5b] 已排队
[ 1221.270406] wlan_set_regiontable: 2.4G 0x10
[ 1221.274723] wlan_set_regiontable: 5G 0x10
[ 1221.283423] mlan%d:
[ 1221.283454]DNLD_CMD (1221.280171):802_11_SNMP_MIB [0x16],act 0x1,len 16,seqno 0x18,timeout 5000
[ 1221.295486] mlan_write_data_async_complete: CMD
[ 1221.300210] mlan_recv: CMD (1221.296961)
[ 1221.313352] mlan%d:
[ 1221.313384]CMD_RESP (1221.310098):802_11_SNMP_MIB [0x8016],结果 0,长度 16,序列号 0x18
[ 1221.324316] mlan%d:
[ 1221.324327]DNLD_CMD (1221.321067):802_11D_DOMAIN_INFO [0x5b],act 0x1,len 32,seqno 0x19 timeout 5000
[ 1221.336726] mlan_write_data_async_complete: CMD
[ 1221.498408] mlan%d:
[ 1221.498441]QUEUE_CMD:802_11_RF_ANTENNA [0x20] 已加入队列
[ 1221.540732] mlan_recv: 事件 0x73 (1221.537479)
[ 1221.545540]固件触发固件转储
[ 1221.548946] =====固件触发器转储====
看来大端字节序版本缺少一些转换。
我无法再处理 NXP 的案例了,所以在这里发布补丁。
你好, @Nicolas07
目前我只能建议您尝试使用我们的最新版本,看看是否仍然存在此问题。
转发:
imx-firmware/FwImage_IW610_USB at lf-6.18.20_2.0.0 · nxp-imx/imx-firmware · GitHub
司机:
GitHub - nxp-imx/mwifiex:WiFi 扩展 · GitHub
同时,我将在内部检查这是否是一个已知问题,并尝试使用我们的 I.MX 8MMini 板和我们的 IW610-EVK(配置为 USB-USB 模式)来测试,看看我们的板子是否存在问题。
顺祝商祺!
Christine。
我使用的是提交版本 b8c868b7cb9feef21cfca1f6797c7ecddd2a154f,几乎是最后一个版本及其关联的固件。
我添加了一些针对大端字节序的补丁,一些代数计算是在交换值上进行的,而不是在末尾进行交换;一些常量也需要交换,RSSI 的有符号字符转换也不好,但现在固件和驱动程序可以启动了。不再崩溃了,我正在研究蓝牙集成,但我需要对 btusb 进行修补,以分离 wifi 和 bt,以避免 BT 驱动程序捕获所有接口。
我现在遇到了一些 BT dmesg 错误:
[ 730.281450] Bluetooth: hci0: 操作码 0x2037 失败: -89
[ 889.879426] Bluetooth: hci0: 操作码 0x2037 失败: -89
[ 1316.825236]蓝牙:hci0:操作码 0x2037 失败:-89
[ 1624.159890]蓝牙:hci0:操作码 0x2036 失败:-16
[ 1666.734681]蓝牙:hci0:意外的 cc 0x0c14 长度:1 < 249
试图弄清楚原因
顺祝商祺!
尼古拉斯
你好, @Nicolas07
根据您的输出错误日志,我建议您执行以下操作:
[ 730.281450] Bluetooth: hci0: 操作码 0x2037 失败: -89
[ 889.879426] Bluetooth: hci0: 操作码 0x2037 失败: -89
[ 1316.825236]蓝牙:hci0:操作码 0x2037 失败:-89
==>HCI_LE_Set_Extended_Advertising_Data(OGF: 0x08, OCF:0x0037)。我怀疑这与大端字节序有关。请检查 btusb RX 路径中的字节顺序处理;确保 0x2036 首先执行成功。
[ 1624.159890] Bluetooth: hci0: 操作码0x2036失败: -16
==> 首先发送 HCI_LE_Set_Extended_Advertising(OGF:0x08,OCF:0x0036)以禁用,然后修改参数。
[ 1666.734681] Bluetooth: hci0: 意外的 cc 0x0c14长度: 1 < 249
==>IW610 仅支持 BLE,不支持 BR EDR。因此,当发送HCI_Read_Local_Name 0x0c14(OGF:0x03 和 OCF:0x0014)命令时,固件只会返回一个 1 字节的错误状态。您可以尝试在 BlueZ 设置流程中跳过此命令。
顺祝商祺!
Christine。
我的错,
我使用安卓设备检查了 BLE 广播,发现如果没有配置文件,广播会被过滤掉;而使用 nrF Connect,我可以看到设备并连接到它。
感谢@Christine_Li的帮助,下一步将是基于 SPI 的 Zigbee 无线电,那是另一个故事了。
顺祝商祺!
尼古拉斯
抱歉,我回复这个帖子有点困难。我修正了 BlueZ 中的一些字节序问题,现在命令运行流畅,但我无法发现该设备(但该设备可用于发现其他外围设备)。
Usbmon 似乎没有任何问题,我应该检查哪些方面来了解问题所在?(如果需要,我可以提供 usbmon 跟踪信息,我只是想尽量简化消息,以便确认它是否已发布…… :s)
# LE 设置扩展广告参数 (0x2036),25 字节命令
83a97380 S Co:1:003:0 s 20 00 0000 0000 001c 28 =
36201901 1300a000 00a00000 07000000 00000000 00007f01 00010000
^^^^ 操作码 0x2036 ^^ 句柄=1
^^ plen=25(0x19) ^^^^ 属性=0x0013(可连接|可扫描)
^^^^^^ min_interval=0x0000a0 (100毫秒,24位LE)
^^^^^^ max_interval=0x0000a0 (100毫秒)
^^ channel_map=0x07 (37,38,39)
^^ own_addr_type=0x00(公共)
# -> 命令完成
8396db00 C Ii:1:003:6 0:1 7 = 0e050136 20000c
^^ 事件=0x0e ^^ 数量=5 ^^ ncmd=1 ^^^^ 操作码=0x2036 ^^ 状态=0x00(成功) ^^ 发射功率=0x0c(12dBm)
# LE 设置扩展广告数据 (0x2037),7 字节命令
83a97380 S Co:1:003:0 s 20 00 0000 0000 000a 10 =
37200701 03010302 0106
^^^^ 操作码 0x2037 ^^ 句柄=1 ^^ 操作=0x03(完成) ^^ 片段优先级=0x01
^^ data_len=0x03 ^^ AD: len=2,type=0x01(Flags),val=0x06
# -> 命令完成:状态 0x00(成功)
# LE 设置扩展广告启用 (0x2039): 状态 0x00(成功)
顺祝商祺!
尼古拉斯
你好, @Nicolas07
感谢您的反馈,很高兴得知无线局域网和蓝牙现在都能正常工作了。
您能否暂时关闭此工单,如果将来遇到任何其他问题,请创建一个新的工单?
顺祝商祺!
Christine。