본문 바로가기

QMK MSYS를 사용한 커스텀 키보드 펌웨어 빌드하기

by rudals.kim 2023. 4. 17. 댓글 개
반응형

이전 게시글에서는 QMK Configurator를 사용하여 기성품 키보드의 펌웨어 빌드 및 업데이트를 해 보았습니다.

 

QMK configurator로 커스텀 키보드 펌웨어 컴파일 및 업데이트

일반적으로 QMK를 사용하여 커스텀 키보드를 만드는 경우 아래와 같은 순서대로 진행됩니다. QMK 소스를 컴파일하여 펌웨어를 생성하고 생성된 펌웨어는 qmk_toolbox.exe를 사용하여 키보드에 업로드

rudalskim.tistory.com

이 방법은 웹페이지의 GUI 화면에서 몇 번의 클릭만으로도 쉽게 펌웨어를 컴파일 후 다운로드할 수 있어서 커스텀 키보드를 처음 접하시는 분들이 많이 사용하는 것 같습니다.

 

아래 설명될 내용은 이러한 QMK Configurator를 사용하여 커스텀 키보드용 펌웨어를 사용하는 방법 말고 QMK MSYS라는 환경을 만들어 커스텀 키보드용 펌웨어를 컴파일 후 사용하는 방법을 설명합니다.

 

이러한 QMK MSYS를 사용할 경우의 장점은 QMK Configurator를 사용하는 경우에는 사용될 키보드를 먼저 선택해야 하기 때문에 이미 제작된 기성품 키보드에만 사용할 수 있습니다. 그러나 QMK MSYS를 사용하면 기존 QMK Configurator에서 지원되는 모든 키보드뿐만 아니라 나만의 키보드도 추가하여 사용할 수 있는 장점이 있습니다.

 

먼저 QMK 소스 다운로드, 컴파일, 펌웨어 업데이트를 하기 위한 개발 환경을 구축해야 합니다.

이러한 작업은 QMK MSYS를 설치함으로써 쉽게 개발 환경 셋업을 구성할 수 있습니다. 

 

아래 사이트에서 QMK MSYS 설치파일을 다운로드합니다.

 

QMK MSYS

 

msys.qmk.fm

다운로드한 QMK_MSYS.exe를 실행한 후 기본 설치 디렉터리를 지정하였습니다.

커스텀 키보드의 펌웨어 업데이트에 필요한 드라이버 파일들을 같이 설치하도록 합니다.

설치에 필요한 설정값이 맞는지 한번 더 확인 후 설치를 진행합니다.

컴파일에 필요한 작은 사이즈의 소스 파일들이 많아 설치 시간이 좀 오래 걸립니다.

설치가 완료되면 윈도우 시작 메뉴에서 QMK MSYS를 실행합니다.

실행하면 아래와 같이 QMK MSYS 창이 뜹니다. 

환영 메시지와 기본적인 qmk 명령어를 몇 가지 보여줍니다.

먼저 아래 명령어를 사용하여 QMK의 소스 코드를 다운로드하여 환경을 셋업해 줍니다.

qmk setup

 

y(es)를 입력하여 qmk_firmware 소스를 다운로드합니다.

관련된 여러 코드들도 같이 다운로드되어 시간이 좀 걸립니다.

아래와 같이 QMK is ready to go 메시지가 나오면 전체 QMK 소스를 다운로드가 완료된 것입니다.

소스코드가 다운로드되었으니 실제 키보드의 펌웨어를 빌드해 보기 전에 키보드 디렉터리를 살펴봅니다.

키보드 관련 디렉터리는 QMK 소스의 qmk_firmware/keyboars 디렉터리에 위치하고 있는데 기성품 키보드 대략 907개(아래 리스트를 참고)가 지원이 되고 있으며 해당 기성품 키보드의 펌웨어를 빌드할 수 있습니다. 참고로 QMK를 사용하여 자신만의 새로운 키보드를 생성하게 되면 이 디렉터리에 밑에 새로운 키보드가 추가가 됩니다.

0_sixty             cipulot            giabalanai           lazydesigners        org60                soda
0xc7                ck60i              gizmo_engineering    leafcutterlabs       ortho5by12           sofle
0xcb                ckeys              gkeyboard            leeku                orthocode            soup10
10bleoledhub        clawsome           gl516                lefty                orthodox             sowbug
1k                  clickety_split     glenpickle           lets_split           owlab                soy20
1upkeyboards        clueboard          gmmk                 lfkeyboards          p3d                  spaceholdings
25keys              cmm_studio         gon                  lily58               pabile               spaceman
2key2crawl          coarse             gopolar              lime                 palette1202          spacetime
30wer               coban              gorthage_truck       linworks             panc40               spacey
3keyecosystem       compound           gowla                littlealby           panc60               sparrow62
3w6                 contender          gray_studio          lizard_trick         papercranekeyboards  specskeys
40percentclub       contra             grid600              ll3macorn            paprikman            spiderisland
45_ats              controllerworks    gummykey             lm_keyboard          parallel             spleeb
4by3                converter          gvalchca             loki65               pauperboards         splitish
4pplet              cool836a           h0oni                longnald             pdxkbc               splitkb
7c8                 copenhagen_click   hadron               lpad                 pearl                splitography
8pack               coseyfannitutti    halfcliff            lucid                pearlboards          splitty
9key                cosmo65            halokeys             lw67                 peej                 sporewoh
a_dux               cozykeys           han60                lw75                 pegasus              star75
abacus              cradio             hand88               lyso1                peranekofactory      stello65
abatskeyboardclub   craftwalk          handwired            lz                   percent              stenokeyboards
abstract            crawlpad           hardlineworks        m10a                 phage_studio         sthlmkb
acekeyboard         crazy_keyboard_68  hardwareabstraction  machine_industries   phantom              stratos
acheron             crbn               hazel                machkeyboards        phase_studio         studiokestra
ada                 creatkeebs         heliar               macro1               phoenix              suavity
adafruit            crimsonkeyboards   heliotrope           macro3               phrygian             subatomic
adelheid            crin               helix                macrocat             pica40               subrezon
adkb96              crkbd              hfdkb                majistic             pico                 supersplit
adm42               crypt_macro        hhkb                 makenova             picolab              superuser
adpenrose           custommk           hhkb_lite_2          makeymakey           pierce               swiftrax
aeboards            cutie_club         hidtech              makrosu              pimentoso            switchplate
afternoonlabs       cx60               hifumi               malevolti            pinky                sx60
ai                  cxt_studio         hillside             manta60              pisces               synapse
ai03                cybergear          hineybush            manyboard            pixelspace           synthandkeys
aidansmithdotdev    dailycraft         hnahkb               maple_computing      pizzakeyboards       synthlabs
akb                 daji               holyswitch           marksard             pjb                  system76
akegata_denki       db                 horizon              massdrop             pkb65                tada68
al1                 dc01               horrortroll          masterworks          planck               takashicompany
alas                dekunukem          hotdox               matchstickworks      playkbtw             takashiski
aleblazer           delikeeb           hotdox76v2           matrix               ploopyco             taleguers
alf                 deltapad           hp69                 matthewdias          pluckey              tanuki
alfredslab          deltasplit75       hs60                 maxipad              plum47               tau4
alhenkb             demiurge           hub16                maxr1998             plume                teahouse
aliceh66            deng               hub20                mb44                 plut0nium            team0110
alpha               dichotomy          hubble               mc_76k               plx                  technika
alpine65            dinofizz           huytbt               mechanickeys         plywrks              teleport
alps64              dk60               ianklug              mechbrewery          pohjolaworks         telophase
alt34               dm9records         ibm                  mechkeys             poker87c             tempo_turtle
amag23              dmqdesign          ibnuda               mechllama            poker87d             tender
amjkeyboard         do60               idb                  mechlovin            polilla              tenki
an_achronism        doio               idobao               mechstudio           polycarbdiet         terrazzo
anavi               donutcables        idyllic              mechwild             pom_keyboards        tetris
annepro2            doodboard          igloo                mecxlabs             portal_66            tg4x
ano                 doppelganger       illuminati           mehkee96             pos78                tgr
anomalykb           doro67             illusion             meletrix             preonic              the_royal
aos                 dp60               ilumkb               melgeek              primekb              themadnoodle
aozora              draculad           inett_studio         meme                 program_yoink        thepanduuh
aplyard             draytronics        ingrained            meow48               projectcain          thevankeyboards
arabica37           drewkeys           input_club           meow65               projectkb            tkc
ares                drhigsby           io_mini1800          merge                prototypist          tkw
argo_works          drop               irene                mesa                 protozoa             tmo50
arisu               dtisaac            iriskeyboards        meson                psuieee              toad
arrayperipherals    duck               iron180              metamechs            pteron36             toffee_studio
ash_xiix            ducky              j80                  mexsistor            pteropus             tokyokeyboard
ash1800             dumbo              jacky_studio         mikeneko65           puck                 tominabox1
ashpil              dumbpad            jadookb              miller               punk75               torn
ask55               durgod             jae                  millipad             q4z                  touchpad
at_at               dyz                jagdpietr            mincedshon           qpockets             tr60w
atlantis            dz60               janus                mini_elixivy         quad_h               trashman
atlas_65            dztech             jc65                 mini_ten_key_plus    quantrik             treasure
atomic              e88                jd40                 miniaxe              quarkeys             tronguylabs
atreus              ealdin             jd45                 minimacro5           qvex                 tszaboo
atreus62            earth_rover        jels                 minimon              qwertlekeys          tunks
atreyu              eason              jian                 mino                 qwertykeys           tw40
atset               ebastler           jiran                mino_plus            qwertyydox           tweetydabird
atxkb               eco                jkdlab               mint60               rabbit               tzarc
aurora65            edc40              jkeys_design         misonoworks          rad                  ubest
avalanche           edda               jm60                 misterknife          rainkeebs            uk78
aves60              edi                jolofsor             mitosis              ramlord              ungodly
aves65              edinburgh41        jones                miuni32              rart                 unicomp
axolstudio          eek                jorne                mixi                 rate                 unikeyboard
aya                 efreet             k34                  mk65                 rationalist          unikorn
b_sides             ein_60             kabedon              mkh_studio           readme.md            unison
bacca70             ekow               kagizaraya           ml                   recompile_keys       uranuma
baguette            elephant42         kakunpc              mlego                rect44               utd80
baion_808           emajesty           kamigakushi          mmkzoo65             redox                uzu42
bajjak              emery65            kapcave              mnk1800s             redox_media          v4n4g0rth0n
balloondogcaps      emi20              kapl                 mnk50                redox_w              v60_type_r
bandominedoni       emptystring        karlb                mnk75                redscarf_i           vagrant_10
bantam44            eniigmakeyboards   karn                 mntre                redscarf_iiplus      vertex
barleycorn_smd      ep                 kb_elmo              mode                 reedskeebs           viendi8l
barracuda           epoch80            kb58                 mokey                retro_75             viktus
basekeys            era                kbdclack             molecule             reversestudio        vitamins_included
basketweave         ergodox_ez         kbdfans              momoka_ergo          reviung              w1_at
bastardkb           ergodox_stm32      kbnordic             momokai              rgbkb                waldo
bbrfkr              ergoslab           kc60                 monarch              ristretto            walletburner
bear_face           ergotravel         kc60se               monoflex60           rmi_kb               waterfowl
beatervan           ericrlau           keaboard             monstargear          rmkeebs              wavtype
beekeeb             esca               keebformom           montsinger           rocketboard_16       weirdo
bemeier             eternal_keypad     keebio               moon                 rominronin           wekey
bfake               eu_isolation       keebmonkey           moonlander           roseslite            westfoxtrot
biacco42            evancookaudio      keebsforall          morizon              rotor                westm
binepad             eve                keebwerk             mountainblocks       rotr                 whale
bioi                evil80             keebzdotnet          ms_sculpt            rpiguy9907           wilba_tech
black_hellebore     evolv              kegen                mschwingen           rubi                 winkeyless
blackplum           evyd13             kepler_33            mss_studio           rudals               winkeys
blank               exclusive          keybage              mt                   runes                winry
blank_tehnologii    exent              keybee               mtbkeys              rura66               wolf
blaster75           eyeohdesigns       keyboardio           murcielago           ryanbaekr            wolfmarkclub
blockboy            ez_maker           keycapsss            mwstudio             ryanskidmore         woodkeys
blockey             facew              keychron             mxss                 ryloo_studio         work_louder
blu                 fallacy            keygem               mysticworks          s_ol                 wren
bluebell            fc660c             keyhive              nack                 saevus               wsk
boardrun            fc980c             keyprez              nacly                salicylic_acid3      wuque
boardsource         fearherbs1         keyquest             nasu                 sam                  x16
boardwalk           feels              keysofkings          navi60               sanctified           xbows
bobpad              feker              keyspensory          ncc1701kb            sandwich             xelus
bolsa               ferris             keystonecaps         neito                sapuseven            xenon
bop                 ffkeebs            keyten               nek_type_a           satt                 xiaomi
boston              fjlabs             kikkou               nemui                sauce                xiudi
boston_meetup       flehrad            kikoslab             neokeys              sawnsprojects        xmmx
botanicalkeyboards  fleuron            kin80                neopad               scatter42            xw60
box75               fluorite           kindakeyboards       neson_design         sck                  yampad
bpiphany            flx                kinesis              newgame40            sekigon              yandrstudio
bt66tech            flxlb              kineticlabs          nibiria              sendyyeah            yanghu
bthlabs             flygone60          kingly_keys          nightingale_studios  senselessclay        yatara
bubble75            foostan            kira75               nightly_boards       sentraq              ydkb
buildakb            for_science        kira80               nightmare            sergiopoverony       yeehaw
buzzard             forever65          kiwikeebs            nimrod               sets3n               yiancardesigns
cablecardesigns     fortitude60        kiwikey              ning                 shambles             ymdk
caffeinated         foxlab             kkatano              nix_studio           shapeshifter4060     yncognito
canary              fr4                kmac                 nixkeyboards         shiro                yoichiro
cannonkeys          fractal            kmac_pad             nopunin10did         shk9                 yosino58
cantor              free_willy         kmini                novelkeys            shoc                 yugo_m
capsunlocked        friedrich          knobgoblin           noxary               sidderskb            yushakobo
carbo65             frobiac            knops                np12                 signum               yynmt
catch22             frooastboard       kona_classic         nullbitsco           silverbullet44       z12
centromere          ft                 kopibeng             numatreus            singa                z34
cest73              function96         kprepublic           nyhxis               sirius               zfrontier
chalice             fungo              ktec                 obosob               sixkeyboard          zicodia
chaos65             funky40            kudox                ocean                skeletn87            ziggurat
charue              gami_studio        kudox_full           oddball              skeletonkbd          zj68
chavdai40           gboards            kudox_game           oddforge             skergo               zlant
checkerboards       geekboards         kuro                 odelia               skippys_custom_pcs   zoo
cherrybstudio       geistmaschine      kv                   ogre                 skme                 ztboards
cheshire            generic_panda      kwub                 ok60                 skmt                 zvecr
chickenman          genone             ky01                 om60                 slz40                zykrah
chlx                geonworks          labbe                omkbd                smallkeyboard
chocofly            ggkeyboards        labyrinth75          omnikeyish           smithrune
chocv               gh60               laser_ninja          onekeyco             smk60
chord               gh80_3000          late9                opendeck             snampad
chromatonemini      ghs                latincompass         orange75             sneakbox

 

제가 빌드해 볼 키보드는 기성품의 Corne라는 스플릿 키보드인데 qmk 소소코드에서는 crkbd라는 이름으로 되어 있는 것 같습니다. 아래 그림을 보면 qmk_firmware/keyboards/crkbd 디렉터리 밑에 붉은색 사각형에 있는 2개의 디렉터리가 있는데 해당 디렉터리의 이름이 키보드 이름이고 keymaps 디렉터리 내에 있는 여러 개의 디렉터리가 키맵의 이름이 됩니다.

대략적으로 키보드 관련 디렉터리 구조를 살펴보았습니다.

이제 실제적으로 가지고 있는 기성품 키보드의 펌웨어를 컴파일해 보겠습니다.

컴파일 명령어는 아래와 같은 형식으로 사용합니다.

qmk compile -kb 키보드이름 -km 키맵이름

 

제 경우 키보드는 crkbd/r2g를 키맵은 default를 사용하였습니다.

qmk compile -kb crkbd/r2g -km default

 

아래 이미지는 컴파일 전에 hex 파일(펌웨어 파일)이 있는지 먼저 확인해 본 후 컴파일을 진행한 이미지입니다.

아래와 같은 메시지가 나오면 컴파일이 완료된 것입니다.

컴파일이 완료된 후 qmk_firmware 디렉터리로 이동하여 아래 명령어를 사용해 봅니다.

ls *.hex

 

컴파일 전에는 없었던 crdbd_r2g_default.hex 파일이 생성되었습니다. (키보드명_키맵명.hex 형식의 파일이 생성됩니다.)

아래 명령어를 사용하여 펌웨어를 키보드에 업로드합니다.

qmk flash -kb crkbd/r2g -km default

 

만약 QMK MSYS상에서 위의 명령어를 사용하여 펌웨어를 키보드에 업로드할 수 없다면 qmk_toolbox를 다운로드하여 펌웨어를 업데이트할 수 있습니다. 아래 웹사이트에 qmk_toolbox 프로그램을 다운로드합니다.

 

Releases · qmk/qmk_toolbox

A Toolbox companion for QMK Firmware. Contribute to qmk/qmk_toolbox development by creating an account on GitHub.

github.com

다운로드한 qmk_toolbox를 실행 후 위에서 컴파일된 펌웨어 파일을 불러옵니다.

Auto-Flash를 체크 후 키보드에 USB를 연결합니다.

바로 다운로드가 안된다면 키보드의 리셋 버튼을 한 번 눌러 줍니다.

아래와 같은 메시지가 나오면 정상적으로 펌웨어가 업데이트된 것입니다.

만들고 있는 Corne 키보드에 업로드해 보니 아래와 같은 화면이 나오며 잘 동작되는 것으로 보입니다.

이런 식으로 QMK Configurator를 사용하지 않고 QMK MSYS 환경에서 펌웨어를 컴파일하여 업데이트 할 수 있습니다.

QMK MSYS 환경을 사용하면 기존 QMK Configurator에서 지원되는 모든 키보드의 펌웨어 컴파일 및 업데이트가 가능할 뿐만 아니라 자신만의 키보드도 추가 및 개발하여 나만의 커스텀 키보드를 만드는데 최적의 환경을 제공해 주는 것 같습니다. 다만 이러한 환경에서 개발하기 위해서는 대략적인 QMK의 소스도 분석해야 하고 관련 문서도 살펴봐야 해서 시간이 좀 걸릴 듯 보입니다.

반응형

댓글