# Frequently Asked Build Questions This 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. ## Can't Program on Linux You 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). An example of using `sudo`, when your controller is ATMega32u4: $ sudo dfu-programmer atmega32u4 erase --force $ sudo dfu-programmer atmega32u4 flash your.hex $ sudo dfu-programmer atmega32u4 reset or just: $ sudo make ::dfu Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible. ### Linux `udev` Rules On Linux, you'll need proper privileges to access the MCU. You can either use `sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`. Once added run the following: ```console sudo udevadm control --reload-rules sudo udevadm trigger ``` **/etc/udev/rules.d/50-atmel-dfu.rules:** ``` # Atmel ATMega32U4 SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666" # Atmel USBKEY AT90USB1287 SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666" # Atmel ATMega32U2 SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666" ``` **/etc/udev/rules.d/52-tmk-keyboard.rules:** ``` # tmk keyboard products https://github.com/tmk/tmk_keyboard SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666" ``` **/etc/udev/rules.d/54-input-club-keyboard.rules:** ``` # Input Club keyboard bootloader SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666" ``` **/etc/udev/rules.d/55-catalina.rules:** ``` # ModemManager should ignore the following devices ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1" ``` **Note:** ModemManager filtering only works when not in strict mode, the following commands can update that settings: ```console sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service sudo systemctl daemon-reload sudo systemctl restart ModemManager ``` **/etc/udev/rules.d/56-dfu-util.rules:** ``` # stm32duino SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666" # Generic stm32 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666" ``` ### Serial device is not detected in bootloader mode on Linux Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options. ## Unknown Device for DFU Bootloader Issues encountered when flashing keyboards on Windows are most often due to having the wrong drivers installed for the bootloader, or none at all. Re-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. If 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. ## WINAVR is Obsolete It is no longer recommended and may cause some problem. See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99). ## USB VID and PID 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.
/*
Copyright 2011 Jun Wako <wakojun@gmail.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef BOOTLOADER_H
#define BOOTLOADER_H


/* give code for your bootloader to come up if needed */
void bootloader_jump(void);

#endif