admin 管理员组

文章数量: 1184232

1.背景

hx2@Ubantu:~/桌面/shell$ sh wifi-hard.sh 
-e === Wi-Fi 硬件检测 ===
-e 
[1] 检测 Wi-Fi 硬件...
-e ✓ 检测到 PCIe Wi-Fi 设备:
06:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter [14e4:4727] (rev 01)
	Subsystem: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter [14e4:051b]
-e 
[2] 检查驱动状态...
-e ✓ 已加载驱动: bcma-pci-bridge
-e 驱动信息:
modinfo: ERROR: Module bcma-pci-bridge not found.
-e 
[3] 检查内核日志...
-e ✗ 发现内核错误:
[    4.269655] EXT4-fs (sdb6): re-mounted. Opts: errors=remount-ro
[    5.276410] ACPI: \_SB_.PCI0.GFX0: failed to evaluate _DSM
[    5.369686] b43: probe of bcma0:1 failed with error -524
[    5.476008] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS
[    6.019850] brcmsmac bcma0:1 wlp6s0b1: renamed from wlan0
-e 
[4] 检查固件文件...
-e ⚠ 未明确检测到固件加载记录。
-e 
=== 检测结果 ===
-e ⚠ Wi-Fi 硬件存在问题,请检查驱动或固件。
hx2@Ubantu:~/桌面/shell$      分析什么问题

2.分析问题

根据你的脚本输出,Wi-Fi 硬件(Broadcom BCM4313)已被识别,但存在 驱动加载失败固件缺失 问题。以下是详细分析和解决方案:


问题诊断

1. 驱动加载错误
  • 检测到的驱动bcma-pci-bridge(这是 PCI 桥接驱动,并非 Wi-Fi 驱动)。

  • 内核错误

    plaintext

  • b43: probe of bcma0:1 failed with error -524

    表明系统尝试加载 b43 驱动但失败(错误码 -524 通常与固件缺失或兼容性有关)。

2. 固件未加载
  • 脚本未检测到固件加载记录,说明系统缺少 Broadcom 所需的固件文件。

3. 实际生效的驱动
  • 日志末尾显示 brcmsmac 驱动已绑定网卡(wlp6s0b1),但可能因固件问题无法正常工作。


解决方案

步骤 1:安装正确的驱动和固件

Broadcom BCM4313 需要 b43brcmsmac 驱动,但需手动安装固件:

bash

# 安装固件和驱动
sudo apt update
sudo apt install firmware-b43-installer

# 如果上述无效,尝试替代方案
sudo apt install firmware-b43legacy-installer  # 旧版固件
步骤 2:卸载冲突驱动

bash

# 禁用可能导致冲突的驱动
sudo modprobe -r b43 brcmsmac bcma
sudo modprobe brcmsmac  # 重新加载驱动
步骤 3:检查驱动加载状态

bash

# 确认驱动是否正确加载
dmesg | grep -i "brcmsmac\|b43"
lsmod | grep -i "brcmsmac\|b43"
步骤 4:禁用 Secure Boot(如有必要)

某些 Broadcom 驱动需关闭 Secure Boot:

bash

sudo mokutil --disable-validation

验证修复

  1. 重启后运行脚本,检查错误是否消失:

    bash

  • sudo ./wifi-hard.sh
  • 测试 Wi-Fi 功能:

    bash

  1. nmcli device wifi list

常见问题

  • 如果 firmware-b43-installer 无效
    Broadcom BCM4313 可能需要 wl 驱动(需从官方仓库安装):

    bash

  • sudo apt install broadcom-sta-dkms
    sudo modprobe wl
  • 仍无法工作
    尝试在 grub 中禁用 bcma 模块:

    bash

  • # 编辑 /etc/default/grub,添加:
    GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=bcma"
    sudo update-grub

总结

你的 Broadcom BCM4313 网卡因 固件缺失驱动冲突 导致故障。
关键操作

  1. 安装 firmware-b43-installer

  2. 确保 brcmsmac 驱动正确加载。

  3. 关闭 Secure Boot(如需)。

修复后若仍有问题,请提供 dmesg | grep -i "brcmsmac\|b43" 的完整输出进一步分析。

3.附录代码shell

#!/bin/bash

# 定义颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${YELLOW}=== Wi-Fi 硬件检测 ===${NC}"

# 1. 检查 Wi-Fi 硬件是否存在(PCIe 或 USB)
echo -e "\n${YELLOW}[1] 检测 Wi-Fi 硬件...${NC}"
WIFI_PCI=$(lspci -knn 2>/dev/null | grep -i "network\|wifi\|wireless")
WIFI_USB=$(lsusb 2>/dev/null | grep -i "network\|wifi\|wireless")

if [ -n "$WIFI_PCI" ]; then
    echo -e "${GREEN}✓ 检测到 PCIe Wi-Fi 设备:${NC}"
    echo "$WIFI_PCI"
elif [ -n "$WIFI_USB" ]; then
    echo -e "${GREEN}✓ 检测到 USB Wi-Fi 设备:${NC}"
    echo "$WIFI_USB"
else
    echo -e "${RED}✗ 未检测到 Wi-Fi 硬件!可能原因:${NC}"
    echo "   - 硬件未连接或损坏"
    echo "   - BIOS 中禁用了 Wi-Fi"
    echo "   - 设备未被内核识别"
    exit 1
fi

# 2. 检查 Wi-Fi 驱动是否加载
echo -e "\n${YELLOW}[2] 检查驱动状态...${NC}"
DRIVER=$(lspci -knn 2>/dev/null | grep -iA3 "network\|wifi\|wireless" | grep "Kernel driver" | awk '{print $NF}')

if [ -z "$DRIVER" ]; then
    echo -e "${RED}✗ 未加载 Wi-Fi 驱动!${NC}"
    echo -e "${YELLOW}尝试列出可用模块...${NC}"
    lsmod | grep -i "wifi\|wireless\|iwlwifi\|ath\|rtl"
else
    echo -e "${GREEN}✓ 已加载驱动:${NC} $DRIVER"
    echo -e "驱动信息:"
    modinfo "$DRIVER" | grep -E "description|version|firmware"
fi

# 3. 检查内核日志中的错误
echo -e "\n${YELLOW}[3] 检查内核日志...${NC}"
ERROR_LOG=$(dmesg 2>/dev/null | grep -i "wifi\|wlan\|firmware\|failed\|error" | tail -n 5)

if [ -n "$ERROR_LOG" ]; then
    echo -e "${RED}✗ 发现内核错误:${NC}"
    echo "$ERROR_LOG"
else
    echo -e "${GREEN}✓ 内核日志未发现 Wi-Fi 相关错误。${NC}"
fi

# 4. 检查固件是否加载
echo -e "\n${YELLOW}[4] 检查固件文件...${NC}"
FIRMWARE=$(dmesg 2>/dev/null | grep -i "firmware\|loaded" | grep -i "wifi\|wlan")

if [ -n "$FIRMWARE" ]; then
    echo -e "${GREEN}✓ 固件已加载:${NC}"
    echo "$FIRMWARE" | tail -n 2
else
    echo -e "${YELLOW}⚠ 未明确检测到固件加载记录。${NC}"
fi

# 5. 最终状态汇总
echo -e "\n${YELLOW}=== 检测结果 ===${NC}"
if [ -n "$WIFI_PCI" ] || [ -n "$WIFI_USB" ]; then
    if [ -n "$DRIVER" ] && [ -z "$ERROR_LOG" ]; then
        echo -e "${GREEN}✅ Wi-Fi 硬件状态正常!${NC}"
    else
        echo -e "${YELLOW}⚠ Wi-Fi 硬件存在问题,请检查驱动或固件。${NC}"
    fi
else
    echo -e "${RED}❌ Wi-Fi 硬件未识别!${NC}"
fi

本文标签: 模块 硬件 日记 Ubantu WiFi