设备固件
设备固件是包含代码的二进制blob文件,由设备硬件执行。二进制blob可在驱动命名空间中加载。
设备固件存储在 CIPD (Chrome Infrastructure Package Deployment)中,镜像在Google Storage中。
创建固件包
为了创建固件包,首先要创建一个目录包含以下文件:
- 一个或多个固件文件
- 一个license文件
- README.fuchsia
README.fuchsia必须包含至少以下指示符:
Name
Version
Upstream Git
License
License File
如果这是你第一次从主机系统中上传到 CIPD 中,使用以下指令授权 CIPD :
fx cipd auth-login
使用以下命令在 CIPD 中对包进行上传和打标签:
fx cipd create -in <package-directory> -install-mode copy \
-name <package-name> \
-tag git_repository:<source-git-repositry> \
-tag git_revision:<source-git-revision>
package-name
格式为 fuchsia/firmware/<name>
。
<name>
是一个字符串来表明固件。它可以包含任意非空格字符。使用固件名称来识别驱动是很有帮助的。
经过这个步骤后,包被上传到 CIPD 中。在fuchsia/firmware
路径下检查包 CIPD browser here。
添加固件包到构建中
添加下述条目到prebuilt/zircon.ensure
中:
@Subdir firmware/<name>
<package-name> git_revision:<source-git-revision>
<name>
, <package-name>
和<source-git-revision>
匹配值传递给 cipd create
上。包将通过@Subdir
被下载到特定路径 prebuilt
下 ,例如,prebuilt/firmware/<name>
。
接下来,使用以下命令更新prebuilt/zircon.versions
。
scripts/download-prebuilt --resolve
上传改动到 Gerrit 并发送到 CQ 中。固件包将通过scripts/download-prebuilt
和工具链与 QEMU 一起下载。
在驱动中使用固件包
添加下列语句到驱动 rules.mk
中:
MODULE_FIRMWARE := <name>/<path-to-binary-blob>
这将安装固件到 bootfs ,在路径/boot/lib/firmware/$(basename $(MODULE_FIRMWARE))
下 。
load_firmware()
的API,在 driver.h
中定义,并在 VMO 中加载路径所指向的固件。