设备固件
设备固件是包含代码的二进制blob文件,由设备硬件执行。二进制blob可在驱动命名空间中加载。
设备固件存储在 CIPD (Chrome Infrastructure Package Deployment)中,镜像在Google Storage中。
创建固件包
为了创建固件包,首先要创建一个目录包含以下文件:
- 一个或多个固件文件
- 一个license文件
- README.fuchsia
README.fuchsia必须包含至少以下指示符:
NameVersionUpstream GitLicenseLicense 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 中加载路径所指向的固件。
