fuchsia固件开发

    xiaoxiao2023-10-02  158

    #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中路径指向的固件。

    最新回复(0)