Add Zadig 101 to docs (#6585)
[jackhill/qmk/firmware.git] / docs / faq_build.md
CommitLineData
d8e29b53 1# Frequently Asked Build Questions
2
8df2ee4e 3This page covers questions about building QMK. If you haven't yet done so, you should read the [Build Environment Setup](getting_started_build_tools.md) and [Make Instructions](getting_started_make_guide.md) guides.
00ec258e 4
7b0356d1 5## Can't Program on Linux
8df2ee4e 6You will need proper permissions to operate a device. For Linux users, see the instructions regarding `udev` rules, below. If you have issues with `udev`, a work-around is to use the `sudo` command. If you are not familiar with this command, check its manual with `man sudo` or [see this webpage](https://linux.die.net/man/8/sudo).
a5fc9c91 7
8df2ee4e 8An example of using `sudo`, when your controller is ATMega32u4:
bb53635f 9
a5fc9c91 10 $ sudo dfu-programmer atmega32u4 erase --force
1ef3dee8 11 $ sudo dfu-programmer atmega32u4 flash your.hex
a5fc9c91 12 $ sudo dfu-programmer atmega32u4 reset
13
8df2ee4e 14or just:
a5fc9c91 15
800ec55d 16 $ sudo make <keyboard>:<keymap>:dfu
a5fc9c91 17
c534a4c7 18Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
12e5912c 19
ea17e363 20### Linux `udev` Rules
8df2ee4e 21On Linux, you'll need proper privileges to access the MCU. You can either use
b5677853
JC
22`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`. Once added run the following:
23```console
24sudo udevadm control --reload-rules
25sudo udevadm trigger
26```
12e5912c 27
28**/etc/udev/rules.d/50-atmel-dfu.rules:**
29```
30# Atmel ATMega32U4
31SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
32# Atmel USBKEY AT90USB1287
33SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
34# Atmel ATMega32U2
35SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
36```
37
38**/etc/udev/rules.d/52-tmk-keyboard.rules:**
39```
40# tmk keyboard products https://github.com/tmk/tmk_keyboard
41SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
81545bbe 42```
2519de92
RR
43**/etc/udev/rules.d/54-input-club-keyboard.rules:**
44
45```
46# Input Club keyboard bootloader
47SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
48```
81545bbe 49
b5677853
JC
50**/etc/udev/rules.d/55-catalina.rules:**
51```
52# ModemManager should ignore the following devices
53ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
54ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
55```
56
57**Note:** ModemManager filtering only works when not in strict mode, the following commands can update that settings:
58```console
59sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
60sudo systemctl daemon-reload
61sudo systemctl restart ModemManager
62```
63
64**/etc/udev/rules.d/56-dfu-util.rules:**
65```
66# stm32duino
67SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"
68# Generic stm32
69SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
70```
71
4397b17c 72### Serial device is not detected in bootloader mode on Linux
efef5403 73Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
4397b17c
RHK
74Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
75
ea17e363
DJ
76## Unknown Device for DFU Bootloader
77
fb7c65dc 78Issues encountered when flashing keyboards on Windows are most often due to having the wrong drivers installed for the bootloader, or none at all.
ea17e363 79
fb7c65dc 80Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_firmware` directory in MSYS2 or WSL) or reinstalling the QMK Toolbox may fix the issue. Alternatively, you can download and run the [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer) package manually.
c534a4c7 81
fb7c65dc 82If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
ea17e363 83
8df2ee4e
BH
84## WINAVR is Obsolete
85It is no longer recommended and may cause some problem.
86See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
87
88## USB VID and PID
89You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
90
91Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.
92
93Also see this.
94https://github.com/tmk/tmk_keyboard/issues/150
95
96You can buy a really unique VID:PID here. I don't think you need this for personal use.
97- http://www.obdev.at/products/vusb/license.html
98- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
81545bbe 99
7b0356d1 100## Cortex: `cstddef: No such file or directory`
81545bbe 101GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
102https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
103
104https://github.com/tmk/tmk_keyboard/issues/212
105https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
c8f3e845 106https://developer.mbed.org/forum/mbed/topic/5205/
107
7b0356d1 108## `clock_prescale_set` and `clock_div_1` Not Available
c8f3e845 109Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
110
111```
112Compiling C: ../../tmk_core/protocol/lufa/lufa.c
113avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
114../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
115../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
116../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
117../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
118../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
119make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
f3b7863b 120```
121
122
123## BOOTLOADER_SIZE for AVR
124Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
125
126```
bb53635f 127# Boot Section Size in *bytes*
128# Teensy halfKay 512
129# Teensy++ halfKay 2048
f3b7863b 130# Atmel DFU loader 4096 (TMK Alt Controller)
bb53635f 131# LUFA bootloader 4096
132# USBaspLoader 2048
f3b7863b 133OPT_DEFS += -DBOOTLOADER_SIZE=2048
d8e29b53 134```
07b90db8
DJ
135
136## `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` on MacOS
efef5403 137This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
07b90db8 138
efef5403 139The solution is to remove and reinstall all affected modules.
07b90db8
DJ
140
141```
142brew rm avr-gcc
143brew rm dfu-programmer
91bfbb62 144brew rm dfu-util
07b90db8
DJ
145brew rm gcc-arm-none-eabi
146brew rm avrdude
147brew install avr-gcc
148brew install dfu-programmer
91bfbb62 149brew install dfu-util
07b90db8
DJ
150brew install gcc-arm-none-eabi
151brew install avrdude
152```
0d5a8b04
ET
153
154### avr-gcc 8.1 and LUFA
155
156If you updated your avr-gcc to above 7 you may see errors involving LUFA. For example:
157
158`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
159
160For now, you need to rollback avr-gcc to 7 in brew.
161
162```
163brew uninstall --force avr-gcc
4f2f2271
DN
164brew install avr-gcc@8
165brew link --force avr-gcc@8
0d5a8b04 166```
efef5403
YFL
167
168### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
169Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
170
171[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) can be used to force an eeprom reset. After flashing this image, flash your normal firmware again which should restore your keyboard to _normal_ working order.
172[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
173
174If bootmagic is enabled in any form, you should be able to do this too (see [Bootmagic docs](feature_bootmagic.md) and keyboard info for specifics on how to do this).