#Device Firmware
设备固件是二进制blob,包含由硬件设备执行的代码。二进制blob在驱动程序的命名空间中可用于加载。
设备固件存储在CIPD中(Chrome Infrastructure Package Deployment)并在Google Storage中镜像备份。
## 在你开始之前
确保CIPD可用。 cipd必须在PATH中或`zircon/../buildtools/cipd`之一。
buildtools存储库可用 [这里](https://fuchsia.googlesource.com/buildtools/)。
##创建固件包
要创建固件包,请创建包含以下内容的目录 文件:
*一个或多个固件文件 *许可证文件 * [README.fuchsia](https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/source_code/README.fuchsia.md)
README.fuchsia必须至少包含以下指令:
*`姓名` *`版本` *`上游Git` *`许可证` *`许可文件`
如果这是您第一次从主机系统上传到CIPD, 使用CIPD进行身份验证:
``` cipd auth-login ```
使用以下命令在CIPD中上载并标记包:
``` 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。检查 [CIPD browser here](https://chrome-infra-packages.appspot.com/#/?path=fuchsia/firmware) 对于'fuchsia/firmware`下的包。
##将固件包添加到构建中
在`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`](../../system/ulib/ddk/include/ddk/driver.h)加载VMO中路径指向的固件。