news 2026/9/7 10:41:46

把每个键都变成你要的样子:QMK 键盘固件上手指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
把每个键都变成你要的样子:QMK 键盘固件上手指南

把每个键都变成你要的样子:QMK 键盘固件上手指南

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

机械键盘到手后,你是否想过:能不能把某个角落的键改成一键呼出终端、切换层或者输入整段常用文字?QMK 固件(Quantum Mechanical Keyboard)正是为这类自定义需求而生的开源键盘固件,它支持 Atmel AVR 与 Arm USB 两大系列微控制器,覆盖了 Planck、Preonic、ErgoDox EZ、Clueboard 以及上千款社区键盘。本文面向刚接触 QMK 的用户,带你完成从克隆仓库到第一次刷写成功的全流程,并解释键位矩阵、层和宏这些核心概念。

为什么值得花一个晚上折腾

QMK 的价值不在于替换厂商固件,而在于给你三个自由度:

  • 键位自由:任意物理键可以映射成任意按键码,包括 QMK 扩展出来的层切换、宏触发等
  • 逻辑自由:最多支持 32 个层(layer),同一套硬件可以切换出打字、剪辑、游戏等多套布局
  • 生态自由:项目仓库的 keyboards/ 目录收录了海量键盘型号,每款都带参考配置,新键盘也基本都有人提交过支持

换句话说,只要你的键盘主控在支持列表里,键帽下面的世界就完全由你定义。

先搞懂一张图:键盘按键是怎么被识别的

QMK 把键盘抽象成行列交叉的矩阵。控制器只需扫少数几根线,就能判断哪个键被按下。手焊键盘的矩阵示意如下,横向是列线,纵向是行线,每个开关位于一个交叉点:

理解这张图有两个直接好处:一是看懂 keymap 代码里MATRIX_ROWSMATRIX_COLS的含义,二是在按键失灵时能快速定位是矩阵问题还是映射问题。

从克隆到编译成功:最短路径

  1. 克隆仓库(如需要):

    git clone https://gitcode.com/GitHub_Trending/qm/qmk_firmware
  2. 设置默认键盘和 keymap,省去每次敲参数:

    qmk config user.keyboard=planck/rev5 qmk config user.keymap=default

    所有配置项含义见 配置选项文档。

  3. 新建一个属于你自己的 keymap(不会覆盖官方版本,方便对比和恢复):

    qmk new-keymap -kb planck/rev5 -km mylayout

    文件会生成在keyboards/planck/rev5/keymaps/mylayout/下,核心是keymap.c

  4. 编译:

    qmk compile

    成功后项目根目录会出现<keyboard>_<keymap>.hex(AVR)或.bin(ARM)文件,这就是待刷写的固件。

改键位到底改哪里

打开keymap.c,找到形如keymaps[][MATRIX_ROWS][MATRIX_COLS]的数组——它就是各层的键位表,方括号里的数字是层号。把某个位置的KC_XXX换成目标按键码即可,例如把某键改为MO(1)(按住时激活第 1 层)或宏触发码MACRO(0)。常用按键码分两类:基础按键码(字母、符号等)和 QMK 扩展按键码(层、宏、灯光等)。

改完直接重新qmk compile,报错大多来自漏逗号或括号不配对,按提示行号定位即可,可参考 编译 FAQ。

刷进键盘:DFU 模式是关键

刷写前必须让键盘进入 DFU(固件更新)模式。不同键盘入口不同,常见方式包括按 PCB 上的 RESET 按钮、按住组合键再插入 USB 等,以你键盘的文档为准,总纲见 刷写文档。进入后执行:

qmk flash

它会自动编译并刷写当前默认键盘的固件。刷写成功后键盘会自动重启。如果反复失败,优先确认两件事:DFU 模式是否真的进入了、编译输出的目标架构是否与主控匹配(AVR 出 hex、ARM 出 bin)。

刷完之后先检查什么

  • 逐键测试:在 Configurator 测试页 或系统键盘测试工具里核对每个物理键的实际输出,重点验证你改过的那些键
  • 层行为:MO(n)是按住生效、TG(n)是切换状态、TO(n)是直接跳转,三者语义不同,层定义见 层功能文档
  • 若整块区域无响应,多半是矩阵或排线问题而非映射问题,可回到上一节的矩阵图排查

下一步可以探索的方向

  • :在 keymap 中用action_get_macro定义按 ID 区分的宏,SEND_STRING可整段输出文本,教程见 宏功能文档
  • RGB 灯效:在 keymap 的rules.mk中开启RGBLIGHT_ENABLE = yes,再在初始化钩子里设置颜色与模式
  • 平台与移植:想给自己的自绘板写固件,从 微控制器兼容列表 和 端口移植指南 入手

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 10:41:17

汽车软件战争:从座舱到云端,软件定义汽车的下半场

汽车软件的下一场战争…… 这两年做汽车软件的朋友聚在一起&#xff0c;聊着聊着总会落到同一个话题上&#xff1a;硬件规格单上那些数字已经卷不动了&#xff0c;大家开始把目光放在代码仓库和云端平台里。回忆一下&#xff0c;电动化那波浪潮拼的是电池密度、电机效率、平台…

作者头像 李华
网站建设 2026/9/7 10:38:01

多模态大模型入门:CLIP、SAM、BLIP与扩散模型学习路线与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 10:36:21

边缘网关管理Agent选型与落地:该装什么、怎么装、如何避坑

前阵子跟一个朋友跑现场&#xff0c;处理一台部署在配电房的边缘网关。网络是通的&#xff0c;业务进程也在跑&#xff0c;但远程就是连不上&#xff0c;控制指令发下去也没反应。后来发现是网关上的某个管理Agent把CPU吃满了&#xff0c;内部日志一直在滚动&#xff0c;磁盘也…

作者头像 李华
网站建设 2026/9/7 10:34:31

用本地开源模型从GitHub Issue自动生成Web应用实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 10:33:12

Fairphone 6 Plus:中端安卓手机新选择,可持续与实用兼得!

Fairphone 6 Plus&#xff1a;普通却令人兴奋的中端安卓机Fairphone 6 Plus 给人的感觉是一款极为普通的中端安卓手机&#xff0c;但有人对此兴奋不已。一直以来&#xff0c;Fairphone 致力于寻找符合道德规范来源的材料&#xff0c;并为设备提供高度可维修性&#xff0c;其使命…

作者头像 李华