
QMK 固件之 Atreyu 键盘完全指南Lily58 与 Sofle 的“非分体”混血儿编译、刷写与键位定制【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmwareAtreyu 是 QMK Firmware 仓库中一款基于 Atmel AVR 架构的客制化机械键盘固件支持项目其定位是“一款未分体unsplit的、Lily58 与 Sofle 结合体”键盘。本文以 keyboards/atreyu/readme.md 为骨架结合仓库内 info.json、rev1/keyboard.json、rev2/keyboard.json 以及默认键位图源码完整讲解该键盘的硬件特征、编译与刷写命令、Bootloader 三种进入方式、分层键位设计与源码级实现细节帮助你从零开始为 Atreyu 编译、烧录并定制属于自己的固件。一、Atreyu 键盘概述Lily58 与 Sofle 的混血设计根据官方 readmeAtreyu 被定义为An unsplit, modified version of a Lily58 having a baby with a Sofle keyboard——即一款移植并修改自 Lily58、同时又吸收了 Sofle 设计思路的**单块 PCBunsplit**键盘。它保留了这两款知名分体键盘的人体工学错落配列各排按键带阶梯式 y 坐标偏移但去掉了左右分体结构整体为一块完整的 PCB。键盘维护者MaintainerJesus Climent支持的硬件AtreyuKeyboard PCB、ProMicro 主控硬件资料PCB 与外壳数据由维护者在个人仓库中开源提供从仓库目录结构看Atreyu 存在两个硬件版本版本目录说明Rev1keyboards/atreyu/rev1/初版 PCBRev2keyboards/atreyu/rev2/修订版 PCB两个版本共享同一套键位图目录keymaps/与顶层 info.json各自通过keyboard.json描述硬件差异详见下文“硬件配置解析”一节。二、构建环境准备与编译命令1. 环境搭建编译前需要先搭建 QMK 构建环境。仓库中的官方文档提供了完整指引建议按以下顺序阅读初次接触 QMK 的完整新手教程Complete Newbs Guidedocs/newbs.md 与 docs/newbs_getting_started.md构建环境安装docs/getting_started_introduction.md 中关于工具链安装的部分Make 编译说明docs/getting_started_make_guide.md在完成环境安装后即可在仓库根目录执行编译。2. 编译默认键位Atreyu 的编译命令为make atreyu:default该命令会以keyboards/atreyu为键盘目标、keymaps/default为键位目标进行构建。default键位图的完整源码位于 keyboards/atreyu/keymaps/default/keymap.c同时包含 config.h 与 rules.mk。3. 编译并刷写刷写固件使用:flash目标make atreyu:default:flash执行后 QMK 会先完成编译再调用对应烧录工具将固件写入主控。由于 Atreyu 使用 ProMicro 主控、atmega32u4处理器与atmel-dfu引导程序见 rev1/keyboard.json 中的processor与bootloader字段刷写前请确认系统已正确安装对应驱动与烧录工具详细刷写方法可参考 docs/flashing.md。三、进入 Bootloader 的三种方式Atreyu 的 readme 明确指出有3 种进入 Bootloader引导程序的方法适用于刷写固件前的准备Bootmagic 复位Bootmagic reset按住矩阵中(0,0)位置对应的按键通常是左上角第一颗键或 Esc 键然后插入 USB 供电。该功能依赖顶层 info.json 中启用的bootmagic: true特性QMK 会在上电时检测该按键是否被按住。PCB 物理复位按钮短按 PCB 背面的复位按钮部分批次没有按钮而是需要短接标出的焊盘pads。键位中的复位键码如果当前键位图将某个按键映射为QK_BOOT直接按下该键即可进入引导程序。四、硬件配置解析Rev1 与 Rev2 的差异Atreyu 采用 QMK 的“数据驱动配置”data-driven configuration方式硬件描述全部集中在keyboard.json中无需手写config.h引脚定义。对比两个版本可清晰看到演进差异。1. USB 标识与固件版本字段Rev1Rev2keyboard_nameAtreyuAtreyumanufacturerHeyzeusHeyzeusVID0xFEED0xFEEDPID0x00010x0001device_version0.0.10.0.2两个版本使用相同的 VID/PID仅通过device_version0.0.1 → 0.0.2区分硬件修订。2. 矩阵与二极管方向两版本均为10 行 × 6 列的矩阵、COL2ROW二极管方向但列引脚有调整Rev1cols C6, D4, D0, D1, D2, D3rows D7, E6, B4, B5, F6, F7, B1, B3, B6, B2Rev2cols F4, F5, C6, D4, D2, D3rows 与 Rev1 完全一致3. 旋转编码器Rotary Encoder两版本在编码器配置上差异显著Rev1板载1 个编码器引脚F5/F4同时声明了 split 配置中的右侧编码器F4/F5左右对称为后续分体扩展预留。Rev2板载2 个编码器引脚分别为D5/B7与D5/C7。不过需要注意默认键位图的 rules.mk 中明确写入ENCODER_ENABLE no即默认键位未启用编码器功能若需要使用编码器需在自建键位图中启用该特性。4. 配列信息LAYOUT顶层 rev1/keyboard.json 中定义了名为LAYOUT的配列共 60 个键位每行 6 键 × 10 行含左右两半与拇指区。每个键位通过matrix: [row, col]与x/y坐标支持h高度扩展描述物理位置。以拇指区为例{matrix: [8, 4], x: 6, y: 4.25, h: 1.25}, {matrix: [9, 4], x: 9.5, y: 4.25, h: 1.25}这两颗 1.25 倍高的键位正是 Lily58/Sofle 风格的拇指簇设计。Rev2 的LAYOUT定义与 Rev1 完全一致仅矩阵引脚与编码器不同。五、默认键位图源码解析默认键位图 keymaps/default/keymap.c 完整展示了 Atreyu 的出厂键位逻辑也是学习如何为该键盘定制键位的范例。1. 层结构四层 自定义键码键位图定义了 4 个层和 4 个自定义键码enum custom_layers { _QWERTY, // 默认输入层 _LOWER, // 下层 _RAISE, // 上层 _ADJUST // 调整层LOWERRAISE 同时按下触发 }; enum custom_keycodes { QWERTY SAFE_RANGE, // 自定义键码从 SAFE_RANGE 之后开始 LWR, // LOWER 层开关 RSE, // RAISE 层开关 ADJ };_QWERTY层为标准的 QWERTY 输入布局字母区两侧各 6 键拇指区布置了LWR左侧、RSE右侧等。_RAISE层提供导航与符号如KC_HOME/KC_END、方向键KC_LEFT/KC_DOWN/KC_RGHT/KC_UP、KC_LCBR/KC_RCBR、KC_PIPE等且大量使用_______透明继承下层按键。_LOWER层提供 F 区功能键KC_F1~KC_F10、音量控制KC_VOLU/KC_VOLD、KC_CAPS以及TG(_RAISE)切换 RAISE 层和AG_TOGG切换 GUI/Cmd 与 Ctrl 位置。_ADJUST层当前全部填充XXXXXXX屏蔽与透明键作为预留的调整层。2. 三层层叠Tri-Layer逻辑LWR与RSE键通过process_record_user()实现按下/释放时的层开关并在同时按下两者时自动进入_ADJUST层case LWR: if (record-event.pressed) { layer_on(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false;update_tri_layer(_LOWER, _RAISE, _ADJUST)是 QMK 提供的标准函数当_LOWER与_RAISE同时处于开启状态时自动激活_ADJUST层释放任意一个则自动退出。3. 组合键技巧GUI Esc 输出反引号在process_record_user()中还有一个巧妙的处理当按住左 GUICmd/Win键时按下KC_ESC会改为输出反引号KC_GRVcase KC_ESC: if ((get_mods() MOD_BIT(KC_LGUI)) MOD_BIT(KC_LGUI)) { if (record-event.pressed) { register_code(KC_GRV); } else { unregister_code(KC_GRV); } return false; } return true;这模拟了 macOS 键盘上“GUI 键被占用后 Esc 位置改放 ”的常见习惯属于典型的 QMK 用户态按键重映射范例。4. 键位图级配置config.h 与 rules.mkkeymaps/default/config.h 覆盖了两项行为#ifdef TAPPING_TERM #undef TAPPING_TERM #define TAPPING_TERM 150 #endif #define RETRO_TAPPINGTAPPING_TERM 150将敲击判定窗口缩短为 150ms适用于快速键入场景默认通常为 200ms。RETRO_TAPPING启用“回溯敲击”当按键被按住超过 TAPPING_TERM 后才释放时仍会按“先敲击后按住”的逻辑处理改善 Mod-Tap 类按键的输入体验。而 rules.mk 中ENCODER_ENABLE no则表明默认键位未启用编码器。六、编码器底层实现rev1.c 与 rev2.c虽然默认键位未启用编码器但两个版本目录下的 rev1.c 与 rev2.c 均已实现键盘级_kb的编码器处理回调代码完全一致#ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index 1) { if (clockwise) { tap_code(KC_VOLU); // 编码器 1 顺时针 → 音量加 } else { tap_code(KC_VOLD); // 编码器 1 逆时针 → 音量减 } } if (index 0) { if (clockwise) { tap_code(MS_WHLU); // 编码器 0 顺时针 → 鼠标滚轮上 } else { tap_code(MS_WHLD); // 编码器 0 逆时针 → 鼠标滚轮下 } } return true; } #endif从源码结构可以推断该实现同时兼容 Rev11 个编码器与 Rev22 个编码器index 0的编码器控制鼠标滚轮配合顶层 info.json 中启用的mousekey特性index 1的编码器控制系统音量。回调首先调用encoder_update_user()这是 QMK 提供给用户态键位图的钩子如果用户在键位图中定义了同名函数并返回false键盘级处理会被跳过从而允许用户完全接管编码器行为。这是标准的 QMK 钩子分层机制。整体逻辑由ENCODER_ENABLE宏保护只有在键位图/规则文件中启用编码器特性时才会编译进固件。七、顶层特性配置info.jsonAtreyu 顶层的 info.json 声明了固件默认编译进哪些 QMK 特性{ features: { bootmagic: true, mousekey: true, extrakey: true, nkro: true } }特性作用bootmagic支持上电按住 (0,0) 键进入引导程序对应上文 Bootloader 方式一mousekey启用鼠标键功能供编码器滚轮MS_WHLU/MS_WHLD与鼠标键键码使用extrakey启用系统/媒体键如音量KC_VOLU/KC_VOLD供编码器与_LOWER层使用nkro启用 N 键无冲突N-Key Rollover支持多键同时按下这四个特性与默认键位图及编码器实现形成了完整的依赖闭环extrakey与mousekey支撑了 rev1/rev2.c 中的音量/滚轮键码bootmagic支撑了刷写流程中的 Bootmagic 复位方式。八、从零定制 Atreyu 键位图在了解上述源码结构后你可以基于仓库现有材料快速创建自己的键位图复制默认键位目录以 keyboards/atreyu/keymaps/default/ 为模板在keymaps/下新建一个命名字目录如keymaps/mykeymap/包含keymap.c、config.h、rules.mk。修改键位层参照 keymap.c 中的LAYOUT(...)宏填充自己的按键映射可用_______透明键继承下层用XXXXXXX屏蔽按键。调整行为参数在config.h中按需覆盖TAPPING_TERM、启用RETRO_TAPPING等。启用编码器如需使用编码器在rules.mk中设置ENCODER_ENABLE yes可在keymap.c中实现encoder_update_user()覆盖键盘级的默认音量/滚轮逻辑。编译与刷写执行make atreyu:mykeymap编译make atreyu:mykeymap:flash刷写若需更换引导方式可参考上文三种 Bootloader 进入方式。九、总结Atreyu 作为一款 Lily58 与 Sofle 的“非分体”混血键盘其 QMK 支持完整展示了现代 QMK 数据驱动配置的典型形态硬件差异通过 rev1/keyboard.json 与 rev2/keyboard.json 描述、特性开关集中在 info.json、键位逻辑沉淀在 keymaps/default/keymap.c而编码器这类硬件功能则在 rev1.c / rev2.c 中以标准_kb/_user钩子分层实现。掌握make atreyu:default:flash的编译刷写流程、三种 Bootloader 进入方式以及四层键位与 tri-layer 逻辑即可完整驾驭这款键盘的固件定制。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考