基于debian的deb包适配ubuntu22时WIFI无法使用问题
平台信息
硬件:LCKFB TaiShanPi V10 (RK3566)
WiFi 模块:AP6212A (Broadcom BCM43430A1, SDIO 接口)
内核版本:6.1.141
参考正常系统:Debian Bookworm (同一硬件,WiFi 正常)
ubuntu22编译脚本来自:LaoGuaiGe/ubuntu22.04-rootfs: 适用于泰山派1-RK3566开发板的ubuntu22 文件系统镜像构建脚本
问题现象
烧录 Ubuntu 22.04 rootfs 后,ifconfig 无法看到 wlan0 接口,WiFi 完全不可用。
内核日志报错:
根因分析
对比 Debian 与 Ubuntu 的差异
| 项目 | Debian (正常) | Ubuntu (异常) |
|---|---|---|
| bcmdhd 驱动 | 内核内置 (built-in) | 通过 modules-load.d 作为模块加载 |
| 加载时机 | 内核启动时自动初始化 | systemd 早期阶段强制加载 |
| /lib/modules/bcmdhd.ko | 不存在(内置无需模块文件) | 存在但被过早加载 |
| wifibt-init.service | 正确时机加载驱动 | 模块路径不匹配导致跳过 |
问题链路
mk-ubuntu-rootfs.sh中linux-imagedeb 包安装后提供了bcmdhd.ko模块文件脚本创建了
/etc/modules-load.d/bcmdhd.conf,导致 systemd 在启动早期加载 bcmdhd 模块此时 WiFi 芯片(AP6212A)尚未通过
sdio_pwrseq完成上电,SDIO 总线超时(error -110)驱动初始化失败后直接放弃,不再重试
后续
wifibt-init.service尝试通过wifibt-util.sh module获取模块名wifibt_module()函数检查/lib/modules/bcmdhd.ko是否存在实际模块文件在
/system/lib/modules/bcmdhd.ko,路径不匹配返回空wifibt-init.sh的init_wifi()因模块名为空而跳过加载
修复方案
修改文件:mk-ubuntu-rootfs.sh
1. 阻止模块过早加载
说明:
注释掉 modules-load.d 配置,防止 systemd 在启动早期加载模块
添加 blacklist 防止 udev 等其他途径自动加载
blacklist 不影响
insmod直接加载(wifibt-init.sh 使用 insmod)
2. 创建模块符号链接
说明:
wifibt-util.sh的wifibt_module()检查/lib/modules/${module}是否存在wifibt-init.sh执行cd /lib/modules && insmod bcmdhd.ko符号链接确保两者都能找到模块文件
3. 取消注释 WiFi 固件复制(原脚本中被注释)
验证方法
烧录后通过串口或 ADB 执行:
# 确认模块未被自动加载
lsmod | grep bcmdhd
# 应该为空
# 确认符号链接存在
ls -la /lib/modules/bcmdhd.ko
# 应指向 /system/lib/modules/bcmdhd.ko
# 确认 wifibt-init.service 正常
systemctl status wifibt-init.service
# 确认 WiFi 接口存在
ifconfig wlan0
# 扫描 WiFi 热点
iwlist wlan0 scan
工作原理(正确流程)
其他相关修复
本次调试过程中还修复了以下问题:
| 问题 | 修复 |
|---|---|
| /oem, /userdata 挂载失败 | fstab 中 ext2 改为 ext4 |
| /boot 挂载失败 | FIT 方案下 boot 是 raw 分区,从 fstab 移除 |
| ADB 无法通信 | 从 Debian overlay 复制 usbdevice 脚本和 profile |
日期
2026-05-20


评论