设备固件

设备固件是包含代码的二进制blob文件,由设备硬件执行。二进制blob可在驱动命名空间中加载。

设备固件存储在 CIPD (Chrome Infrastructure Package Deployment)中,镜像在Google Storage中。

创建固件包

为了创建固件包,首先要创建一个目录包含以下文件:

README.fuchsia必须包含至少以下指示符:

  • Name
  • Version
  • Upstream Git
  • License
  • License File

如果这是你第一次从主机系统中上传到 CIPD 中,使用以下指令授权 CIPD :

  1. fx cipd auth-login

使用以下命令在 CIPD 中对包进行上传和打标签:

  1. fx cipd create -in <package-directory> -install-mode copy \
  2. -name <package-name> \
  3. -tag git_repository:<source-git-repositry> \
  4. -tag git_revision:<source-git-revision>

package-name 格式为 fuchsia/firmware/<name>

<name> 是一个字符串来表明固件。它可以包含任意非空格字符。使用固件名称来识别驱动是很有帮助的。

经过这个步骤后,包被上传到 CIPD 中。在fuchsia/firmware路径下检查包 CIPD browser here

添加固件包到构建中

添加下述条目到prebuilt/zircon.ensure中:

  1. @Subdir firmware/<name>
  2. <package-name> git_revision:<source-git-revision>

<name>, <package-name><source-git-revision>匹配值传递给 cipd create 上。包将通过@Subdir被下载到特定路径 prebuilt 下 ,例如,prebuilt/firmware/<name>

接下来,使用以下命令更新prebuilt/zircon.versions

  1. scripts/download-prebuilt --resolve

上传改动到 Gerrit 并发送到 CQ 中。固件包将通过scripts/download-prebuilt和工具链与 QEMU 一起下载。

在驱动中使用固件包

添加下列语句到驱动 rules.mk中:

  1. MODULE_FIRMWARE := <name>/<path-to-binary-blob>

这将安装固件到 bootfs ,在路径/boot/lib/firmware/$(basename $(MODULE_FIRMWARE))下 。

load_firmware() 的API,在 driver.h中定义,并在 VMO 中加载路径所指向的固件。