Ich wollte die Tage eine neue QMK Firmware für die Daisy bauen, diesmal mit VIAL Integration, anstatt VIA, da in VIA anscheinend die Möglicheit eines LT-Layers komplett fehlt. Für mich mittlerweile absolut undenkbar, ohne zu arbeiten. Aber da ich sowieso versuche so weit wie möglich auf VIAL zu setzen, kam mir das eigentlich ganz recht. Beim kompilieren hatte ich allerdings ein neues Problem. Hier kommen interne Abhängigkeiten von QMK zu tragen, die sich nicht so ganz mit dem Rolling Release von Arch Linux vertragen.

Beim kompilieren der Firmware wurde ich von folgendem Fehler begrüßt:


Compiling: quantum/keymap_introspection.c                                                           [OK]
Compiling: quantum/led.c                                                                           In file included from platforms/gpio.h:21,
                 from quantum/led.c:20:
quantum/led.c: In function 'led_update_ports':
platforms/avr/gpio.h:33:46: error: array subscript 0 is outside array bounds of 'volatile uint8_t[0]' {aka 'volatile unsigned char[]'} [-Werror=array-bounds=]
   33 | #define writePinLow(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF))
      |                                              ^~
platforms/avr/gpio.h:34:61: note: in expansion of macro 'writePinLow'
   34 | #define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin))
      |                                                             ^~~~~~~~~~~
quantum/led.c:104:5: note: in expansion of macro 'writePin'
  104 |     writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock);
      |     ^~~~~~~~
cc1: note: source object is likely at address zero
cc1: all warnings being treated as errors
 [ERRORS]
 | 
 | 
 | 
make[1]: *** [builddefs/common_rules.mk:364: .build/obj_ktec_daisy_vial/quantum/led.o] Error 1
Make finished with errors
make: *** [Makefile:392: ktec/daisy:vial] Error 1

Nach meiner Recherche verursacht die Abhängigkeit von QMK zur Version von avr-gcc das Problem. Ein Fix ist zwar in QMK Issue 17136 eingetragen, funktioniert aber anscheinend nicht unter VIAL (zumindest zum jetztigen Zeitpunkt). Ein Gegentest mit qmk doctor bestätigt das nochmals:


Ψ Found arm-none-eabi-gcc version 13.2.0
Ψ Found avr-gcc version 13.2.0
⚠ We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.

Dafür gibt es aber einen relativ einfachen Workaround, mit dem setzen des Flags -e AVR_CFLAGS="-Wno-array-bounds", nach der Angabe von Keyboard/Keymap. Das sollte dann in etwa so aussehen make ktec/daisy:vial -e AVR_CFLAGS="-Wno-array-bounds" Danach fällt auch eine funktionierenede Firmware.hex aus der QMK.

Die Anzahl an Boards mit ATM32U4 hält sich bei mir tatsächlich stark in Grenzen, erst Recht in der Kombination das ich dann auch noch eine neue QMK dafür kompiliere. Daher ist mir das Thema auch bislang noch nicht aufgefallen, ich versuche soweit wie möglich auf RP2040 MCUs zu setzen. (siehe auch Keyboard Rabbithole Part 2)

Mit der neuen .hex liegt jetzt auch eine VIAL-fähige Firmware für meine alte Daisy vor, zusammen mit den neuen Switches die das Board verpasst bekommen hat, ist meine erste Custom jetzt wieder mehr als berechtigt, in meinen regelmäßigen Keyboard Wechsel aufgenommen zu werden. Der gute okin hat um den Wechsel zu erleichtern, auch ein unendlich gutes Tool pour geschrieben. Mehr dazu in Kürze.