Files
openipc-builder/.github/firmware-drift.json
T
OpenIPC AI teamandGitHub 6fef62c0f3 ci: watch for drift from firmware instead of finding it by accident (#129)
* ci: watch for drift from firmware instead of finding it by accident

builder.sh copies devices/<item>/* over a fresh firmware clone, so a device
directory that ships its own copy of a firmware file replaces it outright. A
fleet-wide change in firmware reaches every device that only references a path
and none that ships its own copy, silently, because nothing in either repository
is looking. One comment on OpenIPC/firmware#2308 turned up three instances of
that in an afternoon: 13 board configs that missed the CONFIG_VT sweep (#126),
97 defconfigs that kept BR2_PACKAGE_JSONFILTER after firmware retired it and put
three devices over their rootfs cap (#128), and excludes lists naming files that
no longer exist (firmware#2313 reports those at build time).

The trigger is the design. Every one of those was caused by a commit in
firmware while this repository sat untouched, so a pull_request check would
never have fired for any of them -- nobody opens a builder PR when firmware
changes. firmware-drift.yml runs on a schedule and files an issue rather than
failing: drift someone else introduced is not a reason to redden a nightly that
is otherwise fine. Only the self-test gates a merge here, out of lint.yml.

Two checks, because the two kinds of drift are not the same shape.

Shadowed files: comparing content is useless, a builder copy is *supposed* to
differ. What matters is whether firmware's version moved since a human last
reconciled them, so each of the 13 entries pins the blob it was reconciled
against. Re-pinning is the act of looking again. The mapping is hand-authored --
nothing can infer that gk7205v200.generic-fpv derives from gk7205v200.generic.

Defconfig symbols: nothing here copies a firmware defconfig, so pinning does not
apply. Every BR2_PACKAGE_*=y is resolved against buildroot, firmware and this
tree and sorted into "resolves nowhere" (a dead line kconfig ignores) and
"resolves, but no firmware defconfig selects it" (needs an allowlist entry). An
allowlist entry can also fence a symbol to the devices that need it; without
that, writing JSONFILTER down as builder-only for devices/apfpv would equally
bless it creeping back onto 95 unrelated defconfigs, which is #128 verbatim.

Replayed against the three regressions, each reproduced by hand on a clean tree:

    firmware moves a shadowed config
      -> br-ext-chip-goke/board/gk7205v200/gk7205v200.generic.config moved in
         firmware since this copy was reconciled (2026-08-25).
         builder copy: devices/common/.../gk7205v200.generic-fpv.config
         pinned 7450c6803f6d, firmware now f97dce84c0f8
         firmware commits since:
           85233f0e kernel: drop CONFIG_VT and the busybox applets ... (#2308)

    jsonfilter creeps back onto a non-apfpv device
      -> BR2_PACKAGE_JSONFILTER is allowlisted only for apfpv/*/configs/*_defconfig,
         but 1 other defconfig(s) select it.

    firmware retires a symbol builder still selects
      -> BR2_PACKAGE_LIBUBOX is selected here but by no firmware defconfig.

Resolving against buildroot is not optional and getting it wrong is how a
checker lies. Buildroot is vendored by neither repository, so a first pass over
OpenIPC packages alone called HOSTAPD, IW, PHP, UHTTPD, LIBZIP and BWM_NG dead;
all six are upstream. Matching only "Config.in" then called PHP_EXT_ZIP dead,
because buildroot declares php's extensions in package/php/Config.ext. Without
--buildroot that half is skipped and says so rather than inventing findings.

Two symbols really do resolve nowhere today -- BR2_PACKAGE_APFPV_GREG on the
four greg-generic devices and BR2_PACKAGE_WIFIBROADCAST_EXT in devices/common.
Both are recorded as known-dead and reported as a notice on every run rather
than removed: whether those devices still want the packages is a maintainer's
call, not a side effect of adding a check.

The three new paths are classified in ci-matrix.py so this PR and every future
re-pin cost no device builds. Without that a blob update is a 107-device run.

* ci: discover shadowed files instead of listing them by hand

Qodo caught the shadow list omitting the device-local t21 and t31 kernel configs.
It was right, and the hole was much bigger than the five it named: a hand-written
list of 13 board configs against 93 same-path shadows covering 35 firmware paths.
The missing ones are not incidental -- load_goke, load_hisilicon, load_sigmastar
and four vendor .mk files are all shadowed by some device, and those are exactly
the shared files a fleet-wide fix lands in. firmware regression-tests
load_hisilicon's os_mem_size derivation; two devices here ship their own copy of
that script and would not have seen the fix.

Listing them by hand was the wrong shape. builder.sh copies devices/<item>/*
over the firmware clone, so any file at a path firmware also has replaces it --
which makes same-path shadows discoverable rather than something to remember.
discover_shadows() walks devices/ and reports anything sitting on a firmware
path with no entry in firmware-drift.json, so the list cannot silently rot and a
device added tomorrow cannot quietly introduce an unreconciled shadow.

The manifest goes from 13 entries to 101: the 88 discovered ones, plus the 13
hand-authored entries that discovery cannot find because the name differs from
the file they replace -- gk7205v200.generic-fpv shadows gk7205v200.generic, and
nothing can infer that.

Two self-test cases for the new path: a same-path shadow with no entry is
reported, and an entry silences it. Verified against the tree by dropping the
load_hisilicon entries, which surfaces both devices immediately.
2026-08-26 01:27:10 +03:00

768 lines
37 KiB
JSON

{
"_comment": [
"Records what has been reconciled against OpenIPC/firmware, so that a fleet-wide",
"change there cannot move under this repository unnoticed. See",
".github/scripts/check-firmware-drift.py for why this exists and what each key means.",
"A pinned blob means a human looked at firmware's version of that file and was",
"satisfied; re-pinning it is the act of looking again."
],
"shadows": [
{
"builder": "devices/apfpv/general/overlay/etc/init.d/S40network",
"firmware": "general/overlay/etc/init.d/S40network",
"blob": "b8fd109321b556bbfdc9f1671b376992897fb9f1",
"reconciled": "2026-08-25",
"note": "shared network init"
},
{
"builder": "devices/apfpv/general/overlay/etc/network/interfaces.d/wlan0",
"firmware": "general/overlay/etc/network/interfaces.d/wlan0",
"blob": "7bce98b97a24f2e45d09ad654328eab3b6ea2125",
"reconciled": "2026-08-25",
"note": "shared interface definition"
},
{
"builder": "devices/common/br-ext-chip-goke/board/gk7205v200/gk7205v200.generic-fpv.config",
"firmware": "br-ext-chip-goke/board/gk7205v200/gk7205v200.generic.config",
"blob": "f97dce84c0f85d1a08a45bb7a173448d4a060e75",
"reconciled": "2026-08-25",
"note": "fpv/lte/venc variant of the generic config; backs 5 gk7205v200/v210 builds"
},
{
"builder": "devices/common/br-ext-chip-goke/board/gk7205v200/gk7205v300.generic-fpv.config",
"firmware": "br-ext-chip-goke/board/gk7205v200/gk7205v300.generic.config",
"blob": "1f36f13f42ed1b1616608e330c63719ae00a1e0a",
"reconciled": "2026-08-25",
"note": "fpv/lte/venc variant; backs 3 gk7205v300 builds"
},
{
"builder": "devices/common/br-ext-chip-hisilicon/board/hi3516ev200/hi3516ev200.generic-fpv.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516ev200/hi3516ev200.generic.config",
"blob": "bccb6da3b61ea9ee15a08c676b41b820ddfc96f4",
"reconciled": "2026-08-25",
"note": "fpv/lte variant"
},
{
"builder": "devices/common/br-ext-chip-hisilicon/board/hi3516ev200/hi3516ev300.generic-fpv.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516ev200/hi3516ev300.generic.config",
"blob": "dbf2a1630e2a81f30568a3a798cc777a5b7191f1",
"reconciled": "2026-08-25",
"note": "fpv/lte variant"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/br-ext-chip-goke/board/gk710x/gk7102c.generic.config",
"firmware": "br-ext-chip-goke/board/gk710x/gk710x.generic.config",
"blob": "ad93ad88301ebadeb5f9e3ea96a9d6439610272b",
"reconciled": "2026-08-25",
"note": "gk7102c variant of gk710x; keeps CONFIG_INPUT for its evdev consumer"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/audio.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/audio.ko",
"blob": "d7fd53da67d5bc3bcb12dd331a3b06b803bb94bc",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/hal.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/hal.ko",
"blob": "d8233486df56140502d018abc0fc233685a4edb1",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/hw_crypto.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/hw_crypto.ko",
"blob": "eb4c04f4ba4e503e4f5ab8ba4b7f08949f54cd31",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/i2s.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/i2s.ko",
"blob": "c2f1f8b313a4e93a26b9e1c235e60d082456d8d3",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/media.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/media.ko",
"blob": "3cec20d363cf0dde9761466c33b2ca1b6832b494",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/kmod/sensor.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/sensor.ko",
"blob": "77076209e044c7f08d569fae4d5a9cda026319bf",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/lib/libadi.so",
"firmware": "general/package/goke-osdrv-gk710x/files/lib/libadi.so",
"blob": "1455b648bd6b517b8615274eacdf0a2401d014b8",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/lib/libimage.so",
"firmware": "general/package/goke-osdrv-gk710x/files/lib/libimage.so",
"blob": "2d35911581d0bf18910e4117b9d468cc88b9b7ec",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/script/load_goke",
"firmware": "general/package/goke-osdrv-gk710x/files/script/load_goke",
"blob": "b4ae2a74154a7df0a224b4886b6fd2852e87dac9",
"reconciled": "2026-08-25",
"note": "vendor driver loader; fleet-wide fixes here land in firmware"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/sensor/config/mis2003.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/config/mis2003.bin",
"blob": "1c8449d8b1fc2d961ce3b8aab17143375db53df6",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/sensor/config/mis2003_hw.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/config/mis2003_hw.bin",
"blob": "ebcad21990816d4574b01dcd16eea5df5cfa8237",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710x.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710x.bin",
"blob": "1f3d647655e1147d1d1a314d8160233bb2f31f39",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710xs.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710xs.bin",
"blob": "002e71c69b9e562af3c0e98a1e8fec3ee373d91d",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_umea-qc01x/general/package/goke-osdrv-gk710x/goke-osdrv-gk710x.mk",
"firmware": "general/package/goke-osdrv-gk710x/goke-osdrv-gk710x.mk",
"blob": "d2d056f649b2fc9005d645a56691783375585729",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/br-ext-chip-goke/board/gk710x/gk7102c.generic.config",
"firmware": "br-ext-chip-goke/board/gk710x/gk710x.generic.config",
"blob": "ad93ad88301ebadeb5f9e3ea96a9d6439610272b",
"reconciled": "2026-08-25",
"note": "gk7102c variant of gk710x"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/audio.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/audio.ko",
"blob": "d7fd53da67d5bc3bcb12dd331a3b06b803bb94bc",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/hal.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/hal.ko",
"blob": "d8233486df56140502d018abc0fc233685a4edb1",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/hw_crypto.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/hw_crypto.ko",
"blob": "eb4c04f4ba4e503e4f5ab8ba4b7f08949f54cd31",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/i2s.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/i2s.ko",
"blob": "c2f1f8b313a4e93a26b9e1c235e60d082456d8d3",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/media.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/media.ko",
"blob": "3cec20d363cf0dde9761466c33b2ca1b6832b494",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/kmod/sensor.ko",
"firmware": "general/package/goke-osdrv-gk710x/files/kmod/sensor.ko",
"blob": "77076209e044c7f08d569fae4d5a9cda026319bf",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/lib/libadi.so",
"firmware": "general/package/goke-osdrv-gk710x/files/lib/libadi.so",
"blob": "1455b648bd6b517b8615274eacdf0a2401d014b8",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/lib/libimage.so",
"firmware": "general/package/goke-osdrv-gk710x/files/lib/libimage.so",
"blob": "2d35911581d0bf18910e4117b9d468cc88b9b7ec",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/script/load_goke",
"firmware": "general/package/goke-osdrv-gk710x/files/script/load_goke",
"blob": "b4ae2a74154a7df0a224b4886b6fd2852e87dac9",
"reconciled": "2026-08-25",
"note": "vendor driver loader; fleet-wide fixes here land in firmware"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710x.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710x.bin",
"blob": "1f3d647655e1147d1d1a314d8160233bb2f31f39",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710xs.bin",
"firmware": "general/package/goke-osdrv-gk710x/files/sensor/fw/gk_fw_710xs.bin",
"blob": "002e71c69b9e562af3c0e98a1e8fec3ee373d91d",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7102ca_lite_vstarcam-g8896wip/general/package/goke-osdrv-gk710x/goke-osdrv-gk710x.mk",
"firmware": "general/package/goke-osdrv-gk710x/goke-osdrv-gk710x.mk",
"blob": "d2d056f649b2fc9005d645a56691783375585729",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7202v300_lite_cootli_camv0103/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/gk7202v300_lite_ipg-g3-wr/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/gk7202v300_lite_xg521/br-ext-chip-goke/board/gk7205v200/gk7202v300.generic.config",
"firmware": "br-ext-chip-goke/board/gk7205v200/gk7202v300.generic.config",
"blob": "a6b1534abde2aed025d61a1693bf9265176141df",
"reconciled": "2026-08-25",
"note": "device-local copy"
},
{
"builder": "devices/gk7202v300_lite_xg521/general/overlay/etc/wireless/modem",
"firmware": "general/overlay/etc/wireless/modem",
"blob": "075faaf5b960cd02ca8e336d92bf95f18bedb7be",
"reconciled": "2026-08-25",
"note": "shared modem table"
},
{
"builder": "devices/gk7202v300_lite_xg521/general/package/goke-osdrv-gk7205v200/goke-osdrv-gk7205v200.mk",
"firmware": "general/package/goke-osdrv-gk7205v200/goke-osdrv-gk7205v200.mk",
"blob": "7238dd51068dadfc07c6156074dd39fe02cc842e",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/gk7205v200_otg_generic/br-ext-chip-goke/board/gk7205v200/gk7205v200.generic-otg.config",
"firmware": "br-ext-chip-goke/board/gk7205v200/gk7205v200.generic.config",
"blob": "f97dce84c0f85d1a08a45bb7a173448d4a060e75",
"reconciled": "2026-08-25",
"note": "otg variant"
},
{
"builder": "devices/gk7205v200_rubyfpv_generic/br-ext-chip-goke/board/gk7205v200/gk7205v200.generic-fpv.config",
"firmware": "br-ext-chip-goke/board/gk7205v200/gk7205v200.generic.config",
"blob": "f97dce84c0f85d1a08a45bb7a173448d4a060e75",
"reconciled": "2026-08-25",
"note": "rubyfpv variant"
},
{
"builder": "devices/hi3516cv200_lite_trassir-tr-d4121ir1-v2/br-ext-chip-hisilicon/board/hi3516cv200/hi3516cv200.generic.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516cv200/hi3516cv200.generic.config",
"blob": "68f8da5fb686dd93a405b0e2d8410db009b301f8",
"reconciled": "2026-08-25",
"note": "device-local copy"
},
{
"builder": "devices/hi3516ev300_ultimate_rostelecom-ipc8232swc-we/general/package/hisilicon-osdrv-hi3516ev200/files/script/load_hisilicon",
"firmware": "general/package/hisilicon-osdrv-hi3516ev200/files/script/load_hisilicon",
"blob": "18f88b4f8fba3a3fdc317c0af293280b1ddf6754",
"reconciled": "2026-08-25",
"note": "vendor driver loader; carries the os_mem_size fix firmware regression-tests"
},
{
"builder": "devices/hi3516ev300_ultimate_rvi-1ncmw2028/general/package/hisilicon-osdrv-hi3516ev200/files/script/load_hisilicon",
"firmware": "general/package/hisilicon-osdrv-hi3516ev200/files/script/load_hisilicon",
"blob": "18f88b4f8fba3a3fdc317c0af293280b1ddf6754",
"reconciled": "2026-08-25",
"note": "vendor driver loader; carries the os_mem_size fix firmware regression-tests"
},
{
"builder": "devices/hi3518ev200_lite_lenovo-snowman-1080p/br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"blob": "92805f802503b38be9bb08843b5760e91bb3abd7",
"reconciled": "2026-08-25",
"note": "device-local copy"
},
{
"builder": "devices/hi3518ev200_lite_lenovo-snowman-1080p/general/overlay/etc/init.d/S70vendor",
"firmware": "general/overlay/etc/init.d/S70vendor",
"blob": "d0a1dc58dae0a2c46b104274438cea2cae1106f1",
"reconciled": "2026-08-25",
"note": "shared vendor init"
},
{
"builder": "devices/hi3518ev200_lite_vstarcam-c8892wip/br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"blob": "92805f802503b38be9bb08843b5760e91bb3abd7",
"reconciled": "2026-08-25",
"note": "device-local copy"
},
{
"builder": "devices/hi3518ev200_ultimate_lenovo-snowman-1080p/br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"firmware": "br-ext-chip-hisilicon/board/hi3516cv200/hi3518ev200.generic.config",
"blob": "92805f802503b38be9bb08843b5760e91bb3abd7",
"reconciled": "2026-08-25",
"note": "device-local copy"
},
{
"builder": "devices/hi3518ev200_ultimate_lenovo-snowman-1080p/general/overlay/etc/init.d/S70vendor",
"firmware": "general/overlay/etc/init.d/S70vendor",
"blob": "d0a1dc58dae0a2c46b104274438cea2cae1106f1",
"reconciled": "2026-08-25",
"note": "shared vendor init"
},
{
"builder": "devices/hi3518ev300_lite_xiaomi-mjsxj02hl/general/overlay/etc/wireless/sdio",
"firmware": "general/overlay/etc/wireless/sdio",
"blob": "955032922fc2903353fb5c9c83f722e328d7d467",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/hi3518ev300_lite_xiaomi-mjsxj02hl/general/package/hisilicon-osdrv-hi3516ev200/hisilicon-osdrv-hi3516ev200.mk",
"firmware": "general/package/hisilicon-osdrv-hi3516ev200/hisilicon-osdrv-hi3516ev200.mk",
"blob": "e4ee5c21d1771154facba266307709ddb0f913f3",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/ssc30kd_lite_cmcc-ds-ytj5301/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-bu-eu/general/overlay/etc/init.d/S40network",
"firmware": "general/overlay/etc/init.d/S40network",
"blob": "b8fd109321b556bbfdc9f1671b376992897fb9f1",
"reconciled": "2026-08-25",
"note": "shared network init"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-bu-eu/general/overlay/etc/init.d/S99rc.local",
"firmware": "general/overlay/etc/init.d/S99rc.local",
"blob": "688a126281f9110458564c168a95c2a1a5995274",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-bu-eu/general/overlay/etc/network/interfaces.d/wlan0",
"firmware": "general/overlay/etc/network/interfaces.d/wlan0",
"blob": "7bce98b97a24f2e45d09ad654328eab3b6ea2125",
"reconciled": "2026-08-25",
"note": "shared interface definition"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-bu-eu/general/overlay/usr/share/udhcpc/default.script",
"firmware": "general/overlay/usr/share/udhcpc/default.script",
"blob": "925137f983fb27cf22e56480a85978db668ca651",
"reconciled": "2026-08-25",
"note": "shared udhcpc handler"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-cu-eu/general/overlay/etc/init.d/S40network",
"firmware": "general/overlay/etc/init.d/S40network",
"blob": "b8fd109321b556bbfdc9f1671b376992897fb9f1",
"reconciled": "2026-08-25",
"note": "shared network init"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-cu-eu/general/overlay/etc/init.d/S99rc.local",
"firmware": "general/overlay/etc/init.d/S99rc.local",
"blob": "688a126281f9110458564c168a95c2a1a5995274",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-cu-eu/general/overlay/etc/network/interfaces.d/wlan0",
"firmware": "general/overlay/etc/network/interfaces.d/wlan0",
"blob": "7bce98b97a24f2e45d09ad654328eab3b6ea2125",
"reconciled": "2026-08-25",
"note": "shared interface definition"
},
{
"builder": "devices/ssc30kq_apfpv_greg-generic-cu-eu/general/overlay/usr/share/udhcpc/default.script",
"firmware": "general/overlay/usr/share/udhcpc/default.script",
"blob": "925137f983fb27cf22e56480a85978db668ca651",
"reconciled": "2026-08-25",
"note": "shared udhcpc handler"
},
{
"builder": "devices/ssc30kq_rubyfpv_generic/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc325_lite_imou-c22cp/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc325_lite_tp-link-tapo-c310-v1/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc325_lite_trassir-tr-w2c1-v1/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc333_lite_vstarcam-c43s_b/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc335_lite_tp-link-tapo-c110-v1/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc335_lite_tp-link-tapo-c310-v220/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc335_lite_tp-link-tapo-c310-v220/general/package/sigmastar-osdrv-infinity6b0/files/sensor/configs/sc3338.bin",
"firmware": "general/package/sigmastar-osdrv-infinity6b0/files/sensor/configs/sc3338.bin",
"blob": "4154f87d3027c8e9325587002336cfdeed4d677d",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/ssc335_lite_trassir-tr-w2c1-v2/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-bu-eu/general/overlay/etc/init.d/S40network",
"firmware": "general/overlay/etc/init.d/S40network",
"blob": "b8fd109321b556bbfdc9f1671b376992897fb9f1",
"reconciled": "2026-08-25",
"note": "shared network init"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-bu-eu/general/overlay/etc/init.d/S99rc.local",
"firmware": "general/overlay/etc/init.d/S99rc.local",
"blob": "688a126281f9110458564c168a95c2a1a5995274",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-bu-eu/general/overlay/etc/network/interfaces.d/wlan0",
"firmware": "general/overlay/etc/network/interfaces.d/wlan0",
"blob": "7bce98b97a24f2e45d09ad654328eab3b6ea2125",
"reconciled": "2026-08-25",
"note": "shared interface definition"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-bu-eu/general/overlay/usr/share/udhcpc/default.script",
"firmware": "general/overlay/usr/share/udhcpc/default.script",
"blob": "925137f983fb27cf22e56480a85978db668ca651",
"reconciled": "2026-08-25",
"note": "shared udhcpc handler"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-cu-eu/general/overlay/etc/init.d/S40network",
"firmware": "general/overlay/etc/init.d/S40network",
"blob": "b8fd109321b556bbfdc9f1671b376992897fb9f1",
"reconciled": "2026-08-25",
"note": "shared network init"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-cu-eu/general/overlay/etc/init.d/S99rc.local",
"firmware": "general/overlay/etc/init.d/S99rc.local",
"blob": "688a126281f9110458564c168a95c2a1a5995274",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-cu-eu/general/overlay/etc/network/interfaces.d/wlan0",
"firmware": "general/overlay/etc/network/interfaces.d/wlan0",
"blob": "7bce98b97a24f2e45d09ad654328eab3b6ea2125",
"reconciled": "2026-08-25",
"note": "shared interface definition"
},
{
"builder": "devices/ssc338q_apfpv_greg-generic-cu-eu/general/overlay/usr/share/udhcpc/default.script",
"firmware": "general/overlay/usr/share/udhcpc/default.script",
"blob": "925137f983fb27cf22e56480a85978db668ca651",
"reconciled": "2026-08-25",
"note": "shared udhcpc handler"
},
{
"builder": "devices/ssc338q_fpv_openipc-mario-aio/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc338q_fpv_openipc-thinker-aio/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc338q_fpv_openipc-urllc-aio/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc338q_rubyfpv_generic/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc338q_rubyfpv_thinker_internal_wifi/general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"firmware": "general/package/sigmastar-osdrv-infinity6e/files/script/load_sigmastar",
"blob": "d56e9aeb776345db4322d2ec378f6b0e701f885e",
"reconciled": "2026-08-25",
"note": "vendor driver loader; firmware#2307 updated its sensor list"
},
{
"builder": "devices/ssc377qe_fpv_ccdcam-im50q01-tipoman/general/package/linux-patcher/linux-patcher.mk",
"firmware": "general/package/linux-patcher/linux-patcher.mk",
"blob": "fac2fcbf7b0b24092690892341d3890ea0738cc7",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t21_lite_wansview-q5-1080p/br-ext-chip-ingenic/board/t21/t21.generic.config",
"firmware": "br-ext-chip-ingenic/board/t21/t21.generic.config",
"blob": "f0c54d0af58f8127dfd9be0d3b43df413514b8a2",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t21_lite_xyx-06s/br-ext-chip-ingenic/board/t21/t21.generic.config",
"firmware": "br-ext-chip-ingenic/board/t21/t21.generic.config",
"blob": "f0c54d0af58f8127dfd9be0d3b43df413514b8a2",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t23_lite_jooan-a6m-u/general/overlay/etc/rc.local",
"firmware": "general/overlay/etc/rc.local",
"blob": "1426ecbbba979c0005f2dd5e465fc75284d4c5b3",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/t23_lite_jooan-a6m-u/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t23_lite_jooan-q3r-u/general/overlay/etc/rc.local",
"firmware": "general/overlay/etc/rc.local",
"blob": "1426ecbbba979c0005f2dd5e465fc75284d4c5b3",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/t23_lite_jooan-q3r-u/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t23_lite_lsc-3215672/general/overlay/etc/rc.local",
"firmware": "general/overlay/etc/rc.local",
"blob": "1426ecbbba979c0005f2dd5e465fc75284d4c5b3",
"reconciled": "2026-08-25",
"note": "shared rc.local"
},
{
"builder": "devices/t23_lite_lsc-3215672/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t31_lite_aceline-aip-o4/br-ext-chip-ingenic/board/t31/t31.generic.config",
"firmware": "br-ext-chip-ingenic/board/t31/t31.generic.config",
"blob": "0518469cce944263b2b288e5ba8322e1c886bcab",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t31_lite_aceline-aip-o4/general/overlay/etc/wireless/sdio",
"firmware": "general/overlay/etc/wireless/sdio",
"blob": "955032922fc2903353fb5c9c83f722e328d7d467",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t31_lite_aoni-ep01j05/general/overlay/etc/init.d/S70vendor",
"firmware": "general/overlay/etc/init.d/S70vendor",
"blob": "d0a1dc58dae0a2c46b104274438cea2cae1106f1",
"reconciled": "2026-08-25",
"note": "shared vendor init"
},
{
"builder": "devices/t31_lite_tp-link-tapo-tc70-v3/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t31_lite_tuya-gv7630-t31-ptz/br-ext-chip-ingenic/board/t31/t31.generic.config",
"firmware": "br-ext-chip-ingenic/board/t31/t31.generic.config",
"blob": "0518469cce944263b2b288e5ba8322e1c886bcab",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t31_lite_tuya-gv7630-t31-ptz/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t31_lite_vstarcam-cs55/general/overlay/etc/wireless/usb",
"firmware": "general/overlay/etc/wireless/usb",
"blob": "f9df96bc190e8f8a11794f9410568eac10f50320",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t31_lite_wansview-q5-2k/br-ext-chip-ingenic/board/t31/t31.generic.config",
"firmware": "br-ext-chip-ingenic/board/t31/t31.generic.config",
"blob": "0518469cce944263b2b288e5ba8322e1c886bcab",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
},
{
"builder": "devices/t31_lite_wansview-q5-2k/general/overlay/etc/wireless/sdio",
"firmware": "general/overlay/etc/wireless/sdio",
"blob": "955032922fc2903353fb5c9c83f722e328d7d467",
"reconciled": "2026-08-25",
"note": "shared wireless adapter table"
},
{
"builder": "devices/t40_lite_movols-mo-805p/br-ext-chip-ingenic/board/t40/t40.generic.config",
"firmware": "br-ext-chip-ingenic/board/t40/t40.generic.config",
"blob": "d027af78c683d0cb625e94fb8b525d4d1d39466a",
"reconciled": "2026-08-25",
"note": "device-local copy of a firmware file"
}
],
"builder_only_symbols": {
"BR2_PACKAGE_ADAPTIVE_LINK": "FPV link adaptation; firmware ships the package but no firmware defconfig enables it",
"BR2_PACKAGE_ATBM_WIFI": "ATBM wifi, only retail models here carry the part",
"BR2_PACKAGE_ATBM_WIFI_INTERFACE_USB": "sub-option of ATBM_WIFI",
"BR2_PACKAGE_ATBM_WIFI_MODEL_6012B": "sub-option of ATBM_WIFI",
"BR2_PACKAGE_AUTONIGHT": "day/night switching for specific retail models",
"BR2_PACKAGE_BWM_NG": "upstream Buildroot bandwidth monitor, FPV debugging",
"BR2_PACKAGE_FFMPEG_OPENIPC": "only the waybeam/venc profiles need it",
"BR2_PACKAGE_HISILICON_OSDRV_HI3536DV100": "hi3536dv100 is a builder-only family",
"BR2_PACKAGE_HOSTAPD": "upstream Buildroot; AP mode for the apfpv profiles",
"BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_4": "upstream Buildroot; the 3.4 kernel families here",
"BR2_PACKAGE_IW": "upstream Buildroot; selected by wifibroadcast-ng, also set directly here",
"BR2_PACKAGE_JSONFILTER": {
"reason": "only devices/apfpv needs it: its own etc/init.d/S99msposd pipes majestic's config.json through jsonfilter, and those two devices do not enable wifibroadcast-ng, which carries the select for every other FPV device. See builder#128, which removed it from the 95 defconfigs that did not.",
"devices": [
"apfpv/*/configs/*_defconfig"
]
},
"BR2_PACKAGE_KC110_BOARD_SUPPORT": "builder's own package, package/kc110-board-support",
"BR2_PACKAGE_LIBZIP": "upstream Buildroot; PHP webui profiles",
"BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_ATHEROS_9271": "ath9k_htc firmware for specific adapters",
"BR2_PACKAGE_LINUX_PATCHER_ATHEROS": "atheros patching for the FPV profiles",
"BR2_PACKAGE_MAVFWD": "FPV mavlink forwarding; selected by wifibroadcast-ng, also set directly",
"BR2_PACKAGE_MAVLINK_ROUTER": "FPV mavlink routing",
"BR2_PACKAGE_MINI": "the mini variant is builder-only",
"BR2_PACKAGE_MSPOSD": "FPV OSD; selected by wifibroadcast-ng, also set directly",
"BR2_PACKAGE_ONVIF_SIMPLE_SERVER": "ONVIF for retail models that advertise it",
"BR2_PACKAGE_PHP": "upstream Buildroot; the PHP webui profiles",
"BR2_PACKAGE_PHP_EXT_ZIP": "sub-option of PHP",
"BR2_PACKAGE_RCJOYSTICK": "FPV RC input",
"BR2_PACKAGE_RTL8192EU_OPENIPC": "wifi driver for specific retail models",
"BR2_PACKAGE_RTL8811CU_OPENIPC": "wifi driver for specific retail models",
"BR2_PACKAGE_RTL8812AU": "wifi driver for FPV adapters",
"BR2_PACKAGE_RTL8812AU_OPENIPC": "wifi driver for FPV adapters",
"BR2_PACKAGE_RTL88X2EU_OPENIPC": "wifi driver for FPV adapters",
"BR2_PACKAGE_RUBYFPV": "RubyFPV profiles are builder-only",
"BR2_PACKAGE_SSV635X_OPENIPC": "wifi driver for specific retail models",
"BR2_PACKAGE_UHTTPD": "upstream Buildroot; the PHP webui profiles",
"BR2_PACKAGE_VDEC_OPENIPC": "waybeam decode profile",
"BR2_PACKAGE_VENC_OPENIPC": "venc profiles are builder-only",
"BR2_PACKAGE_W1_DS18B20": "1-wire temperature sensor on specific models",
"BR2_PACKAGE_WEBUI": "the PHP webui, builder-only",
"BR2_PACKAGE_WIFIBROADCAST": "FPV, builder-only",
"BR2_PACKAGE_WIFIBROADCAST_NG": "FPV, builder-only"
},
"known_dead_symbols": {
"BR2_PACKAGE_APFPV_GREG": "no Kconfig in buildroot, firmware or here, so kconfig ignores the line. Set by the four *_apfpv_greg-generic-* devices, which suggests a package that was never landed. Left in place deliberately: removing it is a maintainer's call about those devices, not a side effect of adding this check.",
"BR2_PACKAGE_WIFIBROADCAST_EXT": "no Kconfig anywhere; set in devices/common beside BR2_PACKAGE_WIFIBROADCAST_NG, which does exist. Probably a rename that left this behind. Same reasoning as APFPV_GREG."
}
}