I understand how frustrating this is for you, and it's not what we would have chosen. In an ideal world, Device Trees are defined when a device is released and never changed. However, DT on BCM2835 platforms is still under development, with the standard "upstream" DTs still lagging behind our downstream trees (but catching up). Our aim is always to use as much upstream code as possible, and since the 4.8 kernel (not used in Raspbian) our DTs have been derived from the upstream DTs rather than being completely independent.
One of the differences between upstream and downstream was the naming of the UART nodes ("uart" vs "serial") so the change in 4.8 and later kernels has affected those few overlays that manipulate the serial aliases. I didn't anticipate that change, but I'm certain that it will never change again. As I see it you have a few options:
1. Flashing an EEPROM is actually much safer than you think. For some time now the standard eep_flash script has made use of a bit-bashed software I2C interface to avoid any contention with the VPU, so although it is a hassle for users, updating the EEPROM should be quick and safe.
2. If you want to avoid a similar update in future, it is now possible to replace the .DTB in an EEPROM with a file containing the name of an overlay. All DTBs start with a magic four-byte sequence, none of which are regular ASCII characters. If the firmware doesn't see the magic header it tries to interpret the section as an overlay name which it will load automatically just as if the user had put "dtoverlay=monarco-hat" in config.txt.
3. If you really don't want to reprogram the EEPROM then you'll have to ask users to load the overlay manually, by adding the following to config.txt before any other dt... directives:
Code: Select all
dtoverlay= # Don't load the HAT overlay