• ubuntu14.04 AR5B22 无线网卡连不上 AP 问题解决


    前言

    最近在尝试理解 PCIe,手上正好有一个 J1900 小主机,和一张拥有 PCIe 通道的 AR5B22 无线网卡。
    AR5B22 使用的驱动是 ath9k,ubuntu 自带这个驱动。所以无线网卡插到 J1900 上直接可以使用。
    在这里插入图片描述

    $ lspci
    ...
    05:00.0 Network controller: Qualcomm Atheros AR9462 Wireless Network Adapter (rev 01)
    ...
    
    $ ifconfig wlan0
    wlan0     Link encap:以太网  硬件地址 48:d2:24:18:ff:47
              inet 地址:192.168.31.49  广播:192.168.31.255  掩码:255.255.255.0
              inet6 地址: fe80::4ad2:24ff:fe18:ff47/64 Scope:Link
              inet6 地址: 240e:3a1:1838:b050:4ad2:24ff:fe18:ff47/64 Scope:Global
              inet6 地址: 240e:3a1:1838:b050:5d2e:dc24:6af6:f841/64 Scope:Global
              inet6 地址: 240e:3a1:1838:b050::316/128 Scope:Global
              UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
              接收数据包:1786 错误:0 丢弃:0 过载:0 帧数:0
              发送数据包:405 错误:0 丢弃:0 过载:0 载波:0
              碰撞:0 发送队列长度:1000
              接收字节:396702 (396.7 KB)  发送字节:101966 (101.9 KB)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    由于要研究 PCIe 界面,免不了重新编译 WiFi 驱动,加一些 log,分析验证等。
    但是出问题了,当我卸载掉 ath9k 再重新安装后,WiFi 始终连不上 AP 了。dmesg 打印错误如下

    $ dmesg
    ...
    [34359.515584] wlan0: authenticate with 80:ea:07:c9:d6:4b
    [34359.529459] wlan0: send auth to 80:ea:07:c9:d6:4b (try 1/3)
    [34359.530900] wlan0: authenticated
    [34364.541217] wlan0: aborting authentication with 80:ea:07:c9:d6:4b by local choice (Reason: 3=DEAUTH_LEAVING)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    auth 之后就不再进行 association 了,显然 WiFi 出了问题。

    尝试

    怀疑是两次加载驱动,使网卡重复 load 了网卡固件,导致网卡异常。于是想 reset 一下网卡,但是 PCIe 接口并没有 reset 引脚。

    硬件 reset

    想到 PCIe 设备支持热拔插,遂拧掉固定无线网卡的螺丝,拔掉无线网卡再插上,结果,哦吼,设备重启了!尝试了三次发现均会重启,也不敢再试了,可别把设备烧了。难道我对热拔插有什么误解??

    软件 reset

    硬件 reset 不成,有没有软件 reset 的方法。经过一番搜索,找到了一个办法

    # echo 1 > /sys/class/pci_bus/0000\:05/device/reset
    
    • 1

    下发命令后发现并没有任何动作,软复位也宣告失败。

    rfkill

    又想到了 rfkill 命令

    $ rfkill list
    1: hci0: Bluetooth
            Soft blocked: no
            Hard blocked: no
    2: phy0: Wireless LAN
            Soft blocked: no
            Hard blocked: no
    
    $ rfkill block 2
    $ rfkill unblock 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    还是不行,重连时内核仍然打印

    wlan0: aborting authentication with 80:ea:07:c9:d6:4b by local choice (Reason: 3=DEAUTH_LEAVING)
    
    • 1

    连接不加密AP

    网上还搜到了一个办法,说是连不上 wpa 加密方式的 AP,能够连上不加密的 AP。于是又翻箱倒柜的找来了一台路由器,开启一个不加密的 AP(iphone 和 win10 制造的热点必须启用加密)。控制WiFi重连,依旧失败!😂😂

    解决

    最后,想到 WiFi 作为 station 去连接 AP 的功能是 wpa_supplicant 守护进程实现的,会不会是在卸载并安装驱动后,该进程异常了。那就先杀掉重启该进程试一下。
    kill 完刚想重启,发现 WiFi 已经开始重连了,应该是系统自动又启动了 wpa_supplicant 进程,ps 查看下过不其然,wpa_supplicant 已经启动了。也就在这时,突然发现,WiFi 连接成功了!
    原来是 wpa_supplicant 进程的问题。
    解决,撒花!🎉🎉🎉

  • 相关阅读:
    2023-9-16 最长上升子序列(二)
    【STK】手把手教你利用STK进行仿真-STK软件简介03 STK扩展接口
    esp32经典蓝牙和单片机连接,,,手机蓝牙作为主机
    NLP领域可以投稿的期刊或会议(不断更新中……)
    node工程中package.json文件作用是什么?里面的^尖括号和~波浪号是什么意思?
    python 异常机制
    解决 pip 安装第三方包时因 SSL 报错
    mysql root允许远程连接
    如何批量查询搜狗收录?提升搜狗收录8个方法介绍
    关于SQL优化的21个小方法,你get了吗?
  • 原文地址:https://blog.csdn.net/lyndon_li/article/details/125617395