固件下载、初始化与错误恢复

固件下载、初始化与错误恢复

1. 阶段

1
2
3
4
5
6
7
8
transport probe
-> HCI open
-> identify boot ROM/version
-> request_firmware
-> download patch/config
-> controller reset/boot
-> read capabilities
-> mark HCI up

不同驱动可能在 setupconfigure或独立loader device完成。

2. Firmware API

request_firmware()/lib/firmware或配置的loader路径取blob。错误需区分:

  • -ENOENT文件缺失;
    -格式/版本不匹配;
    -传输timeout;
    -controller拒绝fragment;
    -下载后未boot;
    -USB重新枚举。

3. 命令同步

Helper常用同步HCI command等待Command Complete/Status或vendor event。不能从持有会被RX completion获取的锁时等待。

4. UART下载

固件可能要求初始baud、下载baud和operational baud。Host/controller切速边界需严格同步。

5. USB loader

ATH3K等可能先以firmware loader PID出现,下载后disconnect并以普通HCI PID重新枚举。这不是异常掉线。

6. Recovery

恢复层级:

1.清queue/parser;
2.HCI Reset;
3.transport close/open;
4.vendor reset;
5.GPIO/USB function power cycle;
6.combo shared power cycle。

最后一级可能同时重置Wi-Fi,应由平台层协调。

7. Coredump

Intel/Marvell等支持devcoredump/vendor dump。Dump可能包含地址、连接元数据和firmware状态,访问需受控。

8. 固件安全

并非所有controller都验证签名。量产应:

-固件来自受控只读镜像;
-校验包版本/hash;
-限制更新接口;
-跟踪芯片revision;
-不要把未知vendor blob作为普通可写配置;
-升级保留回滚方案。

9. 版本诊断

1
2
3
btmgmt info
hciconfig -a
dmesg | grep -Ei 'Bluetooth|firmware|patch|ROM|version'

日志中的requested filename和revision比模块商品名更可靠。

文章互动

阅读 --

留言

0 条留言

正在加载留言…