d8e29b53 |
1 | # Frequently Asked Build Questions |
2 | |
c0a6935f |
3 | This page covers questions about building QMK. If you have not yet you should read the [Build Environment Setup](getting_started_build_tools.md) and [Make Instructions](make_instructions.md) guides. |
00ec258e |
4 | |
d8e29b53 |
5 | ## Can't program on Linux |
9d1a08e3 |
6 | You will need proper permission to operate a device. For Linux users see udev rules below. Easy way is to use `sudo` command, if you are not familiar with this command check its manual with `man sudo` or this page on line. |
a5fc9c91 |
7 | |
79aa1f34 |
8 | In short when your controller is ATMega32u4, |
a5fc9c91 |
9 | |
10 | $ sudo dfu-programmer atmega32u4 erase --force |
1ef3dee8 |
11 | $ sudo dfu-programmer atmega32u4 flash your.hex |
a5fc9c91 |
12 | $ sudo dfu-programmer atmega32u4 reset |
13 | |
79aa1f34 |
14 | or just |
a5fc9c91 |
15 | |
9d1a08e3 |
16 | $ sudo make <keyboard>-<keymap>-dfu |
a5fc9c91 |
17 | |
9d1a08e3 |
18 | But to run `make` with root privilege is not good idea. Use former method if possible. |
a5fc9c91 |
19 | |
00ec258e |
20 | ## WINAVR is obsolete |
21 | It is no longer recommended and may cause some problem. |
9d1a08e3 |
22 | See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99). |
00ec258e |
23 | |
00ec258e |
24 | ## USB VID and PID |
9d1a08e3 |
25 | You 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. |
00ec258e |
26 | |
d8e29b53 |
27 | Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID. |
00ec258e |
28 | |
29 | Also see this. |
30 | https://github.com/tmk/tmk_keyboard/issues/150 |
31 | |
32 | You can buy a really unique VID:PID here. I don't think you need this for personal use. |
33 | - http://www.obdev.at/products/vusb/license.html |
12e5912c |
34 | - http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 |
35 | |
12e5912c |
36 | ## Linux udev rules |
37 | On Linux you need proper privilege to access device file of MCU, you'll have to use `sudo` when flashing firmware. You can circumvent this with placing these files in `/etc/udev/rules.d/`. |
38 | |
39 | **/etc/udev/rules.d/50-atmel-dfu.rules:** |
40 | ``` |
41 | # Atmel ATMega32U4 |
42 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666" |
43 | # Atmel USBKEY AT90USB1287 |
44 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666" |
45 | # Atmel ATMega32U2 |
46 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666" |
47 | ``` |
48 | |
49 | **/etc/udev/rules.d/52-tmk-keyboard.rules:** |
50 | ``` |
51 | # tmk keyboard products https://github.com/tmk/tmk_keyboard |
52 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666" |
81545bbe |
53 | ``` |
54 | |
55 | |
81545bbe |
56 | ## Cortex: cstddef: No such file or directory |
57 | GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA. |
58 | https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded |
59 | |
60 | https://github.com/tmk/tmk_keyboard/issues/212 |
61 | https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef |
c8f3e845 |
62 | https://developer.mbed.org/forum/mbed/topic/5205/ |
63 | |
64 | |
65 | ## 'clock_prescale_set' and 'clock_div_1' not available |
66 | Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2. |
67 | |
68 | ``` |
69 | Compiling C: ../../tmk_core/protocol/lufa/lufa.c |
70 | avr-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 |
71 | ../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu': |
72 | ../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set' |
73 | ../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function) |
74 | ../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once |
75 | ../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.) |
76 | make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1 |
f3b7863b |
77 | ``` |
78 | |
79 | |
80 | ## BOOTLOADER_SIZE for AVR |
81 | Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment. |
82 | |
83 | ``` |
84 | # Boot Section Size in *bytes* |
85 | # Teensy halfKay 512 |
86 | # Teensy++ halfKay 2048 |
87 | # Atmel DFU loader 4096 (TMK Alt Controller) |
88 | # LUFA bootloader 4096 |
89 | # USBaspLoader 2048 |
90 | OPT_DEFS += -DBOOTLOADER_SIZE=2048 |
d8e29b53 |
91 | ``` |