Supported devices in Open Balena

In the readme it states that Open Balena supports a subset of devices:

Supported devices: Raspberry Pi family, the Intel NUC, the NVIDIA Jetson TX2, and the balenaFin

What is exactly the limitation? Is this just to encourage people using the paid version or is there a technical impediment? Since the project is open source, how would one add more supported devices?

Similar questions:

Good question. The device information appears to be stored in the device types table and populated by open-balena-api migrations like src/migrations/00013-add-device-types.sql. The table contains many more devices, and I have seen openBalena expend considerable effort loading the massive contract column that appears to contain the device definitions:

select name, slug, length(contract) from "device type" order by name;
                          name                          |                  slug                  | length 
--------------------------------------------------------+----------------------------------------+--------
 Aetina N310 TX2                                        | n310-tx2                               |   2875
 Aetina N510 TX2                                        | n510-tx2                               |   2875
 AIO 3288C                                              | aio-3288c                              |  11455
 AM571X EVM                                             | am571x-evm                             |  13522
 Apalis iMX6q                                           | apalis-imx6q                           |   7695
 Asus Tinker Board                                      | asus-tinker-board                      |   4929
 Asus Tinker Board S                                    | asus-tinker-board-s                    |   6066
 ASUS Tinker Edge T                                     | asus-tinker-edge-t                     |   4902
 Auvidea CNX100 Xavier NX                               | cnx100-xavier-nx                       |   5903
 Auvidea JN30B Nano                                     | jn30b-nano                             |   7305
 Balena Fin (CM3)                                       | fincm3                                 |   4028
 BananaPi-M1+                                           | bananapi-m1-plus                       |  10028
 BeagleBoard-XM                                         | beagleboard-xm                         |   9096
 BeagleBone Black                                       | beaglebone-black                       |  10482
 BeagleBone Green                                       | beaglebone-green                       |  11926
 BeagleBone Green Gateway                               | beaglebone-green-gateway               |  20456
 BeagleBone Green Wireless                              | beaglebone-green-wifi                  |  20451
 Colibri iMX6dl                                         | colibri-imx6dl                         |   7799
 Compulab IOT-gate-imx8                                 | iot-gate-imx8                          |   5128
 Compulab MX8M                                          | cl-som-imx8                            |   6643
 Coral Dev Board                                        | coral-dev                              |   1369
 CTI Astro TX2 G+                                       | astro-tx2                              |   4346
 CTI Orbitty TX2                                        | orbitty-tx2                            |   4353
 CTI Photon Nano                                        | photon-nano                            |   5844
 CTI Photon TX2 NX                                      | photon-tx2-nx                          |   5844
 CTI Photon Xavier NX                                   | photon-xavier-nx                       |   5723
 CTI Spacely TX2                                        | spacely-tx2                            |   4353
 Cybertan ZE250                                         | cybertan-ze250                         |   8285
 Digi ConnectCore 8X SBC Pro                            | ccimx8x-sbc-pro                        |  28709
 Edge Device Builder                                    | edge                                   |   1172
 Etcher Pro                                             | etcher-pro                             |   4905
 FireFly rk3288                                         | firefly-rk3288                         |  11470
 Floyd Nano BB02A eMMC                                  | floyd-nano                             |   3220
 Generic                                                | generic                                |   1178
 Generic AARCH64                                        | generic-aarch64                        |   3164
 Generic AMD64 (x86-64)                                 | generic-amd64                          |   1789
 Generic AMD64 (x86-64) with disk encryption            | generic-amd64-fde                      |   1802
 Generic ARMv7-a HF                                     | generic-armv7ahf                       |   2233
 Generic x86_64                                         | genericx86-64-ext                      |   6276
 Hummingboard                                           | hummingboard                           |   3729
 Intel Edison                                           | intel-edison                           |   4912
 Intel NUC                                              | intel-nuc                              |   4927
 I-Pi SMARC PX30 SD-CARD                                | smarc-px30                             |   3162
 Microsoft Surface 6                                    | surface-pro-6                          |   1831
 Microsoft Surface Go                                   | surface-go                             |   1827
 NanoPC-T4                                              | nanopc-t4                              |   4750
 Nanopi Neo Air                                         | nanopi-neo-air                         |   3054
 NanoPi R2C                                             | nanopi-r2c                             |  12933
 NanoPi R2S                                             | nanopi-r2s                             |   2025
 Nitrogen 6x                                            | nitrogen6x                             |   5048
 Nitrogen 6X Quad 2GB                                   | nitrogen6xq2g                          |   5063
 Nitrogen8M Mini SBC                                    | nitrogen8mm                            |   6818
 NPE X500 M3                                            | npe-x500-m3                            |  17425
 Nvidia blackboard TX2                                  | blackboard-tx2                         |   2513
 Nvidia Jetson Nano 2GB Devkit SD                       | jetson-nano-2gb-devkit                 |   3258
 Nvidia Jetson Nano eMMC                                | jetson-nano-emmc                       |   3234
 Nvidia Jetson Nano SD-CARD                             | jetson-nano                            |   3231
 Nvidia Jetson TX1                                      | jetson-tx1                             |   2321
 Nvidia Jetson TX2                                      | jetson-tx2                             |   2881
 Nvidia Jetson TX2 NX (with Xavier NX Devkit)           | jetson-tx2-nx-devkit                   |   2925
 Nvidia Jetson Xavier                                   | jetson-xavier                          |   3121
 Nvidia Jetson Xavier NX Devkit eMMC                    | jetson-xavier-nx-devkit-emmc           |   3166
 Nvidia Jetson Xavier NX Devkit SD-CARD                 | jetson-xavier-nx-devkit                |   3161
 Nvidia Jetson Xavier NX Devkit SD Seeed ReSpeaker-2Mic | jetson-xavier-nx-devkit-seeed-2mic-hat |   3207
 ODROID-C1+                                             | odroid-c1                              |  16182
 ODROID-XU4                                             | odroid-xu4                             |  15810
 Orange Pi Lite                                         | orange-pi-lite                         |  11459
 Orange Pi One                                          | orange-pi-one                          |  12093
 Orange Pi Plus2                                        | orangepi-plus2                         |  13052
 Orange Pi Zero                                         | orange-pi-zero                         |  12096
 Parallella                                             | parallella                             |  84688
 PocketBeagle                                           | beaglebone-pocket                      |  12577
 QEMU X86 32bit                                         | qemux86                                |  15723
 QEMU X86 64bit                                         | qemux86-64                             |  18858
 Radxa Zero                                             | radxa-zero                             |   1358
 Raspberry Pi 2                                         | raspberry-pi2                          |   6833
 Raspberry Pi 3                                         | raspberrypi3                           |   7182
 Raspberry Pi 3 (using 64bit OS)                        | raspberrypi3-64                        |   7497
 Raspberry Pi 400                                       | raspberrypi400-64                      |   8242
 Raspberry Pi 4 (using 64bit OS)                        | raspberrypi4-64                        |   6393
 Raspberry Pi CM4 IO Board                              | raspberrypicm4-ioboard                 |   6401
 Raspberry Pi (v1 / Zero / Zero W)                      | raspberry-pi                           |   5787
 Raspberry Pi Zero 2 W (64bit)                          | raspberrypi0-2w-64                     |   5785
 Revolution Pi Connect                                  | revpi-connect                          |   4601
 Revolution Pi Core 3                                   | revpi-core-3                           |  12102
 ROCK Pi 4B                                             | rockpi-4b-rk3399                       |   1373
 ROCKPro64                                              | rockpro64                              |   3101
 Rocktech ISG 503                                       | isg-503                                |   6856
 RushUp Kitra 520                                       | kitra520                               |   1777
 RushUp Kitra 710                                       | kitra710                               |   1371
 Samsung Artik 10                                       | artik10                                |   4091
 Samsung Artik 520                                      | artik5                                 |   3844
 Samsung Artik 530                                      | artik530                               |   6449
 Samsung Artik 530s 1G                                  | artik533s                              |   6723
 Samsung Artik 710                                      | artik710                               |   2420
 Seeed ODYSSEY-X86                                      | odyssey-x86                            |   3869
 Siemens IOT2000                                        | iot2000                                |   7201
 Technologic TS-4900                                    | ts4900                                 |  13765
 UP Board                                               | up-board                               |   1597
 UP Core                                                | up-core                                |   6373
 UP Core Plus                                           | up-core-plus                           |   6509
 UP Squared                                             | up-squared                             |   5436
 Variscite DART-6UL                                     | imx6ul-var-dart                        |   6528
 Variscite DART-MX8M                                    | imx8m-var-dart                         |   3310
 Variscite DART-MX8M Mini                               | imx8mm-var-dart                        |   4379
 Variscite VAR-SOM-MX6                                  | var-som-mx6                            |   5447
 Variscite VAR-SOM-MX7                                  | imx7-var-som                           |   3785
 VIA VAB 820-quad                                       | via-vab820-quad                        |   1964
 Zynq ZC702                                             | zc702-zynq7                            | 104609

The contract contains most of the parts that I would consider critical:

{"slug":"imx7-var-som","version":"1","type":"hw.device-type","aliases":["imx7-var-som"],"name":"Variscite VAR-SOM-MX7","assets":{"logo":{"url":"d
ata:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0<LONG_STRING>3ZnPgo=","name":"logo"}},"data":{"arch":"armv7hf","hdmi":false,"le
d":true,"connectivity":{"bluetooth":true,"wifi":true},"storage":{"internal":true},"media":{"installation":"sdcard"},"is_private":false}}

If there is some fundamental limitation on the openBalena side, I would expect it to involve architecture or maybe some limitation of the devices’ BalenaOS images.

Just to layer in here - we have included the ability to add and manage custom device types in open-balena-admin. Just be aware that for openbalena to accept apps for this device type, you need to also add a “device type slug” if you are using a more recent version of openbalena (also possible to do with open-balena-admin). We have been pushing apps for custom device types to our openbalena server for a while and it works great!

Got the following answer on the github issue about the same topic:

There’s no limitation – in theory openBalena supports the same set of devices balenaCloud does. In practice, we cannot advertise support for all of them because it’s currently impractical to test them all out like we do for balenaCloud. This will hopefully change in the future. What device are you interested in?

how would one add more supported devices?

Adding support for new devices is non-trivial – irrespective of whether it’s for openBalena or balenaCloud. The first step would be to get balenaOS running on the device and the quickest way to do that is to start from a balenaOS variant that appears to be most compatible to the device you want to add support for. You can get quite far by masquerading as a device that is currently supported as it trivially solves the problem of connecting your custom balenaOS to the backend. That’s all off the top my head. For more information, the best approach is to use the forums where you can get hold of the OS team to help you along the way.

1 Like