This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/WL1835MOD:Wl18xx Linux 数据包数据速率慢

Guru**** 2559910 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/712734/linux-wl1835mod-wl18xx-linux-packet-data-rate-slow

器件型号:WL1835MOD
Thread 中讨论的其他器件:WL1271

工具/软件:Linux

大家好、我们在自己的板上有一个 wl1805。 WiFi 连接质量很好:

~# iw wlan0信息
接口 wlan0
ifIndex 3.
WDEV 0x1
地址50:65:83:E1:6c:C6
类型受管
wiphy 0
通道4 (2427MHz)、宽度:40MHz、中心1:2437MHz
~#
~# iw wlan0 link
connected to F8:D1:11:4c:70:fa (在 wlan0上)
SSID:DemoAP
频率:2427.
RX:2302字节(38个数据包)
TX:1422字节(14个数据包)
信号:-45dBm
TX 比特率:108.0 Mbit/s MCS 5 40MHz

BSS 标志: 短前导码短时隙时间
DTIM 周期:1.
信标内部: 100

但是,当我装载 NFS 卷和复制的文件时,数据包数据传输速率仅低于每秒1M 位。 数据包数据速率由一段时间内传输的文件大小来衡量。 传输200k 字节的文件大约需要2秒、传输20M 字节的文件目录则需要170秒。 作为比较、我们将其与 USB-WIFI 加密狗进行了比较、后者可实现大约10M 至20M 的每秒比特传输率性能。

如何调试/诊断此问题?

固件版本为:

$字符串 wl18xx-fw-4.bin | grep -i 修订
版 FRev 8.9.0.0.69
修订版8.2.0.236

该驱动程序从 Debian 9.2移植到 BeagleBoneBlack Wireless、内核为4.9.37-ti-r47。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    文件复制不是测量 WiFi 数据吞吐量的方法、因为它涉及系统中其他不直接相关的部分。
    在测试平台与其他平台(PC)之间的 iperf UDP/TCP 传输时、您得到了什么数字? 连接到同一 AP?

    此致、
    Eyalk
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Eyalk、

    尚未完成 iperf 测试。 我将在得到数字后向您进行更新。  

    在开始使用 iperf 之前、是否有可调整的配置和参数以影响性能?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不是真的。
    通常会影响性能的是 WiFi 环境(噪声通道等)、这也会显示在 UDP iperf 测试中。

    此致、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Eyal、感谢您的深入见解! 构建用户空间需要一些时间。 完成后、我将发布 iperf 结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eyalk、

    测试从目标通过 WiFi 路由器到位于路由器铜端口上的 PC。

    以下是目标端的 TCP 测试结果:

    ----------------------------------------
    服务器侦听5201
    ----------------------------------------
    接受来自192.168.7.101端口46840的连接
    [5] 本地192.168.7.199端口5201连接到192.168.7.101端口46842
    [ ID]间隔          传输    比特率
    [5]   0.00-1.00  秒  762 KB 6.24 Mbit/s
    [5]   1.00-2.00  秒  178 KB 1.46 MB /秒
    [5]   2.00-3.00  秒 69.3KBytes  568 kb/s
    [5]   3.00-4.00  秒 0.00字节 0.00位/秒
    [5]   4.00-5.00  秒 12.7 KB  104 KB /秒
    [5]   5.00-6.00  秒 0.00字节 0.00位/秒
    [5]   6.00-7.00  秒 0.00字节 0.00位/秒
    [5]   7.00-8.00  秒 29.7 KB  243 KB /秒
    [5]   8.00-9.00  秒 7.07 KB 57.9千位/秒
    [5]   9.00-10.00 秒 12.7 KB  104 KB /秒
    [5]  10.00-11.00 秒 0.00字节 0.00位/秒
    [5]  11.00-11.51 秒 0.00字节 0.00位/秒
    ------- ------- ------- ------- -------
    [ ID]间隔          传输    比特率
    [5]   0.00-11.51 秒 1.05 MB  763 Kbits/sec                 接收器
    ----------------------------------------

    和 UDP 结果:

    ----------------------------------------
    服务器侦听5201
    ----------------------------------------
    接受来自192.168.7.101端口46848的连接
    [5] 本地192.168.7.199端口5201连接到192.168.7.101端口41607
    [ ID]间隔          传输    比特率        抖动   丢失/总数据报丢失
    [5]   0.00-1.00  sec  122 KBytes  996 Kbits/sec 397191704.485 ms 0/86 (0%)
    [5]   1.00-2.00  秒  129 KB 1.05 Mbits/sec 1117865.517 ms 0/91 (0%)
    [5]   2.00-3.00  秒  129 KB 1.05 Mbit/s 3148.219 ms 0/91 (0%)
    [5]   3.00-4.00  秒  127 KBytes 1.04 Mbits/sec 12.769 ms 0/90 (0%)
    [5]   4.00-5.00  秒  129 KB 1.05 Mbit/s 3.998 ms 0/91 (0%)
    [5]   5.00-6.00  秒  129 KB 1.05 Mbit/s 5.753 ms 0/91 (0%)
    [5]   6.00-7.00  秒  127 KBytes 1.04 Mbit/s 3.557 ms 0/90 (0%)
    [5]   7.00-8.00  秒  129 KB 1.05 Mbit/s 3.292 ms 0/91 (0%)
    [5]   8.00-9.00  秒  127 KBytes 1.04 Mbits/sec 3.881 ms 0/90 (0%)
    [5]   9.00-10.00 秒  126 KBytes 1.03 Mbit/s 1.680 ms 0/89 (0%)
    [5]  10.00-10.05 秒 8.48 KB 1.38 Mbit/s 3.902 ms 0/6 (0%)
    ------- ------- ------- ------- -------
    [ ID]间隔          传输    比特率        抖动   丢失/总数据报丢失
    [5]   0.00-10.05 秒 1.25 MB 1.04兆位/秒 3.902 ms 0/906 (0%) 接收器
    ----------------------------------------

    您是否看到一些明显的问题?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个问题:当它运行 TCP 测试时,它有时会在此回扫上出现问题:

    [816.852335][ ] wl12xx_SDIO_RAW_WRITE+0xb8/0x168 [wlcore_SDIO]
    [816.859700][ ] wl1271_ps_elp_wakeup+0x134/0x1f8 [wlcore]

    原因可能是什么? wl18xx 链路上的电源不稳定? 或者只是内核驱动程序需要很好地处理它? 可能两者都需要改进?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    有关您在上面看到的 ELP 相关问题、请将固件文件(wl18x-FW-4.bin)升级到此处的最新文件:

    git.kernel.org/.../ti-connectivity

    最新版本为 FW 版本8.9.0.0.79。 您仍在使用 FRev 8.9.0.0.69。

    关于 UDP 测试、您在客户端使用了什么命令?
    有什么类似的东西?:
    iperf -c 192.168.7.199 -b100M -t6000 -i2

    如果您这么做、结果看起来不好。
    似乎您没有针对所使用的模块、连接的天线数量等正确设置 wl18xx-conf.bin 文件

    您是否已使用 wlconf 对 wl18xx-conf.bin 进行了调整、以调整您使用的硬件模块?:
    www.ti.com/.../swra489.pdf

    请参阅第2节。

    此致、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您对此问题是否有任何更新?
    我们现在应该保持开放吗?

    BR、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eyal、两天前当您询问更新时、系统未发送通知。 现在、我回来询问更多问题、并注意到了这一点。

    至于 ELP 问题:我已将固件更新至8.9.0.0.79、现在它更加稳定。

    但我们仍会偶尔看到相同的转储。 ELP 问题的原因可能是什么? SDIO 总线上的噪声是否会导致它?

    我目前在 ps.c 中通过两个 hack 禁用 ELP、如下所示:

    int wl1271_ps_set_mode (struct wl1271 *WL,struct wl12xx_VIF *wlvif,
    enum wl1271_cmd_ps_mode)
    {
    int ret;
    U16 timeout = wl->conf.conn.dynamical_ps_timeout;
    
    switch (mode){
    case station_Auto_PS_mode:
    case station_power_save_mode:
    #if 1
    if (wl18xx_get_fw_elp_dis))}{
    /*与默认值相同:case */
    wl1271_warning ("正在尝试将 ps 设置为不受支持的模式%d 强制 elp dis"、mode);
    ret =-EINVAL;
    break;
    }else{
    #endif
    /*此处为此切换案例的原始代码*/
    #if 1
    }
    #endif
    

    void wl1271_ps_elp_sleep (struct wl1271 *WL)
    {
    struct wl12xx_VIF *wlvif;
    u32 timeout;
    
    //我们不在 PLT 模式下进入 elp 睡眠*/
    if (wl->plt)
    return;
    
    if (wl->SLEEP_auth!= WL1271_PSM-if
    
    
    
    ) return
    
    (#wlp);if #wlwl_enp_enf) return (#wl18xx)
    
    

    这是否是一个体面的解决方案? 您能在此处分享有关更新后的固件如何改进的一些详细信息吗?

    从源代码中、转储在内核从睡眠模式唤醒 wl18xx 时显示、它可能会转储反向跟踪作为警告。 这只是无害的警告、还是必须在我们的设计/开发中解决?

    现在、我们看到另一个问题:运行更长时间(例如1小时或几天)后、Linux 控制台开始在 RX 中打印损坏数据包的消息、例如:

    [3448.375861] wlcore:警告 RX 中的数据包已损坏:状态:0x1 len:183
    [3452.757950] wlcore:警告 RX 中的数据包已损坏:状态:0x3 len:60
    [3455.214661] wlcore:警告 RX 中的数据包已损坏:状态:0x3
    rx:60 [3458.906306] wlen:警告数据包已损坏
    

    您认为这两个问题是因为同一原因吗?

    我还没有完成 wlconf 部分。 这是否会导致上述两个问题?

    期待您的进一步指导!

    感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的代码有更多的解释:wl18xx_get_FW_elp_dis ()函数将始终在我的代码中返回1。 我设置了一个模块参数、因此我可以打开和关闭它以测试不同的逻辑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否共享您仍能在一段时间内看到的转储? 您看到它的频率有多高?

    如果要禁用 elp 以进行测试、最好这样做:
    processors.wiki.ti.com/.../WL18xx_Driver_Debug

    无需更改代码本身。

    您看到的已损坏的数据包消息只是一个警告,表明未正确接收到数据包并将被丢弃。 甚至可能是噪声或不同的干扰。 这不是致命错误。

    此致、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eyal、因此损坏的数据包位于空中、而不是 SDIO 总线上。 对吧?

    我将很快上传完整转储。 如果启用了 ELP、我们通常会在几分钟内看到转储、但有时会在几个小时内看到转储。 当 ELP 被禁用时、通常我们不会看到转储、但在一个周末的跑步后看到转储。

    顺便说一下、fyi、UDP 和 TCP 速率现在可以运行到36Mbps、具体取决于所连接的路由器。 我们认为、我们主要是在该区域进行了大量改进的电路板走线和天线连接。 感谢您在这一主题上的帮助、这对我们有很大帮助。

    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    完整转储屏幕副本:

    ~# ping 192.168.7.100
    ping 192.168.7.100 (192.168.7.100):56个数据字节
    64字节来自192.168.7.100:SEQ=0 TTL=64 time=115.624 ms
    64字节来自192.168.7.100:TTL=1 TTL=64 time=9.353 ms
    64字节来自192.168.7.100:SEQ=2 SEQ=64 time=7.203 ms
    64字节来自192.168.7.100:TTL=64
    字节来自192.168.6.100: SEQ=4 TTL=64 TIME=30.143ms
    从192.168.7.100开始64字节:SEQ=5 TTL=64 Time=25.253ms
    从192.168.7.100开始64字节:SEQ=6 TTL=64 Time=9.446ms
    从192.168.7.100开始64字节:SEQ=7 TTL=64 Time=8.553ms
    [261.260782]--- [在此处剪切]-----
    [261.265424]警告:CPU:0 PID:14 at drivers/net/wireless/ti/wlcore/SDIO.c:160 wl12xx_SDIO_raW_write+0x168 [wlcore_SDIO]
    [261.27685]链接的模块:wlcore_sdc18xx wlcore 18xx wlcore_write+0x178[wdT
    1.2617604]1
    :wlcc64241.781][wlworker [w26241.781][wd1:wlcc64241.782]
    
    
    任务:wld1:wlcc64241.781][wld2 [w241.781][wld2 64x64x64x64x64x_worker 1:wld1:wld1:wld1:w26241.24 ffffffc012492400 task.stack:ffffffc012558000
    [261.308359] PC 位于 wl12xx_SDIO_RAW_WRITE+0x168 [wlcore_SDIO]
    [261.314617] lr 位于 wl12xx_SDIO_RAW_WRITE +0x7c/0x168 [wl6000001224][wl6000001224][wl60000024:00000001524][w10000024:800001624][w10000024] x3824[w10000024:800001624][w10000024[w10000024:800001624]
    
    
    
    
    00000000000000000000
    [261.347478] x23:000000000004 x22:ffffc011d0b080
    [261.352785] x21:ffffffc01196f810 x20:00000001fffc
    [261.358092]x19:ffff000000011d16800 x18:800000000013x3800013
    
    
    :000000013x0000000x 000000013000x 000000013
    
    :0000000130000000x 0000000130000000x 000000013:0000000130000000x 0000000130000000x 000000013:0000000130000000x 000000013:0000000130000000x 0000000x 000000013:0000000130000000x 000000013:0000000x 000000013 0000000130000000x 0000000x 000000013 0000000x 000000013 ffffffc012492c80
    [261.389933] x7:0000003cd45a4ea0 x6:000000000000
    [261.395240] x5:ffff547 c013bbff80 x4:00000000000000000000
    [261.400249] x3:000000000000000000000000 x2:00000000ffffac [261.4058ff804bff] x242d16242]-
    d1600000000
    
    :0000400000000
    
    [261.419687]异常堆栈(0xffc01255bab0至0xffc01255bbe0)
    [261.426117] baa0: ffffffbb11d16800 0000007ffffffffffff
    [261.433935] bac0:c0ffbb1255bc90 ffffff8000 8b0 0000000000000005 00000000003d
    [261.441753] ba0:ffc01255bc78 ffffff800d80000000008 0000ff0000ff800ff800000080000
    [0000800ff800ff800ff000040000ff800ff80000000001b1000000:0000ff800ff800ff800ff800000040000ff800ff8006001000001b1000001b1000000:ff800ff800ff80060010000024000240001b1000001b1000001b1000001b1000001bff0000ff0000ff0000ff0000ff0000ff0000ff0000ff60010000024000240001FF4000001b1000001b1000001b1000001b1000001b1000001bff0000FF4000001b1000001bff0000FF400000240000FF400000240000FF4000001FF400000240001b1000001
    
    
    
    000000000000 ffffc013bbff80 000000000000 0000003cd45a4ea0
    [261.488661] bba0:ffffffc012492c80 ffffffc012558000 0000000000000820 ffffffffc013bbff80
    [261.496479] bbc0: 0000000000000000 ffffffff4980017518 00000000004c 000000000033
    [261.5042999][] wl12xx_SDIO_RAW_WRITE + 0x168 [wlcore_SDIO]
    [261.5411658][] wl1271_ps_elp_WAKEUP + 0x134/0x1f8 [wlcore-0x1.524][0x1.524][wl802+0x1.524]
    [wtrade802+0x1.524][x6424_trade80]x [w24+0x1.524][w24+0x1.524][w6424_try+0x1.524][w24_try+0x1.524][w24_try+0x1.524]
    
    [w24+0x1.524][w24_zh-[x641]+0x1.524_trade80]+0x152]x [w24+0x1.524_try+0x154+0x154+0x152]x [w24_zh-[w24_zh-[w24_zh-[
    
    
    
    [在此处剪切]-----
    [261.556830]警告:CPU:0 PID:14 at drivers/net/wireless/ti/wlcore/main.c:877 wl12xx_queue_recovery_work.part.24+0x58/0x60 [wlcore]
    [261.568899]链接的模块:wlcore_SDIO wl18xx wlcore_worker 182[26571.5714][CPU
    
    :1.56g_wlcore:1.5614 W 4.9.37 #32
    [261.584738]硬件名称:演示板(DT)[261.590795]
    工作队列:phy0 wl1271_TX_work [wlcore]
    [261.595665]任务:ffffffffc012492400 task.stack:ffffffffc012558000
    [261.601631] PC at wlcore[0x851224][wlr_workqueue
    
    :[0x1652]+wlr_wlr.lp6424][0xlr_work][0x1652][wlr_workqueue:[0x1652]+wlr_wlr_wlrb[0x1652][wlr_wlr_w51224][wlr_work][0x1624_wlr.lp
    ffffffc01255bcb0
    [261.625406] X29:ffffffc01255bcb0 x28:000000000000
    [261.630713] X27:00000000ffffac x26:0000000000000000
    [261.636020] x25:c0ff00008000000ff8000000000867000000x24:ff8000000ff18x260001x260001x18[0000FF6500017]
    x66x 10000017x 1001.00017x 10000017x 10066x 18x
    
    
    1001.00017x 1006518x 100x 100x 18x 1001.00017x 100x 100x 18x 1006518x 100x 100x 100x 100x 100x 100x 18x 18x 18x 18x 100x 18x 18x 100x 100x 18x 100x 18x 100x 100x 100x 18x 18x 18x 18x 18x 100x 18x 18x 100x 100x 18x 100x 18x 18x 100x 18x 18x 18x 100x 18x 100x 18x 18x 100x 18x 18
    000000000000000000000005
    [261.667863] X13:ffff8008972d85 x12:000000000007
    [261.673170] x11:000000000002 x10:000000000000021c
    [261.678476] x9:000000000040 x8:282064656c69166
    [2680060000021x [26800000000070000000786]:000080000008000000000200000002000000060000000x
    200000006000000020000000x:0000000600000006000000060000000600000006:000000060000000x 1000002:000000060000000600000002:000000060000000600000002:0000000600000006000000060000000x 800000600000002:000000060000
    
    00000000000000000002 x0:0000000000004009
    [261.705010]
    [261.706492]--[结束跟踪1d540c2d21d6a5f8 ]--
    [261.711098]呼叫跟踪:
    [261.713536]异常堆栈(c0ffc01255bad0至0xffffffffc125500]
    )[261.711066] ffffffffff000011d79440 0000007ffffffffffffff
    [ 261.727784] bae0:c0ff1255bc0 ffffff600d9bf8 0000600000000000000000000000000000000003d
    [261.735602] bb00:ffffffff00001255b0 0000ff60080000006000003600036100000361000003610000064]
    
    
    
    
    000000000000 000000000000000a ffffff8008972db7 206574697277206f
    [ 261.782510] bbc0:282064656c696166 000000000040 000000000000021c 0000000000000002
    [ 261.790327] bbe0: 0000000000000007 ffffretn 8008972d85 0000000000000005 00000000fffffe
    [ 261.798203][] wl12xx_queue_recovery_work.part.24+0x58/0x60 [wlcore]
    [261.806165][] wl12xx_queue_recovery_work+0x674+0x24]
    [wlcore0x2624_w128_wl8024][wlcore0x2624_w128_w128][0x2624_w128_w128_w128_wlcore806424][w128_wl][0x2624_w128_w128_w128_w128_wlcore806424][wl][wl][wl][0x2624_w128_w128_w128_wl][0x2624_w128_w128_w128_w128_w128_wlcore [0x2624][wl128_w128_w128_w128][wl128_wl][
    
    
    
    
    
    固
    
    
    
    
    件版本:版本8.9.0.79 [261.855066] wlcore:down [261.857609] wlcore:down [261.860172] sdiodbg wlcore io.h 224 wl1271_power_off power off [ 261.866528] sdiodbg wlcore SDIO.c wl12xx_SDEE0_power off
    
    [ 261.866528] sdiodbg wlcore SDIO.c wl6219_power off [26862119_power off ] 请求硬件重启
    
    [261.913587] sdiodbg wlcore io.h 241 wl1271_power_on power on
    [261.919856] sdiodbg wlcore SDIO.c 219 wl12xx_SDIO_SET_power on
    
    [262.331545] wlcore:使用反相中断逻辑:2
    
    ^C
    - ping 192.168.7.100- -
    发送11个数据包、接收8个数据包、27%数据包丢失
    往返最小值/平均值/最大值= 6.283/26.482/115.624 ms
    ~#
    
    [272.848592] mmc2:等待硬件中断的超时。
    [272.853994] sdhci:==== 寄存器转储(mmc2)===========
    [272.859817] sdhci:sys addr:0x0000003b |版本:0x00000005
    [272.865638] sdhci:BLK 大小:0x00007100 | Blk cnt:0x00000000
    [272.871458] sdhci:参数:0xac000040 | Trn 模式:0x00000023
    [272.87727100] sdhci:0x000000
    
    :0x270003210] sbt:0x000000:0x000000 MHz 100b:0xDS100b:0x000000:0x00003220] 0x00000000 |时钟:0x0000000f
    [ 272.894741] sdhci:超时:0x0000000e | int stat:0x00000000
    [ 272.900562] sdhci:int enab:0x03ff000b | sig enab:0x03ff000b
    [ 272.906383] sdhci
    :acmd err:0x00000000 | slot 2204] sdhci:0x0000204:0x00000000: 0x3f6ec881 | Caps_1:0x08000077
    [272.918024] sdhci:cmd: 0x0000353a |最大电流:0x00000000
    [ 272.923844] sdhci:host ctl2:0x00000080
    [ 272.927757] sdhci:Adma Err:0x00000030 | ADMA ptr:0x000053c7720c
    [ 272.934271] sdhci:====================================================================================================================================================================================
    [272.940280]------ [在此处剪切]-----
    [272.944908]警告:CPU:0 PID:842 at drivers/net/wireless/ti/wlcore/SDIO.c:160 wl12xx_SDIO_raW_write+b0x168 [wlcore_SDIO]
    [272.956456]链接的模块:wlcore_SDIO wl18xx wlcore_write+b2[272.9642]:wlcore_p2[272.95456]
    
    模块:wlcore:272.452] W 4.9.37 #32
    [272.972298]硬件名称:演示板(DT)[272.978305]
    工作队列:Events_freezable ie80211_restart_work
    [272.984130]任务:ffffffffc011f83000 task.stack:ffffffffffc011f6c000
    [272.990041] p_raw [0x279924_lr_lr_zh_r_unt:[0x279924_r_r_r_r_r_rb_r_r_r_r_b_b_r][0x279924_r_r_r_r_r_r_r_b_r_b[0x991224_r_r_r_r_r_r_r_r_b_r_r_b_b_b_r_b
    
    
    ffffffffffc011f6fab0
    [273.013239] X29:ffffffc011f6fab0 x28:ffffffff800a05240c
    [273.018547] X27:000000000003 x26:ffff00008000 867880
    [273.023854]x25:ff0000600800a051624x24[00000000
    
    
    
    :0000ff000000030000000x 30000024x 1000003000000024] x24x 300000300000003000000024x 30000024x 10000024x 30000024x 10000024x 10000024x 10000024x 10000024x 10000024x 10000024x 10000024x 30000024x 10000024x 10000024x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x 24x
    00000000000000000001
    [273.055694] X13:ffff8008917518 x12:000000000000
    [273.061002] x11:ffff80088ea000 x10:0000000000000820
    [273.066308] x9:ffff000000011f6c000 x8:ffff000000083880 [273.0000000820:27000000083x086] x24:ff000000000000
    
    :ff0000000000013000000002x 086:27000000024:000000024:00000003000000024:000000013000000024:000000024:000000024:00000002400024000100000240002400024:00000001000002400024000100:0000000100:0000000100000240001000001000001000001000001000001000003
    
    0000000000000000 x0:00000000fffffff3
    [273.092842]
    [273.094324]--[结束跟踪1d540c2d21d6a5f9]--[273.098930]
    呼叫跟踪:
    [273.101369]异常堆栈(0xffffffffffffc011f6f8d0至 c027107700]
    ffffffff3c11d16800 0000007ffffffffff
    [273.115618] f8e0:c011f6940 fab0 ffff80008b0 0000000000000005 0000000000000000003d
    [273.123436] F900:ff0000800a05240c ffff00008b100000000 0000000170000000170000FF8000000000100000000FF800000000010000FF80000000003.000000010000FF800000000010000FF800000000010000FF800000000010000FF8000000FF800000000010000FF800000000010000FF8000000FF80000000002
    :00000000000130000FF80000000000000000010000FF8000000FF800000000010000FF8000000FF800000000010000FF8000000FF8000000FF800000000010000FF8000000FF8000000FF80000000002
    
    
    
    0000000000000000 ffffffc013bbff80 000000000000 0000003f8c815044
    [273.170342] f9c0:ffffffffc011f83880 ffffffffffc011f6c000 0000000000000820 ffffffffff80088ea000
    [273.178160] f9e0: 000000000000 ffffffff8008917518 0000000000000001 000000000010
    [273.185980][] wl12xx_SDIO_RAW_WRITE +0x168 [wlcore_SDIO]
    [273.193347][] wlcore_boot_upload_firmware+0x1c4/0x4384[wl996+0x278072+wref][0x27364+0x278024_trad_ex_exce+0x2783]
    [0x278024_ex_exc1872+0x27364+0x2783][0x278024_w_ex_exc8024_zh_exc1872][0x27364+0x27364+x364+w_ex_ex_exc8064]0x278064]0x278064[w_w_w_w_exc+0x27364+0x27364+0x27364+w_exc+w_exc+0x27364+0x278064][w_ex_ex_exc+w_
    
    
    
    
    
    
    
    [] RET_FANK_+0x10/0x30
    [273.253429] wl1271_SDIO mmc2:0001:2: SDIO 写入失败(-110)
    
    [ 273.259188] sdiodbg wlcore io.h 224 wl1271_power_off power off
    off [ 273.265543] sdiodbg wlcore SDIO.c 219 wl12xx_SDIO_set_power off
    [ 274.803587] sdiodbg wlcore 电源
    
    上的 wl242.242[io.h wdild12241] sb241_wlcore_power io.h on sbon_swi_power on
    [280.942168] sdiodbg wlcore io.h 224 wl1271_power_off power off
    [280.96985] sdiodbg wlcore io.h 241 wl1271_power_on power on
    [280.975852] sdiodbg wlcore SDIO.c 219 wl12xx_SDIO_set power on
    

    SDIO.c 中第160行周围的代码:

    128 static int __MUST_check wl12xx_SDIO_RAW_WRITE (struct device *child,int addr,
    129 void *buf、size_t len、bool 固定)
    130{
    131 内部转台;
    132. struct wl12xx_SDIO_胶 水*胶水= DEV_GET_drvdata (子级->父级);
    133. struct sdio_func *func = dev_TO_SDIO_func (culse->dev);
    134
    135 SDIO_Claim _host (func);
    136
    137 如果(不可能(转储)){
    138 printk (Kern_debug "wlcore_SDIO:写入0x%04x\n"、addr);
    139. print_hex_dump (Kern_debug、"wlcore_SDIO:写入"、
    140 dump_prefix_offset、16、1、
    141 buf、len、false);
    142}
    143 144.
    如果(不可能(addr = hw_access_ELP_CTRL_REG)){
    145 SDIO_f0_writeb (func、((u8 *) buf)[0]、addr、&ret);
    146. DEV_dbg (子级->父级,"SDIO 写入52 addr 0x%x,字节0x%02x\n",
    147 ADDR (((u8 *) buf)[0]);
    148} 否则{
    149 dev_dbg (子级->父级,"SDIO 写入53 addr 0x%x,%zu 字节\n",
    150 地址,len);
    151
    152 IF (固定)
    153 RET = SDIO_writesb (func、addr、buf、len);
    154.
    否则为155. RET = SDIO_memcpy_toio (func、addr、buf、len);
    156}
    157.
    SDIO_RELEASE_HOST (func);
    159
    160 IF (WARN_ON (RET)
    ) 161. dev_err (子级->父级,"SDIO 写入失败(%d)\n",ret);
    162
    163 RETURN;
    164}
    

    main.c 中第877行附近的代码:

    872 void wl12xx_queue_recovery_work (struct wl1271 *WL)
    873{
    874 /*避免递归恢复*/
    875 if (WL->state =WLCORE_State_on){
    876 WARN_ON (!TEST_BIT (WL1271_FLAG_WFLETED_RECOVERY、
    877 &WL->flags);
    878
    879 WL->state = WLCORE_State_Restarting;
    880 SET_BIT (WL1271_FLAG_RECOVERY_IN_PROGRESS、&WL->FLAG);
    881 wl1271_ps_elp_wakeup (WL);
    882 wlcore_disable_interrupts_nosync (WL);
    883 ieee80211_queue_work (wl->HW、wl->recovery_work);
    884}
    885}
    

    我想现在有两个问题:

    [1]写入原始 SDIO 时、为什么在 SDIO.c 的第160行失败。

    [2]以及如何从中恢复。 至于恢复部分、我没有将函数 wl1271_power_off ()连接到 WL_EN 引脚。 我们需要这样做吗? 恢复正常工作是否需要这样做? 我们当前创建了一个单独的内核模块 wlcore_SDIO_COND、该模块在开始时插入、以启用 WL_EN 引脚一次并保持高电平。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    好的、在转储中、我看到 SDIO 无访问错误、导致恢复。 崩溃本身可能与 SDIO 总线本身相关。
    但是,主要的问题是恢复不成功,因为它似乎没有正确完成 wl18xx 的完全复位。

    可尝试的丰富内容:
    1.一切正常时,您是否可以尝试将接口关闭然后重新启动:
    ifconfig wlan0 down
    ifconfig wlan0 up
    这将验证您的 WLAN_ENABLE GPIO 是否通过驱动程序配置为受控正常。

    2.您能不能尝试限制 SDIO 总线速度、比如20Mhz、看看它是否有用?
    要限制 SDIO 时钟速度、只需在.dts 文件中使用以下命令:
    elixir.bootlin.com/.../mmc.txt

    添加:
    最大频率=<20000000>;
    存储到您的板级器件树文件中的 MMC 节点。
    当然、您也可以尝试较低的值、而不是上面的20Mhz。

    最后、如果这没有帮助的话。 是否可以尝试禁用 ELP 并查看是否仍然看到崩溃?:
    processors.wiki.ti.com/.../WL18xx_Driver_Debug

    此致、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eyal、我连接了电源开关控制。 恢复部件现在可以正常工作。 关于最后一条消息中建议尝试的三件事:

    1.是的,现在可以正常恢复。 仅当我们没有设置 ifup/ifdown 时、我才使用"ip link set up dev wlan0"和"IP link set down dev wlan0"。

    不可以、由于主机硬件限制、我们无法将时钟更改为20MHz。 可以不尝试这种方法。

    3.是按建议禁用 ELP 会很有帮助。

    它可以通过流量路径上的微小干扰(几秒钟或长达一分钟的数据中断)从 ELP 转储中恢复。 鉴于您提出的所有非常有用的建议以及我们正在实现的结果、我们唯一需要进一步研究的是提高 SDIO 总线上的信号完整性、从而消除 RAW_WRITE 错误。 现在、我们平均每小时看到两个转储。

    感谢您的帮助!