fuchsia固件开发


#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 -install-mode copy \
    -name \
    -tag git_repository: \
    -tag git_revision:
```

`package-name`的格式为`fuchsia/firmware/`。

``应该是一个标识固件的字符串。它可能包含任何非空白字符。识别将要以名字方式使用固件的驱动程序是有帮助的。

完成此步骤后,程序包将上载到CIPD。检查
[CIPD browser here](https://chrome-infra-packages.appspot.com/#/?path=fuchsia/firmware)
对于'fuchsia/firmware`下的包。

##将固件包添加到构建中

在`prebuilt/zircon.ensure`中添加以下条目:

```
@Subdir firmware/
git_revision:
```

其中``,``和``匹配传递给上面的`cipd create`的值。该软件包将被下载到`@Subdir`在`prebuilt`下指定的路径,即
`prebuilt/firmware/`。

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

```
scripts/download-prebuilt --resolve
```

将此更改上传到Gerrit并将其发送到CQ。固件包将可以通过`scripts/download-prebuilt`以及工具链和QEMU下载。

##使用驱动程序中的固件包

将以下行添加到驱动程序的`rules.mk`中:

```
MODULE_FIRMWARE := /
```

这会将固件安装到bootfs下
`/boot/lib/firmware/$(basename $(MODULE_FIRMWARE))`.

`load_firmware()`API,在[`driver.h`](../../system/ulib/ddk/include/ddk/driver.h)加载VMO中路径指向的固件。

你可能感兴趣的:(fuchsia)