news 2026/9/7 16:06:23

QMK开发环境手把手指南:四大系统30分钟编译出你的第一个键盘固件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QMK开发环境手把手指南:四大系统30分钟编译出你的第一个键盘固件

QMK开发环境手把手指南:四大系统30分钟编译出你的第一个键盘固件

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

QMK 是面向 AVR 与 ARM 微控制器的开源机械键盘固件项目。这篇指南按"选型→安装→初始化→验证→排错"的统一主线,带你在 Windows、macOS、Linux/WSL 与 FreeBSD 上搭好完整的 QMK 键盘固件开发环境,每一步都给出可对照的成功标志,跑通后你就能编译仓库里任意一款键盘的固件。

先做决策:四个平台的安装方案对比

装之前花 30 秒对号入座,能少走一半弯路:

平台推荐方案一句话说明适合人群
WindowsQMK MSYS一个安装器打包 MSYS2、Git、Python 3、AVR/ARM 工具链不想折腾依赖、双击安装即用的用户
macOSHomebrew Tap一条brew install拉齐 CLI 和全部工具链依赖已装 Homebrew 的 Mac 用户
Linux / WSL发行版包管理器 + pip按发行版装系统依赖,再从 PyPI 装 CLI熟悉命令行的 Linux 用户
FreeBSD 及其他类 Unixpkg / pkgin手动逐个安装 git、Python、工具链偏好完全自主控制的开发者

不管选哪条路,后面都要走同一套四步主线:装工具链 → 装 QMK CLI → 跑qmk setup→ 编译验证。下面先展开各平台的差异点,再讲通用步骤。

各平台安装差异点

Windows:QMK MSYS 一键装完

QMK MSYS 是基于 MSYS2 定制的整合环境,把编译 QMK 所需的一切预装到位。

  1. 从 QMK 官方下载页获取最新安装程序,双击运行;
  2. 安装位置保持默认C:\QMK_MSYS,勾选"添加到 Windows Terminal"方便日后调用;
  3. 杀毒软件可能误报安装器,安装期间临时关闭实时保护即可;
  4. 安装完成打开 QMK MSYS 终端,运行下面四条命令自检:
gcc --version avr-gcc --version python --version git --version

✅ 完成标志:四条命令都能打印出版本号,说明基础环境就绪。之后如需补装工具,用pacman -S <包名>即可,例如pacman -S mingw-w64-x86_64-nano

macOS:Homebrew Tap 是最省事的路径

macOS 上不需要手动装任何编译器,Homebrew 的官方 tap 会处理全部依赖:

brew tap qmk/qmk brew install qmk/qmk/qmk

第二条命令会自动带上 Python 3.9+、Git 以及 AVR/ARM 交叉编译器。装完运行qmk --version验证。

⚠️ Apple Silicon(M 系列芯片)用户注意:工具链目前没有原生 ARM 二进制包,brew 会在本地现场编译,brew install的耗时会比 Intel Mac 多出 30–60 分钟,耐心等待即可。

如果装完提示qmk: command not found,是 Homebrew 路径没进 shell 配置,追加这两行后重开终端:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc source ~/.zshrc

✅ 完成标志:which qmk能返回 brew 前缀下的可执行文件路径。

Linux / WSL:按发行版选包,CLI 走 pip

系统依赖因发行版而异,三套常用命令如下:

命令适用发行版
sudo apt update && sudo apt install -y git python3-pip python3-venv build-essential libusb-1.0-0-dev libudev-dev pkg-configUbuntu / Debian
sudo dnf install -y git python3-pip python3-virtualenv gcc make libusb1-devel libudev-devel pkgconfigFedora / RHEL 系
sudo pacman -S --needed --noconfirm git python-pip python-virtualenv base-devel libusb udev pkgconfArch / Manjaro

其中libusblibudev是刷写固件时与 USB 设备通信用的,缺了编译能过但烧录会失败,务必装上。

AVR / ARM 交叉编译器的包名同样按发行版区分:

工具链Ubuntu/DebianFedoraArch
AVRavr-libc avrdude binutils-avr gcc-avravr-libc avrdude avr-gcc avr-binutilsavr-libc avrdude avr-gcc
ARMgcc-arm-none-eabi binutils-arm-none-eabiarm-none-eabi-gcc arm-none-eabi-binutilsarm-none-eabi-gcc arm-none-eabi-binutils

CLI 本身用 pip 装到用户目录(不需要 root):

python3 -m pip install --user qmk

偏好隔离环境的可以改用uv tool install qmk;Arch 用户也可直接sudo pacman -S qmk

✅ 完成标志:which qmk输出~/.local/bin/qmk;若提示找不到命令,把$HOME/.local/bin加进~/.bashrc的 PATH 再source一次。

WSL2 额外一步:键盘是硬件,物理上插在 Windows 上,需要透传给 WSL 才能刷写。在 Windows 端装usbipdwinget install usbipd),用usbipd list找到键盘设备 ID,usbipd bind -b <设备ID>绑定;WSL 内执行sudo usbip attach -r 127.0.0.1 -b <设备ID>。✅ 完成标志:WSL 内lsusb能看到键盘的 USB 条目。

FreeBSD 及其他类 Unix 系统(附录)

FreeBSD 走 pkg,命令很短:

sudo pkg update sudo pkg install -y git gmake gcc zip unzip python3 py39-pip sudo pkg install -y avr-binutils avr-gcc avr-libc sudo pkg install -y arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib sudo pkg install -y avrdude dfu-util

OpenBSD 用doas pkg_add、NetBSD 用pkgin,模式相同:基础工具 + Python 3 + AVR/ARM 工具链 + 烧录工具。装完确认avr-gcc --versionarm-none-eabi-gcc --version都能输出版本号即可。

统一主线第一步:qmk setup 一键初始化

工具链就位后,所有平台执行同一条命令:

qmk setup

它会自动克隆 QMK 固件仓库(默认落在~/qmk_firmware)、初始化全部 Git 子模块(ChibiOS 等硬件抽象库都在子模块里)、并配置构建所需的环境。对所有交互式提示直接回车确认即可。

两个常用变体:

  • 想用自己的 fork:qmk setup <你的用户名>/qmk_firmware
  • 想自定义仓库位置:qmk setup -H ~/my_qmk

不想用 CLI 的,也可以手动克隆(记得带--recurse-submodules,否则子模块缺失会编译报错):

git clone --recurse-submodules https://gitcode.com/GitHub_Trending/qm/qmk_firmware

✅ 完成标志:终端提示 setup 完成,且~/qmk_firmware目录下能看到keyboards/quantum/等核心目录,lib/chibios子模块目录非空。

统一主线第二步:编译一个固件验证环境

验证用仓库内置的虚拟键盘null,它不依赖任何真实硬件,专门用来测编译链路:

qmk compile -kb null -km default

✅ 完成标志:输出中依次出现下面几行,并且固件大小检查通过:

Linking: .build/null_default.elf [OK] Creating load file for flashing: .build/null_default.hex [OK] * The firmware size is fine

想测真实键盘,把-kb换成具体型号即可,比如qmk compile -kb clueboard/66/rev3 -km default。不确定支持哪些键盘时,qmk list-keyboards | head -20先扫一眼列表。

高频坑点速查表

现象原因处理
qmk: command not found~/.local/bin不在 PATHecho 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
编译报子模块文件缺失克隆时漏了--recurse-submodules进仓库执行git submodule update --init --recursive
avr-gcc/arm-none-eabi-gcc不存在对应工具链没装按上表补装对应发行版的包
macOS 上 brew install 长时间无输出Apple Silicon 在本地编译工具链属正常现象,等 30–60 分钟
Windows 编译极慢杀毒软件实时扫描构建目录C:\QMK_MSYS加入 Defender 排除项
WSL 里lsusb看不到键盘USB 未透传按上文 usbipd 流程 bind + attach

编译通过后,接下来做什么

  • 把刚编出的.hex刷进键盘,流程见 刷写指南;Windows 上 DFU 模式识别异常时,参考 Zadig 驱动安装文档。
  • 为自己的键盘写键位映射,从 键映射入门 开始,进阶功能查 键码参考。
  • 习惯 Makefile 工作流的,可以跳过 CLI 直接用make,见 make 构建指南。
  • 遇到编译报错先翻 构建 FAQ 和 CLI 命令手册,大部分问题都有现成答案。

【免费下载链接】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 16:06:11

用C#和MQTTnet自建嵌入式MQTT服务器,打通工业物联网数据采集

1. 项目背景与选型思路 1.1 为什么要在C#体系里自建MQTT服务器 做C#上位机开发的朋友应该都有这种体会&#xff1a;搞工业数据采集、物联网网关、设备管理平台的时候&#xff0c;第一步往往不是写业务逻辑&#xff0c;而是先愁一个问题——设备端的数据怎么收上来。Modbus TCP…

作者头像 李华
网站建设 2026/9/7 16:04:09

多语言语料库构建实战:从数据采集、清洗合规到上线维护全流程

先说明一点&#xff1a;很多做 NLP 的朋友经常把目光聚焦在怎么把模型效果调好&#xff0c;却容易低估底层语料库建设的工作量。图像领域有 VOC、YOLO、COCO 这类相对规范的数据集可以使用&#xff0c;文本语料库却往往更麻烦&#xff1a;语言杂、来源杂、时间跨度和版权情况也…

作者头像 李华
网站建设 2026/9/7 16:03:26

JEP190:宽禁带功率半导体dv/dt鲁棒性评估指南与实测要点

/* 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 16:01:05

游戏时偶发重启排查攻略:日志、温度与供电验证指南

/* 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 16:00:10

WinForm常用组件选型与工控项目实战经验总结

我用WinForm做了八年工控上位机&#xff0c;踩过的坑比写过的代码还多。每次有新同事问我“WinForm常用组件到底怎么选、怎么用”&#xff0c;我都觉得一两句话说不清楚。这套看似老旧的UI框架&#xff0c;在工控、医疗、桌面工具领域依然坚挺&#xff0c;原因只有一个&#xf…

作者头像 李华
网站建设 2026/9/7 16:00:05

C++函数重写详解:从虚函数到override,彻底掌握多态核心机制

1. 从“同名函数”说起&#xff1a;为什么C需要函数重写这一机制很多初学者第一次接触“函数重写”这个概念时&#xff0c;脑子里冒出来的第一个问题往往是&#xff1a;函数名一样&#xff0c;编译器怎么知道该调用哪一个&#xff1f;如果只是换一个函数体&#xff0c;为什么不…

作者头像 李华