This website have moved to hunden.linuxkompis.se
How and why I compile the QMK keyboard firmware in Alpine Linux
I haven’t touched the firmware on my keyboard for a couple of years now, but the other day I decided it was time to make a few minor tweaks to it.
Compiling the QMK firmware in Gentoo means that I have to setup a development toolchain for the Atmel AVR microprocessor, which is what my keyboard uses. While it’s not rocket science to cross compile things in Gentoo, we can’t ignore the fact that I’m lazy.. So. I found it a lot easier and quicker to just set it up on my secondary computer with Alpine Linux instead.
All I had to do was to install the packages
avr-libc, I could then simply compile the source code. Flashing the firmware is still done on Gentoo with the tool
dfu-programmer, simply because that’s the machine my keyboard is connected to.
To make things a lot more simpler I wrote a Bash script that lets me edit, compile and flash the firmware:
editoption simply opens the
keymap.cfile using Neovim.
makeoption syncs the changes of the source code to my other computer using rsync, it then compiles the new version on my other computer, makes a backup of the old firmware and lastly copies the new firmware back to my desktop computer.
- The third options is called
flash, and run as root because I can’t use the keyboard when it’s put into the bootloader mode and the commands has to be run with privileges. The third option simply erases the storage on the keyboard, flashes the firmware and then boots the keyboard back up.
This is what the script looks like:
#!/bin/bash -e DIR="/home/johan/Backups/QMK" FILE="sentraq-s60x-iso.hex" case $1 in edit) nvim $DIR/qmk_firmware/keyboards/kb/keymaps/default/keymap.c ;; make) rsync -aAXv -e "ssh" $DIR/qmk_firmware/ billy:/home/johan/qmk_firmware/ ssh johan@billy -t "cd /home/johan/qmk_firmware && make kb:default" if test -f "$DIR/$FILE"; then mv "$DIR/$FILE" "$DIR/$FILE-$(date +%Y-%m-%d--%H%M%S)" fi rsync -aAXv -e "ssh" billy:/home/johan/qmk_firmware/kb_default.hex "$DIR/$FILE" ;; flash) echo "Don't forget to put your keyboard into the bootloader mode!" echo "5..." ; sleep 1 echo "4..." ; sleep 1 echo "3..." ; sleep 1 echo "2..." ; sleep 1 echo "1..." ; sleep 1 echo "Flashing keyboard..." dfu-programmer atmega32u4 erase --force dfu-programmer atmega32u4 flash "$DIR/$FILE" dfu-programmer atmega32u4 launch ;; esac
It’s nothing fancy, but it gets the job done. Improvements are always appreciated!