refactor(core): Adjust our approach for upstream Zephyr boards

Move to using proper HWMv2 board extensions
https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#board-extensions

for extending upstream Zephyr boards for use with ZMK. With this change,
using upstream Zephyr board IDs directly, e.g. `seeeduino_xiao` will be
stock versions as found upstream. To use a board variant that is tuned
for ZMK use, use the `zmk` variant, e.g. `seeeduino_xiao//zmk` which is
shorthand for `seeeduino_xiao/samd21g18a/zmk`.
This commit is contained in:
Peter Johanson 2025-12-15 15:01:01 -07:00
parent ac7f75b859
commit 7db083232b
87 changed files with 537 additions and 211 deletions

View File

@ -277,6 +277,7 @@ jobs:
);
} else {
console.error("Board without keys or interconnect");
return [];
}
break;
case "shield":

View File

@ -1,5 +1,5 @@
file_format: "1"
id: adafruit_kb2040
id: adafruit_kb2040//zmk
name: Adafruit KB2040
type: board
arch: arm

View File

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/adafruit/kb2040/adafruit_kb2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };

View File

@ -0,0 +1,23 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
# Enable reset by default
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,5 @@
board:
extend: adafruit_kb2040
variants:
- name: zmk
qualifier: rp2040

View File

@ -1,5 +1,5 @@
file_format: "1"
id: adafruit_qt_py_rp2040
id: adafruit_qt_py_rp2040//zmk
name: Adafruit QT Py RP2040
type: board
arch: arm

View File

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&xiao_serial { status = "disabled"; };

View File

@ -0,0 +1,23 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
# Enable reset by default
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,5 @@
board:
extend: adafruit_qt_py_rp2040
variants:
- name: zmk
qualifier: rp2040

View File

@ -1,9 +0,0 @@
file_format: "1"
id: boardsource_blok
name: BoardSource blok
type: board
arch: arm
outputs:
- usb
url: https://peg.software/docs/blok
exposes: [pro_micro]

View File

@ -0,0 +1,5 @@
board:
extend: boardsource_blok
variants:
- name: zmk
qualifier: rp2040

View File

@ -0,0 +1,9 @@
file_format: "1"
id: boardsource_blok//zmk
name: Boardsource Blok
type: board
arch: arm
outputs:
- usb
url: https://boardsource.xyz/products/blok-rp2040-keyboard-controller
exposes: [pro_micro]

View File

@ -0,0 +1,23 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/boardsource/blok/boardsource_blok.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };
&code_partition {
reg = <0x100 (DT_SIZE_M(16) - 0x100 - DT_SIZE_K(512))>;
};
&flash0 {
partitions {
storage_partition: partition@f80000 {
reg = <0xf80000 DT_SIZE_K(512)>;
read-only;
};
};
};

View File

@ -0,0 +1,30 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,9 +0,0 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };

View File

@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,32 +0,0 @@
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/kscan_mock.h>
/ {
chosen {
zephyr,console = &uart0;
zmk,kscan = &kscan;
};
kscan: native_posix_64_kscan_mock {
compatible = "zmk,kscan-mock";
rows = <2>;
columns = <2>;
exit-after;
};
uart0: uart {
status = "okay";
compatible = "zephyr,native-posix-uart";
/* Dummy current-speed entry to comply with serial
* DTS binding
*/
current-speed = <0>;
};
};
&sdl_dc {
width = <128>;
height = <32>;
};

View File

@ -1,12 +0,0 @@
# Copyright (c) 2025 The ZMK Contributors
# SPDX-License-Identifier: MIT
CONFIG_ZMK_BLE=y
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y

View File

@ -1,4 +0,0 @@
CONFIG_ZMK_BLE=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y

View File

@ -1,6 +0,0 @@
CONFIG_ZMK_DISPLAY=y
CONFIG_LV_FONT_UNSCII_8=n
CONFIG_ZMK_USB=y
CONFIG_I2C=y
CONFIG_I2C_DW=y
CONFIG_LV_Z_VDB_SIZE=50

View File

@ -1,7 +0,0 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
&xiao_serial { status = "disabled"; };

View File

@ -1,16 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,5 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y

View File

@ -1,15 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,15 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,11 @@
config BOARD_NATIVE_SIM
bool
select POSIX_ARCH_CONSOLE
select NATIVE_LIBRARY
select NATIVE_POSIX_TIMER
select 64BIT if BOARD_NATIVE_SIM_NATIVE_ZMK_TEST_MOCK || BOARD_NATIVE_SIM_NATIVE_ZMK_DISPLAY_TESTING
imply BOARD_NATIVE_POSIX if NATIVE_SIM_NATIVE_POSIX_COMPAT
help
Native simulator (Single Core)
Will produce a console Linux process which can be executed natively.

View File

@ -0,0 +1,7 @@
board:
extend: native_sim
variants:
- name: zmk_display_testing
qualifier: native
- name: zmk_test_mock
qualifier: native

View File

@ -0,0 +1,20 @@
#include <dt-bindings/zmk/keys.h>
#include <behaviors.dtsi>
/ {
keymap {
compatible = "zmk,keymap";
default_layer {
bindings = <
&none &mo 1
&kp A &none>;
};
lower_layer {
bindings = <
&none &trans
&none &kp A>;
};
};
};

View File

@ -0,0 +1,12 @@
# SPDX-License-Identifier: MIT
CONFIG_ZMK_DISPLAY=y
CONFIG_CONSOLE=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=1000000
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y
CONFIG_DEBUG=y
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000

View File

@ -1,6 +1,8 @@
CONFIG_GPIO=n
# Enable to have the native posix build expose USBIP device(s)
# CONFIG_ZMK_USB=y
# SPDX-License-Identifier: MIT
CONFIG_CONSOLE=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=1000000
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y

View File

@ -0,0 +1,13 @@
/* SPDX-License-Identifier: MIT */
#include "native_sim_zmk_test_mock.dts"
&kscan {
events = <>;
/delete-property/ exit-after;
};
&sdl_dc {
width = <128>;
height = <128>;
};

View File

@ -1,10 +1,10 @@
#include <../boards/native/native_sim/native_sim.dts>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/kscan_mock.h>
/ {
chosen {
zephyr,console = &uart0;
zmk,kscan = &kscan;
};
@ -15,13 +15,5 @@
columns = <2>;
exit-after;
};
uart0: uart {
status = "okay";
compatible = "zephyr,native-posix-uart";
/* Dummy current-speed entry to comply with serial
* DTS binding
*/
current-speed = <0>;
};
};

View File

@ -0,0 +1,5 @@
board:
extend: nrf52_bsim
variants:
- name: zmk_test_mock
qualifier: native

View File

@ -0,0 +1,10 @@
# Copyright (c) 2026 The ZMK Contributors
# SPDX-License-Identifier: MIT
CONFIG_CONSOLE=y
CONFIG_NO_OPTIMIZATIONS=y
CONFIG_ZMK_BLE=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y

View File

@ -1,3 +1,5 @@
#include <../boards/native/nrf_bsim/nrf52_bsim.dts>
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/kscan_mock.h>

View File

@ -0,0 +1,3 @@
config BOARD_NRF52840DK
select SOC_NRF52840_QIAA if BOARD_NRF52840DK_NRF52840_ZMK

View File

@ -0,0 +1,5 @@
board:
extend: nrf52840dk
variants:
- name: zmk
qualifier: nrf52840

View File

@ -1,5 +1,5 @@
file_format: "1"
id: nrf52840dk/nrf52840
id: nrf52840dk/nrf52840/zmk
name: Nordic nRF52840 DK
type: board
arch: arm

View File

@ -0,0 +1,8 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts>

View File

@ -1,9 +1,20 @@
# Copyright (c) 2022 The ZMK Contributors
# SPDX-License-Identifier: MIT
# Enable MPU
CONFIG_ARM_MPU=y
# Enable hardware stack protection
CONFIG_HW_STACK_PROTECTION=y
# enable GPIO
CONFIG_GPIO=y
# USB and BLE HID
CONFIG_ZMK_USB=y
CONFIG_ZMK_BLE=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y

View File

@ -0,0 +1,5 @@
board:
extend: nrf52840dongle
variants:
- name: zmk
qualifier: nrf52840

View File

@ -0,0 +1,8 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/nordic/nrf52840dongle/nrf52840dongle_nrf52840.dts>

View File

@ -0,0 +1,29 @@
# Copyright (c) 2026 The ZMK Contributors
# SPDX-License-Identifier: MIT
# Enable MPU
CONFIG_ARM_MPU=y
# Enable hardware stack protection
CONFIG_HW_STACK_PROTECTION=y
# enable GPIO
CONFIG_GPIO=y
# Board Kconfig.defconfig enables USB CDC ACM and should disable USB remote
# wakeup by default. It needs to be disabled here, because the USB nrfx
# driver always overwrites option from Kconfig mentioned above with the
# imply from CONFIG_USB_NRFX.
CONFIG_USB_DEVICE_REMOTE_WAKEUP=n
# HID Transports
CONFIG_ZMK_BLE=y
CONFIG_ZMK_USB=y
# Settings options
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y

View File

@ -5,7 +5,7 @@
# * single overlay,
# * or per board/shield.
list(APPEND KEYMAP_DIRS ${BOARD_DIR})
list(APPEND KEYMAP_DIRS "${BOARD_DIRECTORIES}")
get_filename_component(BOARD_DIR_NAME ${BOARD_DIR} NAME)
# Give a shield like `kyria_rev2_left` we want to use `kyria_rev2` and `kyria` as candidate names for
# overlay/conf/keymap files.
@ -81,7 +81,7 @@ endif()
if(NOT KEYMAP_FILE)
message("${NORMALIZED_BOARD_TARGET} for ${NORMALIZED_BOARD_QUALIFIERS} for ${BOARD} with version ${BOARD_REVISION}")
foreach(keymap_dir ${KEYMAP_DIRS})
foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} "${BOARD}_${BOARD_REVISION_STRING}" ${BOARD} ${BOARD_DIR_NAME})
foreach(keymap_prefix ${shield_candidate_names} ${SHIELD_AS_LIST} ${SHIELD_DIR} "${NORMALIZED_BOARD_TARGET}" "${BOARD}_${BOARD_REVISION_STRING}" ${BOARD} ${BOARD_DIR_NAME})
if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap)
set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file")
message(STATUS "Using keymap file: ${KEYMAP_FILE}")

View File

@ -0,0 +1,5 @@
board:
extend: rpi_pico
variants:
- name: zmk
qualifier: rp2040

View File

@ -0,0 +1,8 @@
file_format: "1"
id: rpi_pico//zmk
name: Raspberry Pi Pico
type: board
arch: arm
outputs:
- usb
url: https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-1-family

View File

@ -1,3 +1,10 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/raspberrypi/rpi_pico/rpi_pico.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&uart0 { status = "disabled"; };

View File

@ -0,0 +1,27 @@
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
# Core deps
CONFIG_RESET=y
CONFIG_CLOCK_CONTROL=y
CONFIG_GPIO=y
# Build Output
CONFIG_USE_DT_CODE_PARTITION=y
CONFIG_BUILD_OUTPUT_UF2=y
CONFIG_BUILD_OUTPUT_HEX=y
# USB HID
CONFIG_ZMK_USB=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,5 @@
board:
extend: seeeduino_xiao
variants:
- name: zmk
qualifier: samd21g18a

View File

@ -1,5 +1,5 @@
file_format: "1"
id: seeeduino_xiao
id: seeeduino_xiao//zmk
name: Seeed Studio XIAO SAMD21
type: board
arch: arm

View File

@ -0,0 +1,8 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/seeed/seeeduino_xiao/seeeduino_xiao.dts>

View File

@ -0,0 +1,11 @@
# XTAL setup
CONFIG_SOC_ATMEL_SAMD_XOSC32K=y
CONFIG_SOC_ATMEL_SAMD_XOSC32K_AS_MAIN=y
# Bootloader Setup
CONFIG_BUILD_OUTPUT_UF2=y
CONFIG_BOOTLOADER_BOSSA=y
CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2=y
# ZMK USB Transport
CONFIG_ZMK_USB=y

View File

@ -0,0 +1,5 @@
board:
extend: xiao_ble
variants:
- name: zmk
qualifier: nrf52840

View File

@ -1,5 +1,5 @@
file_format: "1"
id: xiao_ble
id: xiao_ble//zmk
name: Seeed Studio XIAO nRF52840
type: board
arch: arm

View File

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/seeed/xiao_ble/xiao_ble.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/* Add an sd_partition label for compatibility with the nosd snippet */

View File

@ -1,12 +1,21 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
# Enable MPU
CONFIG_ARM_MPU=y
# Enable hardware stack protection
CONFIG_HW_STACK_PROTECTION=y
# Enable GPIO
CONFIG_GPIO=y
CONFIG_ZMK_USB=y
CONFIG_ZMK_BLE=y
# Build UF2 by default, supported by the Adafruit nRF52 Bootloader
CONFIG_BUILD_OUTPUT_UF2=y
CONFIG_USE_DT_CODE_PARTITION=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
@ -14,6 +23,7 @@ CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,5 @@
board:
extend: xiao_rp2040
variants:
- name: zmk
qualifier: rp2040

View File

@ -1,5 +1,5 @@
file_format: "1"
id: xiao_rp2040
id: xiao_rp2040//zmk
name: Seeed Studio XIAO RP2040
type: board
arch: arm

View File

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/seeed/xiao_rp2040/xiao_rp2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&xiao_serial { status = "disabled"; };

View File

@ -0,0 +1,30 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# Enable USB HID transport by default
CONFIG_ZMK_USB=y
# Settings Enablement
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -0,0 +1,5 @@
board:
extend: sparkfun_pro_micro_rp2040
variants:
- name: zmk
qualifier: rp2040

View File

@ -1,5 +1,5 @@
file_format: "1"
id: sparkfun_pro_micro_rp2040
id: sparkfun_pro_micro_rp2040//zmk
name: SparkFun Pro Micro RP2040
type: board
arch: arm

View File

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/sparkfun/pro_micro_rp2040/sparkfun_pro_micro_rp2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };

View File

@ -0,0 +1,30 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@ -1,5 +1,5 @@
file_format: "1"
id: blackpill_f401cc
id: blackpill_f401cc//zmk
name: BlackPill F401CC
type: board
arch: arm

View File

@ -1,9 +1,10 @@
/*
* Copyright (c) 2022 The ZMK Contributors
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/weact/blackpill_f401cc/blackpill_f401cc.dts>
/ {
blackpill: connector {

View File

@ -0,0 +1,17 @@
# SPDX-License-Identifier: MIT
# Enable MPU
CONFIG_ARM_MPU=y
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y
# Enable GPIO
CONFIG_GPIO=y
# USB HID
CONFIG_ZMK_USB=y
# Defaults for matrix scanning to avoid interrupt issues
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -0,0 +1,5 @@
board:
extend: blackpill_f401cc
variants:
- name: zmk
qualifier: stm32f401xc

View File

@ -1,5 +1,5 @@
file_format: "1"
id: blackpill_f401ce
id: blackpill_f401ce//zmk
name: BlackPill F401CE
type: board
arch: arm

View File

@ -1,9 +1,10 @@
/*
* Copyright (c) 2022 The ZMK Contributors
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/weact/blackpill_f401ce/blackpill_f401ce.dts>
/ {
blackpill: connector {

View File

@ -0,0 +1,17 @@
# SPDX-License-Identifier: MIT
# Enable MPU
CONFIG_ARM_MPU=y
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y
# Enable GPIO
CONFIG_GPIO=y
# USB HID
CONFIG_ZMK_USB=y
# Defaults for matrix scanning to avoid interrupt issues
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -0,0 +1,5 @@
board:
extend: blackpill_f401ce
variants:
- name: zmk
qualifier: stm32f401xe

View File

@ -1,5 +1,5 @@
file_format: "1"
id: blackpill_f411ce
id: blackpill_f411ce//zmk
name: BlackPill F411CE
type: board
arch: arm

View File

@ -1,9 +1,11 @@
/*
* Copyright (c) 2024 The ZMK Contributors
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/weact/blackpill_f411ce/blackpill_f411ce.dts>
/ {
blackpill: connector {
compatible = "blackpill";

View File

@ -0,0 +1,17 @@
# SPDX-License-Identifier: MIT
# Enable MPU
CONFIG_ARM_MPU=y
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y
# Enable GPIO
CONFIG_GPIO=y
# USB HID
CONFIG_ZMK_USB=y
# Defaults for matrix scanning to avoid interrupt issues
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@ -0,0 +1,5 @@
board:
extend: blackpill_f411ce
variants:
- name: zmk
qualifier: stm32f411xe

View File

@ -11,7 +11,7 @@ shield:
include:
- board: bdn9
- board: nice60
- board: xiao_ble
- board: xiao_ble//zmk
shield: hummingbird
- board: nrf52840_m2
shield: m60
@ -26,7 +26,7 @@ include:
shield: kyria_left
cmake-args: "-DCONFIG_ZMK_POINTING=y"
nickname: "mouse"
- board: sparkfun_pro_micro_rp2040
- board: sparkfun_pro_micro_rp2040//zmk
shield: reviung41
cmake-args: "-DSNIPPET='zmk-usb-logging'"
- board: nice_nano
@ -59,12 +59,12 @@ include:
snippet: studio-rpc-usb-uart
cmake-args: "-DCONFIG_ZMK_STUDIO=y"
nickname: "split-right-studio"
- board: sparkfun_pro_micro_rp2040
- board: sparkfun_pro_micro_rp2040//zmk
shield: reviung41
snippet: studio-rpc-usb-uart
cmake-args: "-DCONFIG_ZMK_STUDIO=y"
nickname: "rp2040-studio"
- board: seeeduino_xiao
- board: seeeduino_xiao//zmk
shield: hummingbird
snippet: studio-rpc-usb-uart
cmake-args: "-DCONFIG_ZMK_STUDIO=y"

View File

@ -61,7 +61,7 @@ echo "Running $testcase:"
shopt -s nullglob
for file in $(pwd)/$testcase/peripheral*.overlay ; do
pn=$(basename -s .overlay ${file})
west build -d build/${testcase%%/}_${pn}/ -b nrf52_bsim -- -DZMK_CONFIG="$(pwd)/$testcase" -DEXTRA_DTC_OVERLAY_FILE="${file}" > /dev/null 2>&1
west build -d build/${testcase%%/}_${pn}/ -b nrf52_bsim//zmk_test_mock -- -DZMK_CONFIG="$(pwd)/$testcase" -DEXTRA_DTC_OVERLAY_FILE="${file}" > /dev/null 2>&1
if [ $? -gt 0 ]; then
echo "FAILED: $testcase peripheral ${pn} did not build" | tee -a ./build/tests/pass-fail.log
@ -76,7 +76,7 @@ if ls $(pwd)/$testcase/peripheral*.overlay >/dev/null 2>&1; then
extra_cmake_args="-DCONFIG_ZMK_SPLIT_ROLE_CENTRAL=y"
fi
west build -d build/$testcase -b nrf52_bsim -- -DZMK_CONFIG="$(pwd)/$testcase" ${extra_cmake_args} > /dev/null 2>&1
west build -d build/$testcase -b nrf52_bsim//zmk_test_mock -- -DZMK_CONFIG="$(pwd)/$testcase" ${extra_cmake_args} > /dev/null 2>&1
if [ $? -gt 0 ]; then
echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log
exit 1

View File

@ -38,7 +38,7 @@ testcase=$(realpath $path | sed -n -e "s|.*/tests/||p")
echo "Running $testcase:"
build_cmd="west build ${ZMK_SRC_DIR:+-s $ZMK_SRC_DIR} -d ${ZMK_BUILD_DIR}/tests/$testcase \
-b native_sim/native/64 -p -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(realpath $path)" \
-b native_sim//zmk_test_mock -p -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(realpath $path)" \
${ZMK_EXTRA_MODULES:+-DZMK_EXTRA_MODULES="$(realpath ${ZMK_EXTRA_MODULES})"}"
# Add extra cmake arguments from file if it exists