从零开始编译自己的 qmk 固件

ShadowC

| 本文阅读量: -

ps:DIY 一个属于自己的 qmk 小键盘,支持 via 在线改键值。使用了成品的最小系统板 Arduino Pro Micro,其 mcu 为 atmega 32u4。

安装 qmk 环境

此部分可以参考 QMK - Setup

本文选择的是在 windows 下搭建 qmk 环境。

下载代码仓库

QMK MSYS 下载后安装即可,安装完成后打开,执行 qmk setup 时拉取 github 上的 qmk_firmware 失败,解决方法是在能顺利访问 github 的终端环境中:

# 在合适的位置(准备存放 qmk firmware 的目录下)拉去 git 仓库
$ git clone git@github.com:qmk/qmk_firmware.git

# 进入 fireware 目录下
# !Warning: 如果终端的 prompt 会打印 git 状态,进入这个目录后大概率卡死
#           请务必使用不打印 git 状态的终端进入该目录
$ cd qmk_firmware

# --progress 参数可以显示拉去每个子模块的进度
$ git submodule update --init --recursive --progress

初始化 qmk

打开 QMK MSYS 终端,执行

# 如果当前目录下存在 qmk_firemware 目录,可以不用通过 -H 指定
$ qmk setup -H /path/to/your/qmk/firmware/folder

新建固件,编译和写入

在 qmk 中,keyboard 就是指硬件的结构,包括使用的 mcu、引脚和键位的连接等信息。

$ qmk new-keyboard

根据提示选择即可,命名的要求参考 Keyboard Guidelines - Naming you keyboard/project,最大支持四层子文件夹的目录,实际上 作者 - 键盘型号 - 版本 三层足矣。如果目录不止一层,不另外指定的话会默认 github 仓库和作者名称为第一层目录的名称。该目录下的文件结构参考 Keyboard Guidelines - Keyboard Folder Structure

得到的文件结构类似于:

- keyboard
| - chengshusss
  | - littlepad
    | - rev1
      | - (dir) keymaps
      | - config.h
      | - info.json
      | - readme.md
      | - rules.mk

修改配置信息

info.json

参考文档 info_json.md ,根据实际情况,修改的字段有:

  1. matrix_pins,按照实际电路连接情况填写;
  2. layouts,根据 matrix_pins 的组合填写;
  3. diode_direction,如果可以正常刷入固件,但是一个都不触发,可以试着修改此字段(取值与硬件连接有关);
  4. pid 和 vid 在后续连接 via 修改按键定义时需要用到,此处可以任意选择(推荐方案是用有意义字母的 ascii 值);
{
    "manufacturer": "chengshusss",
    "keyboard_name": "LittlePad",
    "maintainer": "chengshusss",
    "bootloader": "atmel-dfu",
    "diode_direction": "ROW2COL",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true
    },
    "matrix_pins": {
        "rows": ["F4", "F5", "F6", "F7" ],
        "cols": ["D7", "D4", "D0", "D1"]
    },
    "processor": "atmega32u4",
    "url": "",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x0313",
        "vid": "0x0C10"
    },
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"matrix": [0, 0], "x": 0, "y": 0},
                {"matrix": [0, 3], "x": 3, "y": 0},
                {"matrix": [1, 0], "x": 0, "y": 1},
                {"matrix": [1, 1], "x": 1, "y": 1},
                {"matrix": [1, 2], "x": 2, "y": 1},
                {"matrix": [1, 3], "x": 3, "y": 1},
                {"matrix": [2, 0], "x": 0, "y": 2},
                {"matrix": [2, 1], "x": 1, "y": 2},
                {"matrix": [2, 2], "x": 2, "y": 2},
                {"matrix": [2, 3], "x": 3, "y": 2},
                {"matrix": [3, 0], "x": 0, "y": 3},
                {"matrix": [3, 2], "x": 1, "y": 3, "w": 2},
                {"matrix": [3, 3], "x": 3, "y": 3}
            ]
        }
    }
}

开启固件 via 功能

rules.mk 文件中增加一行 VIA_ENABLE = yes

新增 keymap

qmk new-keymap -kb chengshusss/littlepad/rev1,按照提示输入即可。

因为后续键值会在 via 中修改,此处只要按照硬件线路和数量修改 keymap/<your-keymap> 中的数组大小即可。

编译

qmk compile -kb chengshusss/littlepad/rev1 -km shortcut

一切顺利的话会在 qmk_firmware.build 目录下得到编译后的固件。

写入固件

连接小键盘到电脑,打开 qmk_toolbox,硬件重置小键盘(短接 rst 引脚和 gnd),qmk_toolbox 会有提示,此时刷入固件。

注意:

  1. 重启小键盘后需要尽快刷入固件,否则会小键盘会取消下载状态;
  2. 可能需要连续重置多次才会提示可以下载固件;

VIA

下载 via The-VIA Releases

因为新版本的 VIA 默认会读取已经有注册的键盘,需要自行打开键盘配置文件加载功能,因此:

  1. 需要在 Setting 页面打开 Show Design Tab 开关;
  2. 需要打开 Use V2 definitions(deprecated) 开关;
  3. 加载自定义的 Json 文件;

接下来就可以按照提示愉快地修改按键,还可以将一段操作录制为宏,分配给特定按键。

Trouble Shooting

qmk 固件配置

如果按键不触发,别忘了检查配置中的二极管方向 "diode_direction": "ROW2COL"

QMK ToolBox

下载 QMK ToolBox 并安装 Qmk Toolbox

Reset Hardware

arduino Pro Micro 右上角 第二脚和第三脚 分别是 GND 和 Reset,短接几秒钟即可(可能需要足够长的时间)。

References

  1. 一步步做个最适合自己的键盘固件:QMK 固件制作全解 | 少数派