이전 게시글에서는 QMK Configurator를 사용하여 기성품 키보드의 펌웨어 빌드 및 업데이트를 해 보았습니다.
이 방법은 웹페이지의 GUI 화면에서 몇 번의 클릭만으로도 쉽게 펌웨어를 컴파일 후 다운로드할 수 있어서 커스텀 키보드를 처음 접하시는 분들이 많이 사용하는 것 같습니다.
아래 설명될 내용은 이러한 QMK Configurator를 사용하여 커스텀 키보드용 펌웨어를 사용하는 방법 말고 QMK MSYS라는 환경을 만들어 커스텀 키보드용 펌웨어를 컴파일 후 사용하는 방법을 설명합니다.
이러한 QMK MSYS를 사용할 경우의 장점은 QMK Configurator를 사용하는 경우에는 사용될 키보드를 먼저 선택해야 하기 때문에 이미 제작된 기성품 키보드에만 사용할 수 있습니다. 그러나 QMK MSYS를 사용하면 기존 QMK Configurator에서 지원되는 모든 키보드뿐만 아니라 나만의 키보드도 추가하여 사용할 수 있는 장점이 있습니다.
먼저 QMK 소스 다운로드, 컴파일, 펌웨어 업데이트를 하기 위한 개발 환경을 구축해야 합니다.
이러한 작업은 QMK MSYS를 설치함으로써 쉽게 개발 환경 셋업을 구성할 수 있습니다.
아래 사이트에서 QMK MSYS 설치파일을 다운로드합니다.
다운로드한 QMK_MSYS.exe를 실행한 후 기본 설치 디렉터리를 지정하였습니다.
커스텀 키보드의 펌웨어 업데이트에 필요한 드라이버 파일들을 같이 설치하도록 합니다.
설치에 필요한 설정값이 맞는지 한번 더 확인 후 설치를 진행합니다.
컴파일에 필요한 작은 사이즈의 소스 파일들이 많아 설치 시간이 좀 오래 걸립니다.
설치가 완료되면 윈도우 시작 메뉴에서 QMK MSYS를 실행합니다.
실행하면 아래와 같이 QMK MSYS 창이 뜹니다.
환영 메시지와 기본적인 qmk 명령어를 몇 가지 보여줍니다.
먼저 아래 명령어를 사용하여 QMK의 소스 코드를 다운로드하여 환경을 셋업해 줍니다.
qmk setup
y(es)를 입력하여 qmk_firmware 소스를 다운로드합니다.
관련된 여러 코드들도 같이 다운로드되어 시간이 좀 걸립니다.
아래와 같이 QMK is ready to go 메시지가 나오면 전체 QMK 소스를 다운로드가 완료된 것입니다.
소스코드가 다운로드되었으니 실제 키보드의 펌웨어를 빌드해 보기 전에 키보드 디렉터리를 살펴봅니다.
키보드 관련 디렉터리는 QMK 소스의 qmk_firmware/keyboards 디렉터리에 위치하고 있는데 기성품 키보드 대략 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 프로그램을 다운로드합니다.
다운로드한 qmk_toolbox를 실행 후 위에서 컴파일된 펌웨어 파일을 불러옵니다.
Auto-Flash를 체크 후 키보드에 USB를 연결합니다.
바로 다운로드가 안된다면 키보드의 리셋 버튼을 한 번 눌러 줍니다.
아래와 같은 메시지가 나오면 정상적으로 펌웨어가 업데이트된 것입니다.
만들고 있는 Corne 키보드에 업로드해 보니 아래와 같은 화면이 나오며 잘 동작되는 것으로 보입니다.
이런 식으로 QMK Configurator를 사용하지 않고 QMK MSYS 환경에서 펌웨어를 컴파일하여 업데이트 할 수 있습니다.
QMK MSYS 환경을 사용하면 기존 QMK Configurator에서 지원되는 모든 키보드의 펌웨어 컴파일 및 업데이트가 가능할 뿐만 아니라 자신만의 키보드도 추가 및 개발하여 나만의 커스텀 키보드를 만드는데 최적의 환경을 제공해 주는 것 같습니다. 다만 이러한 환경에서 개발하기 위해서는 대략적인 QMK의 소스도 분석해야 하고 관련 문서도 살펴봐야 해서 시간이 좀 걸릴 듯 보입니다.
'Make > 키보드' 카테고리의 다른 글
JLCPCB의 CNC 서비스 이용하기 (키보드 케이스 제작) (1) | 2023.11.12 |
---|---|
minivan 호환 40% 사이즈 키보드 제작 (1) | 2023.10.22 |
스플릿 키보드 Corne 케이스 제작 (4) | 2023.05.30 |
처음 자작한 커스텀 스플릿 키보드 Corne (2) | 2023.05.11 |
QMK configurator로 커스텀 키보드 펌웨어 컴파일 및 업데이트 (0) | 2023.04.14 |
댓글