<divid="app"><divclass="Layout"data-v-5d98c3a5><!--[--><!--]--><!--[--><spantabindex="-1"data-v-0f60ec36></span><ahref="#VPContent"class="VPSkipLink visually-hidden"data-v-0f60ec36> Skip to content </a><!--]--><!----><headerclass="VPNav"data-v-5d98c3a5data-v-ae24b3ad><divclass="VPNavBar has-sidebar top"data-v-ae24b3addata-v-ccf7ddec><divclass="wrapper"data-v-ccf7ddec><divclass="container"data-v-ccf7ddec><divclass="title"data-v-ccf7ddec><divclass="VPNavBarTitle has-sidebar"data-v-ccf7ddecdata-v-ab179fa1><aclass="title"href="/"data-v-ab179fa1><!--[--><!--]--><!--[--><!--[--><!--[--><imgclass="VPImage dark logo"src="/badge-community-dark.svg"altdata-v-8426fc1a><!--]--><!--[--><imgclass="VPImage light logo"src="/badge-community-light.svg"altdata-v-8426fc1a><!--]--><!--]--><!--]--><!----><!--[--><!--]--></a></div></div><divclass="content"data-v-ccf7ddec><divclass="content-body"data-v-ccf7ddec><!--[--><!--]--><divclass="VPNavBarSearch search"data-v-ccf7ddec><!--[--><!----><divid="local-search"><buttontype="button"class="DocSearch DocSearch-Button"aria-label="Search"><spanclass="DocSearch-Button-Container"><spanclass="vp-icon DocSearch-Search-Icon"></span><spanclass="DocSearch-Button-Placeholder">Search</span></span><spanclass="DocSearch-Button-Keys"><kbdclass="DocSearch-Button-Key"></kbd><kbdclass="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><navaria-labelledby="main-nav-aria-label"class="VPNavBarMenu menu"data-v-ccf7ddecdata-v-7f418b0f><spanid="main-nav-aria-label"class="visually-hidden"data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><aclass="VPLink link VPNavBarMenuLink"href="./"tabindex="0"data-v-7f418b0fdata-v-9c663999><!--[--><spandata-v-9c663999>Home</span><!--]--></a><!--]--><!--]--></nav><!----><divclass="VPNavBarAppearance appearance"data-v-ccf7ddecdata-v-e6aabb21><buttonclass="VPSwitch VPSwitchAppearance"type="button"role="switch"title="Switch to dark theme"aria-checked="false"data-v-e6aabb21data-v-d1f28634data-v-1d5665e3><spanclass="check"data-v-1d5665e3><spanclass="icon"data-v-1d5665e3><!--[--><spanclass="vpi-sun sun"data-v-d1f28634></span><spanclass="vpi-moon moon"data-v-d1f28634></span><!--]--></span></span></button></div><divclass="VPSocialLinks VPNavBarSocialLinks social-links"data-v-ccf7ddecdata-v-0394ad82data-v-7bc22406><!--[--><aclass="VPSocialLink no-icon"href="https://reddit.com/r/olkb"aria-labeltarget="_blank"rel="noopener"data-v-7bc22406data-v-eee4e7cb><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 50 50"width="50px"height="50px"><pathd="M293C28.0625327.1640633.38281326.54C25.8359384.61718825.3632815.433594256.40625C24.3554698.14062524.08593810.39453124.0312513.03125C19.23437513.17968814.82031314.42187511.2812516.46875C10.21484415.468758.85546914.968757.514.96875C6.08984414.968754.67578115.5117193.5937516.59375C1.42578118.7617191.42578122.2382813.5937524.40625L3.8437524.65625C3.312526.035156327.488281329C333.5273445.56640637.5859389.562540.4375C13.55859443.28906319.007813452545C30.9921884536.44140643.28906340.437540.4375C44.43359437.5859384733.5273444729C4727.48828146.687526.03515646.1562524.65625L46.4062524.40625C48.57421922.23828148.57421918.76171946.4062516.59375C45.32421915.51171943.91015614.9687542.514.96875C41.14453114.9687539.78515615.4687538.7187516.46875C35.19531314.43359430.80078113.19140626.0312513.03125C26.0937510.54687526.3632818.4687526.8757.09375C27.1640636.31640627.5273445.75781327.8755.4375C28.2226565.11718828.5390635295C29.460938529.6835945.12530.031255.40625C30.3789065.687530.7851566.14843831.31256.6875C32.2539067.65234433.6953138.71484436.093758.9375C36.53906311.23828138.574219134113C43.75134610.75468C465.2543.753413C38.605469336.5742194.71093836.093756.96875C34.31256.79687533.5273446.10937532.755.3125C32.3007814.85156331.8867194.312531.31253.843
$ sudo dfu-programmer atmega32u4 flash your.hex
$ sudo dfu-programmer atmega32u4 reset
</code></pre><p>or just:</p><pre><code>$ sudo make <keyboard>:<keymap>:flash
</code></pre><p>Note that running <code>make</code> with <code>sudo</code> is generally <em><strong>not</strong></em> a good idea, and you should use one of the former methods, if possible.</p><h3id="linux-udev-rules"tabindex="-1">Linux <code>udev</code> Rules <aclass="header-anchor"href="#linux-udev-rules"aria-label="Permalink to "Linux `udev` Rules {#linux-udev-rules}""></a></h3><p>On Linux, you'll need proper privileges to communicate with the bootloader device. You can either use <code>sudo</code> when flashing firmware (not recommended), or place <ahref="https://github.com/qmk/qmk_firmware/tree/master/util/udev/50-qmk.rules"target="_blank"rel="noreferrer">this file</a> into <code>/etc/udev/rules.d/</code>.</p><p>Once added, run the following:</p><divclass="language- vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang"></span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><span>sudo udevadm control --reload-rules</span></span>
<spanclass="line"><span>sudo udevadm trigger</span></span></code></pre></div><p><strong>Note:</strong> With older versions of ModemManager (< 1.12), filtering only works when not in strict mode. The following commands can update that setting:</p><divclass="language- vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang"></span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><span>printf '[Service]\nExecStart=\nExecStart=/usr/sbin/ModemManager --filter-policy=default' | sudo tee /etc/systemd/system/ModemManager.service.d/policy.conf</span></span>
<spanclass="line"><span>sudo systemctl restart ModemManager</span></span></code></pre></div><h3id="serial-device-is-not-detected-in-bootloader-mode-on-linux"tabindex="-1">Serial device is not detected in bootloader mode on Linux <aclass="header-anchor"href="#serial-device-is-not-detected-in-bootloader-mode-on-linux"aria-label="Permalink to "Serial device is not detected in bootloader mode on Linux""></a></h3><p>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 <code>CONFIG_USB_ACM=y</code>. Other devices may require <code>USB_SERIAL</code> and any of its sub options.</p><h2id="unknown-device-for-dfu-bootloader"tabindex="-1">Unknown Device for DFU Bootloader <aclass="header-anchor"href="#unknown-device-for-dfu-bootloader"aria-label="Permalink to "Unknown Device for DFU Bootloader""></a></h2><p>Issues encountered when flashing keyboards on Windows are most often due to having the wrong drivers installed for the bootloader, or none at all.</p><p>Re-running the QMK installation script (<code>./util/qmk_install.sh</code> from the <code>qmk_firmware</code> directory in MSYS2 or WSL) or reinstalling the QMK Toolbox may fix the issue. Alternatively, you can download and run the <ahref="https://github.com/qmk/qmk_driver_installer"target="_blank"rel="noreferrer"><code>qmk_driver_installer</code></a> package manually.</p><p>If that doesn't work, then you may need to download and run Zadig. See <ahref="./driver_installation_zadig">Bootloader Driver Installation with Zadig</a> for more detailed information.</p><h2id="usb-vid-and-pid"tabindex="-1">USB VID and PID <aclass="header-anchor"href="#usb-vid-and-pid"aria-label="Permalink to "USB VID and PID""></a></h2><p>You can use any ID you want with editing <code>config.h</code>. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.</p><p>Most boards in QMK use <code>0xFEED</code> as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.</p><p>Also see this. <ahref="https://github.com/tmk/tmk_keyboard/issues/150"target="_blank"rel="noreferrer">https://github.com/tmk/tmk_keyboard/issues/150</a></p><p>You can buy a really unique VID:PID here. I don't think you need this for personal use.</p><ul><li><ahref="https://www.obdev.at/products/vusb/license.html"target="_blank"rel="noreferrer">https://www.obdev.at/products/vusb/license.html</a></li><li><ahref="https://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1"target="_blank"rel="noreferrer">https://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1</a></li></ul><h3id="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"tabindex="-1">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) <aclass="header-anchor"href="#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"aria-label="Permalink to "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)""></a></h3><p>Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and <em>may</em>, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.</p><p><ahref="https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin"target="_blank"rel="noreferrer">Planck rev6 reset EEPROM</a> can be used to force an eeprom reset. After flashing this