[Sound-open-firmware] [PATCH] rimage: add unsigned firmware support
Xiuli Pan
xiuli.pan at linux.intel.com
Thu Feb 22 18:40:19 CET 2018
From: Pan Xiuli <xiuli.pan at linux.intel.com>
Add unsigned firmware support, that can directly use the FW or sign it
with other tools.
Signed-off-by: Pan Xiuli <xiuli.pan at linux.intel.com>
---
Test with:
Mininow max rt5651
SOF master: 019637ab250daa53c15da0a0a98c54f1c58d8ca3
SOF-Tool master: 33e4b0cc6f6a44e3e7ee849c04c515a5537242c7
https://github.com/plbossart/sound/tree/topic/sof-v4.14:
6fa721a8b7c6567eea0a2181bf9a3d2a12c31b00
---
rimage/manifest.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/rimage/manifest.c b/rimage/manifest.c
index a4780b7..2b7e07f 100644
--- a/rimage/manifest.c
+++ b/rimage/manifest.c
@@ -51,6 +51,21 @@ static int man_open_rom_file(struct image *image)
return 0;
}
+static int man_open_unsigned_file(struct image *image)
+{
+ sprintf(image->out_unsigned_file, "%s.uns", image->out_file);
+ unlink(image->out_unsigned_file);
+
+ /* open unsigned FW outfile for writing */
+ image->out_unsigned_fd = fopen(image->out_unsigned_file, "w");
+ if (image->out_unsigned_fd == NULL) {
+ fprintf(stderr, "error: unable to open %s for writing %d\n",
+ image->out_unsigned_file, errno);
+ }
+
+ return 0;
+}
+
static int man_open_manifest_file(struct image *image)
{
/* open manifest outfile for writing */
@@ -351,6 +366,39 @@ static int man_module_create(struct image *image, struct module *module,
return 0;
}
+static int man_write_unsigned_mod(struct image *image)
+{
+ int count;
+
+ /* write metadata file for unsigned FW */
+ count = fwrite(image->fw_image + MAN_META_EXT_OFFSET,
+ sizeof(struct sof_man_adsp_meta_file_ext), 1,
+ image->out_man_fd);
+
+ /* did the metadata/manifest write succeed ? */
+ if (count != 1) {
+ fprintf(stderr, "error: failed to write meta %s %d\n",
+ image->out_man_file, -errno);
+ return -errno;
+ }
+ fclose(image->out_man_fd);
+
+ /* now prepare the unsigned rimage */
+ count = fwrite(image->fw_image + MAN_FW_DESC_OFFSET,
+ image->image_end - MAN_FW_DESC_OFFSET,
+ 1, image->out_unsigned_fd);
+
+ /* did the unsigned FW write succeed ? */
+ if (count != 1) {
+ fprintf(stderr, "error: failed to write firmware %s %d\n",
+ image->out_unsigned_file, -errno);
+ return -errno;
+ }
+ fclose(image->out_unsigned_fd);
+
+ return 0;
+}
+
static int man_write_fw_mod(struct image *image)
{
int count;
@@ -400,6 +448,11 @@ static int man_write_fw(struct image *image)
if (ret < 0)
goto err;
+ /* open unsigned firmware */
+ ret = man_open_unsigned_file(image);
+ if (ret < 0)
+ goto err;
+
/* create the manifest */
ret = man_open_manifest_file(image);
if (ret < 0)
@@ -477,6 +530,11 @@ static int man_write_fw(struct image *image)
if (ret < 0)
goto err;
+ /* write the unsigned files*/
+ ret = man_write_unsigned_mod(image);
+ if (ret < 0)
+ goto err;
+
fprintf(stdout, "Firmware manifest and signing completed !\n");
return 0;
--
2.7.4
More information about the Sound-open-firmware
mailing list