前言
前段时间移植 wifi 驱动到 android 的内核上,发现 firmware 的加载始终出错,问了几个人,都不是很了解,没办法,只好自己研究一下。
原理分析
从本质上来说, firmware 需要做的事情包括两件:
1, 通知用户态程序,我需要下载 firmware 了;
2, 用户态程序把用户态的数据 copy 到内核层;
3, 内核把内核态的数据写到设备上,比如 wifi 模块里;
其中第三步应该不难,关键是看看, linux 里面是如何实现第一、二步的;
实现机制
简单的说,它的机制分成以下几部分:
1, 通过一定的方式,通知用户态程序,比如 init 程序,如图所示: