- Prev
- AppStream
- Next

## ⁠2.6. Firmware

### ⁠2.6.1. Introduction

Device firmware can be accompanied by AppStream upstream metadata, to be incorporated by a distribution. Tools like fwupd make use of this metadata to automatically update firmware of devices found in the machine.
Firmware can ship one or more files in `/usr/share/appdata/%{id}.metainfo.xml`.

### ⁠2.6.2. Example file

A firmware meta-info file should look like this:

    ​
    ​<?xml version="1.0" encoding="UTF-8"?>
    ​<!-- Copyright 2015 Richard Hughes <richard@hughsie.com> -->
    ​<component type="firmware">
    ​  <id>84f40464-9272-4ef7-9399-cd95f12da696</id>
    ​  <name>ColorHugALS Firmware</name>
    ​  <summary>Firmware for the ColorHugALS Ambient Light Sensor</summary>
    ​  <description>
    ​    <p>
    ​      Updating the firmware on your ColorHugALS device improves performance and
    ​      adds new features.
    ​    </p>
    ​  </description>
    ​  <url type="homepage">http://www.hughski.com/</url>
    ​  <metadata_license>CC0-1.0</metadata_license>
    ​  <project_license>GPL-2.0+</project_license>
    ​  <developer_name>Hughski Limited</developer_name>
    ​  <releases>
    ​    <release version="3.0.2" timestamp="1424116753">
    ​      <location>http://www.hughski.com/downloads/colorhug-als/firmware/colorhug-als-3.0.2.cab</location>
    ​      <description>
    ​        <p>This stable release fixes the following bugs:</p>
    ​        <ul>
    ​          <li>Fix the return code from GetHardwareVersion</li>
    ​          <li>Scale the output of TakeReadingRaw by the datasheet values</li>
    ​        </ul>
    ​      </description>
    ​    </release>
    ​  </releases>
    ​</component>

You can find additional information on how to create a complete firmware package upstream in the README document of fwupd.

### ⁠2.6.3. File specification

Note that the XML root must have the `type` property set to `firmware`. This clearly identified this metainfo document as describing firmware.

<id/>
  For firmware, the value of the `<id/>` tag must be the GUID of the device the firmware is written for.
⁠<releases/>
  This tag is almost identical to the generic <releases/> tag. Additional to the generic tag, for each `<release/>` child a `<location/>` tag is allowed.
  ⁠ The `<location/>` tag specifies a remote location where the firmware `.cab` can be downloaded from. The download location needs to be accessibly via `HTTP`, `HTTPS` or `FTP`.
  Example:

      ​<releases>
      ​  <release version="3.0.2" timestamp="1424116753">
      ​    <location>http://www.hughski.com/downloads/colorhug-als/firmware/colorhug-als-3.0.2.cab</location>
      ​    <description>
      ​      <p>This stable release fixes bugs.</p>
      ​    </description>
      ​  </release>
      ​</releases>

  The `<location/>` tag is currently only allowed to be specified once.

For a component of type `firmware`, the following tags are required and must be present for a valid document: <id/>, <name/>, <summary/>, <metadata_license/>.

- Prev2.5. Input Methods
- Up
- Home
- NextChapter 3. Distribution Metadata and Services