固件下载、初始化与错误恢复
1. 阶段
1 | transport probe |
不同驱动可能在 setup、configure或独立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 | btmgmt info |
日志中的requested filename和revision比模块商品名更可靠。
正在加载留言…