Proper Release Versioning Goes a Long Way | Interrupt

Hardware versioning is a topic of its own. In short, I suggest that the hardware version be separate from the software version.

Hardware version is typically made up of a few things:

  1. product: several products could be built out of the same firmware code base, e.g. at Pebble every watch different builds of the same firmware
  2. board configuration: you might have slight differences in configuration. Another typical thing here is to encode the proto build (e.g. EVT, DVT, … etc…)
  3. revision: an incrementing integer is fine here.

You can then compile different firmwares for your different hardware versions, or you can have a firmware that detects and adapts to the hardware version it is installed on. Most likely, you’ll have a mix of both (a few different firmwares, each capable of running on a set of hardware versions).

So say we have 4 hardware versions:

  1. foo-evt-r1 → the EVT hw
  2. foo-dvt-r1 → the DVT hw
  3. foo-mp-r1 → the release / mass production hw
  4. foo-mp-r2 → a new revision of the MP hw

When you release your new firmware version (say version 3.2.1), you’ll generate the following binaries: foo-evt-r1-fw-v3.2.1.bin, foo-dvt-r1-fw-v3.2.1.bin, foo-mp-r1-fw-v3.2.1.bin, and foo-mp-r2-fw-v3.2.1.bin.

As you can see the hardware version and the firmware version are completely separate.

1 Like