Skip to content

feat: use rmk-boot.x linker script for DFU partition layout - #1018

Merged
HaoboGu merged 1 commit into
rmk-rs:mainfrom
Schievel1:auto-flash-layout
Aug 14, 2026
Merged

feat: use rmk-boot.x linker script for DFU partition layout#1018
HaoboGu merged 1 commit into
rmk-rs:mainfrom
Schievel1:auto-flash-layout

Conversation

@Schievel1

@Schievel1 Schievel1 commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

This PR should simplify the process of setting the right flash layout when using rmk-boot.
The calculation formula is still the same (flash size - what the bootloader takes up - storage = rest. ACTIVE = rest/2 - 1 page, DFU = rest/2 + 1 page) and rmk-boot's build.rs creates a memory.x accordingly. Additionally it should create a rmk-memory.x with the matching flash layout of the (RMK-)application + a few linker symbols that the application can use to initialize the flash and its partitions.
e.g. a rmk-memory.x looks like this:

MEMORY {
  FLASH : ORIGIN = 0x10007000, LENGTH = 966656   /* absolute XIP, where your firmware lives */
  RAM   : ORIGIN = 0x20000000, LENGTH = 256K
}

__rmk_boot_state_offset   = 0x6000;   /* flash-relative, consumed at runtime */
__rmk_boot_state_size     = 0x1000;
__rmk_boot_dfu_offset     = 0xF3000;
__rmk_boot_dfu_size       = 0xED000;
__rmk_boot_storage_offset = 0x1E0000;

rmk-boot not only creates that rmk-memory.x at build, it also provides matching rmk-memory.x-files for its pre-built variants. (rmk-rp2040-16mb-memory.x for example)

The users can copy those files into their project directory and rename them to memory.x.
The users code can then use rmk::dfu::init_flash_from_linkerscript() instead of rmk::dfu::init_flash() to partition the flash without giving any offsets and sizes. For use_config this happens automatically.

User who build their own bootloader with embassy-boots swap feature can change the symbols in memory.x accordingly.

Related PRs:
rmk-rs/rmk-boot#2

@HaoboGu

HaoboGu commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

The symbol existence is checked in rmk when bootloader feature like rmk-boot is enabled. This means that if rmk-boot is defined, the user should either define their own __rmk_boot* symbols in their linkerscript or use rmk-boot.x.

And I think it should not be overwritten by keyboard.toml. Let user define their layout in their linker script is better imo, because I think 99% users won't do it. That makes the configuration cleaner.

The last point from me is the storage size, default 128KB is a little bit more. For example, nRF52833 has only 512KB flash(I just realized that it's impossible to use rmk-boot on it). I want it to be tunable, or default to 32KB.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Size Report

Example main PR Diff .text .data .bss
use_config/nrf52832_ble 398.1 KiB 398.1 KiB +0.00% 0 0 0
use_config/nrf52840_ble 440.7 KiB 440.7 KiB +0.00% ⬇️ -8 0 0
use_config/nrf52840_ble_split (central) 502.1 KiB 502.1 KiB +0.00% ⬇️ -4 0 0
use_config/nrf52840_ble_split (peripheral) 317.5 KiB 317.5 KiB +0.00% 0 0 0
use_config/pi_pico_w_ble 673.3 KiB 673.3 KiB +0.00% ⬇️ -8 0 0
use_config/rp2040 146.0 KiB 146.0 KiB +0.00% 0 0 0
use_config/rp2040_split (central) 159.6 KiB 159.6 KiB +0.00% ⬆️ +8 0 0
use_config/rp2040_split (peripheral) 27.9 KiB 27.9 KiB +0.00% 0 0 0
use_config/stm32f1 62.7 KiB 62.7 KiB +0.00% 0 0 0
use_config/stm32h7 100.8 KiB 100.8 KiB +0.00% 0 0 0
use_rust/nrf52832_ble 386.0 KiB 386.0 KiB +0.00% 0 0 0
use_rust/nrf52840_ble 435.6 KiB 435.6 KiB +0.00% ⬇️ -4 0 0
use_rust/nrf52840_ble_split (central) 505.6 KiB 505.6 KiB +0.00% 0 0 0
use_rust/nrf52840_ble_split (peripheral) 315.3 KiB 315.3 KiB +0.00% 0 0 0
use_rust/pi_pico_w_ble 672.7 KiB 672.7 KiB +0.00% ⬇️ -8 0 0
use_rust/rp2040 145.5 KiB 145.5 KiB +0.00% ⬇️ -4 0 0
use_rust/rp2040_split (central) 158.3 KiB 158.3 KiB +0.00% ⬆️ +4 0 0
use_rust/rp2040_split (peripheral) 28.2 KiB 28.2 KiB +0.00% 0 0 0
use_rust/stm32f1 61.9 KiB 61.9 KiB +0.00% ⬇️ -4 0 0
use_rust/stm32h7 119.6 KiB 119.6 KiB +0.00% ⬆️ +8 0 0
use_config/nrf52832_ble — 398.1 KiB → 398.1 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 365360	   8620	  33672	 407652	  63864	rmk-nrf52832

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 365360	   8620	  33672	 407652	  63864	rmk-nrf52832

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +30  [ = ]       0    .strtab
  +7.7%      +4  [ = ]       0    [Unmapped]
  -0.0%     -10  [ = ]       0    .debug_line
  -0.0%     -40  [ = ]       0    .debug_str
  -0.0%     -72  [ = ]       0    .debug_info
  -0.0%     -88  [ = ]       0    TOTAL
use_config/nrf52840_ble — 440.7 KiB → 440.7 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 398948	   8628	  43704	 451280	  6e2d0	rmk-nrf52840

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 398956	   8628	  43704	 451288	  6e2d8	rmk-nrf52840

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +52  [ = ]       0    .debug_str
   +17%      +8  [ = ]       0    [Unmapped]
  -0.0%      -8  -0.0%      -8    .text
  -0.0%     -13  [ = ]       0    .debug_loc
  -0.0%     -27  [ = ]       0    .strtab
  -0.0%    -144  [ = ]       0    .debug_info
  -0.1%    -308  [ = ]       0    .debug_line
  -0.0%    -440  -0.0%      -8    TOTAL
use_config/nrf52840_ble_split (central) — 502.1 KiB → 502.1 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 456400	   8684	  49040	 514124	  7d84c	central

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 456404	   8684	  49040	 514128	  7d850	central

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%    +244  [ = ]       0    .debug_str
   +19%      +9  [ = ]       0    [Unmapped]
  +0.0%      +7  [ = ]       0    .debug_loc
  -0.0%      -4  -0.0%      -4    .text
  -0.0%      -9  [ = ]       0    .strtab
  -0.0%    -138  [ = ]       0    .debug_info
  -0.1%    -217  [ = ]       0    .debug_line
  -0.0%    -108  -0.0%      -4    TOTAL
use_config/nrf52840_ble_split (peripheral) — 317.5 KiB → 317.5 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 291464	   8500	  25184	 325148	  4f61c	peripheral

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 291464	   8500	  25184	 325148	  4f61c	peripheral

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%      +8  [ = ]       0    .debug_loc
  +0.0%      +8  [ = ]       0    TOTAL
use_config/pi_pico_w_ble — 673.3 KiB → 673.3 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 635688	      0	  53736	 689424	  a8510	rmk-pi-pico-w

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 635696	      0	  53736	 689432	  a8518	rmk-pi-pico-w

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%    +215  [ = ]       0    .debug_info
  +0.0%     +29  [ = ]       0    .debug_str
  +0.0%     +28  [ = ]       0    .debug_line
  +0.0%     +19  [ = ]       0    .strtab
   +17%     +11  [ = ]       0    [Unmapped]
  -0.0%      -2  [ = ]       0    .debug_loc
  -0.0%      -8  -0.0%      -8    .text
  +0.0%    +292  -0.0%      -8    TOTAL
use_config/rp2040 — 146.0 KiB → 146.0 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 135656	      0	  13884	 149540	  24824	rmk-rp2040

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 135656	      0	  13884	 149540	  24824	rmk-rp2040

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.2%    +506  [ = ]       0    .debug_loc
  +0.0%     +16  [ = ]       0    .debug_info
  +5.1%      +2  [ = ]       0    [Unmapped]
  -0.0%     -20  [ = ]       0    .debug_line
  +0.0%    +504  [ = ]       0    TOTAL
use_config/rp2040_split (central) — 159.6 KiB → 159.6 KiB (+0.00% ⬆️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 148632	      0	  14836	 163468	  27e8c	central

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 148624	      0	  14836	 163460	  27e84	central

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%      +8  +0.0%      +8    .text
  -0.0%      -2  [ = ]       0    .debug_loc
 -10.8%      -7  [ = ]       0    [Unmapped]
  -0.0%      -9  [ = ]       0    .strtab
  -0.0%     -77  [ = ]       0    .debug_info
  -0.1%    -112  [ = ]       0    .debug_line
  -0.0%    -141  [ = ]       0    .debug_str
  -0.0%    -340  +0.0%      +8    TOTAL
use_config/rp2040_split (peripheral) — 27.9 KiB → 27.9 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
  25696	     60	   2804	  28560	   6f90	peripheral

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
  25696	     60	   2804	  28560	   6f90	peripheral

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.1%    +714  [ = ]       0    .debug_str
  +0.2%     +39  [ = ]       0    .strtab
  -2.0%      -1  [ = ]       0    [Unmapped]
  +0.1%    +752  [ = ]       0    TOTAL
use_config/stm32f1 — 62.7 KiB → 62.7 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
  57812	     28	   6344	  64184	   fab8	rmk-stm32f1

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
  57812	     28	   6344	  64184	   fab8	rmk-stm32f1

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.1% +1.11Ki  [ = ]       0    .debug_str
  +0.4%    +171  [ = ]       0    .strtab
  -1.6%      -1  [ = ]       0    [Unmapped]
  +0.1% +1.27Ki  [ = ]       0    TOTAL
use_config/stm32h7 — 100.8 KiB → 100.8 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
  94804	    264	   8104	 103172	  19304	rmk-stm32h7

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
  94804	    264	   8104	 103172	  19304	rmk-stm32h7

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%      +1  [ = ]       0    .debug_str
  -1.9%      -1  [ = ]       0    [Unmapped]
  [ = ]       0  [ = ]       0    TOTAL
use_rust/nrf52832_ble — 386.0 KiB → 386.0 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 352992	   8620	  33608	 395220	  607d4	rmk-nrf52832

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 352992	   8620	  33608	 395220	  607d4	rmk-nrf52832

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +12  [ = ]       0    .debug_loc
  +0.0%     +12  [ = ]       0    TOTAL
use_rust/nrf52840_ble — 435.6 KiB → 435.6 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 396460	   8628	  40944	 446032	  6ce50	rmk-nrf52840

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 396464	   8628	  40944	 446036	  6ce54	rmk-nrf52840

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +30  [ = ]       0    .strtab
  +0.0%      +2  [ = ]       0    .debug_loc
  -2.1%      -1  [ = ]       0    [Unmapped]
  -0.0%      -3  [ = ]       0    .debug_line
  -0.0%      -4  -0.0%      -4    .text
  -0.0%     -40  [ = ]       0    .debug_str
  -0.0%     -72  [ = ]       0    .debug_info
  -0.0%     -88  -0.0%      -4    TOTAL
use_rust/nrf52840_ble_split (central) — 505.6 KiB → 505.6 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 458064	   8684	  51008	 517756	  7e67c	central

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 458064	   8684	  51008	 517756	  7e67c	central

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [ = ]       0  [ = ]       0    TOTAL
use_rust/nrf52840_ble_split (peripheral) — 315.3 KiB → 315.3 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 289448	   8500	  24952	 322900	  4ed54	peripheral

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 289448	   8500	  24952	 322900	  4ed54	peripheral

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [ = ]       0  [ = ]       0    TOTAL
use_rust/pi_pico_w_ble — 672.7 KiB → 672.7 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 635464	      0	  53416	 688880	  a82f0	rmk-pi-pico-w

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 635472	      0	  53416	 688888	  a82f8	rmk-pi-pico-w

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
   +12%      +8  [ = ]       0    [Unmapped]
  -0.0%      -8  -0.0%      -8    .text
  [ = ]       0  -0.0%      -8    TOTAL
use_rust/rp2040 — 145.5 KiB → 145.5 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 135276	      0	  13724	 149000	  24608	rmk-rp2040

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 135280	      0	  13724	 149004	  2460c	rmk-rp2040

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.1%     +94  [ = ]       0    .debug_line
  +0.0%     +29  [ = ]       0    .debug_str
  -0.0%      -4  -0.0%      -4    .text
  -0.0%      -6  [ = ]       0    .debug_info
  -0.0%      -7  [ = ]       0    .strtab
  -0.0%     -10  [ = ]       0    .debug_loc
 -42.4%     -28  [ = ]       0    [Unmapped]
  +0.0%     +68  -0.0%      -4    TOTAL
use_rust/rp2040_split (central) — 158.3 KiB → 158.3 KiB (+0.00% ⬆️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 147560	      0	  14580	 162140	  2795c	central

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 147556	      0	  14580	 162136	  27958	central

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%      +4  +0.0%      +4    .text
  +0.0%      +2  [ = ]       0    .debug_loc
  -4.7%      -2  [ = ]       0    [Unmapped]
  -0.0%      -9  [ = ]       0    .strtab
  -0.0%     -77  [ = ]       0    .debug_info
  -0.1%    -105  [ = ]       0    .debug_line
  -0.0%    -141  [ = ]       0    .debug_str
  -0.0%    -328  +0.0%      +4    TOTAL
use_rust/rp2040_split (peripheral) — 28.2 KiB → 28.2 KiB (+0.00%)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
  25796	     60	   3068	  28924	   70fc	peripheral

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
  25796	     60	   3068	  28924	   70fc	peripheral

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  [ = ]       0  [ = ]       0    TOTAL
use_rust/stm32f1 — 61.9 KiB → 61.9 KiB (+0.00% ⬇️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
  57128	     28	   6272	  63428	   f7c4	rmk-stm32f1

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
  57132	     28	   6272	  63432	   f7c8	rmk-stm32f1

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +63  [ = ]       0    .debug_str
  +0.0%     +52  [ = ]       0    .debug_info
  +0.0%      +9  [ = ]       0    .strtab
  -0.0%      -4  -0.0%      -4    .text
  +0.0%    +120  -0.0%      -4    TOTAL
use_rust/stm32h7 — 119.6 KiB → 119.6 KiB (+0.00% ⬆️)

cargo size (PR):

   text	   data	    bss	    dec	    hex	filename
 108148	    320	  14004	 122472	  1de68	rmk-stm32h7

cargo size (main):

   text	   data	    bss	    dec	    hex	filename
 108140	    320	  14004	 122464	  1de60	rmk-stm32h7

Bloaty diff (PR vs main):

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +0.0%     +62  [ = ]       0    .debug_str
  +0.0%     +43  [ = ]       0    .debug_info
   +50%     +20  [ = ]       0    [Unmapped]
  +0.0%      +8  [ = ]       0    .strtab
  +0.0%      +8  +0.0%      +8    .text
  -0.0%     -13  [ = ]       0    .debug_line
  +0.0%    +128  +0.0%      +8    TOTAL

@Schievel1
Schievel1 force-pushed the auto-flash-layout branch 2 times, most recently from c50e87d to 02022c8 Compare August 3, 2026 08:54
@Schievel1

Copy link
Copy Markdown
Contributor Author

The symbol existence is checked in rmk when bootloader feature like rmk-boot is enabled. This means that if rmk-boot is defined, the user should either define their own __rmk_boot* symbols in their linkerscript or use rmk-boot.x.

And I think it should not be overwritten by keyboard.toml. Let user define their layout in their linker script is better imo, because I think 99% users won't do it. That makes the configuration cleaner.

The last point from me is the storage size, default 128KB is a little bit more. For example, nRF52833 has only 512KB flash(I just realized that it's impossible to use rmk-boot on it). I want it to be tunable, or default to 32KB.

for now I prefer to bind everything bootloader related to the dfu feature, since this is the only benefit we get at the moment with rmk-boot. There is not other reason to use it. As we spoke on discord, I will try and make bootloader versions that don't have DFU partitions and the failsafe swap, then we can split a new rmk-boot feature off of dfu.

The offsets and sizes are now bound to symbols defined in rmk-boot.x. This file is created by rmk-boot at built. The pre-built binaries come with pre-created rmx-boot.x, that the user copies in their project dir instead of a memory.x.
keyboard.toml can't change that layout anymore, instead when users want to roll their own bootloader, their have to define the offsets in their linker script and link with it.

Storage size is not easily changeable in RMK when using embassy-boot, because when changing the storage size (offset) this also changes the size of the ACTIVE and DFU partitions. So you end up with new sizes and offsets for them as well. I tuned down the default to 32K and in rmk-boot I added the possibility to easily change the storage size. Then users just need to do change that, build rmk-boot, flash it and copy the rmk-boot.x into their project to change the storage size.

Comment thread examples/use_rust/rp2040_embassy_boot_split/build.rs Outdated

@HaoboGu HaoboGu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I agree with you! The current way looks great and the only comment from me is same as before -- we should build the DFU based on embedded-storage trait, it isn't a blocker of this PR, but should be done in the near future

Comment thread rmk/src/dfu/rp.rs
@Schievel1

Copy link
Copy Markdown
Contributor Author

Will be done when I finally get my external flash to test things out.

I prefer smaller PRs that are about one thing only. It's easier to review and test this way.

@HaoboGu

HaoboGu commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Should I merge this PR as is and leave the impl NorFlash in #1030?

@Schievel1

Schievel1 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Yes that's I wanted to do.
I'm still not sure about the Norflash.

But I wanted to have another go in this PR.
It seems like someone at embassy-boot had the same thought as you did and they already have the functionality to read the partition offsets inside the bootloader. If that's the case it would be nice to use the same symbol names in RMK.

Also let me do the small fixes in the corresponding PR in rmk-boot first. They should be merged at the same time.

@Schievel1
Schievel1 marked this pull request as draft August 13, 2026 12:28
@Schievel1
Schievel1 force-pushed the auto-flash-layout branch 2 times, most recently from ee99640 to 3ee618e Compare August 13, 2026 13:09
@Schievel1

Schievel1 commented Aug 13, 2026

Copy link
Copy Markdown
Contributor Author

https://github.com/embassy-rs/embassy/blob/89f0ce53bb64d827a00fec5222df4e831b6d541b/embassy-boot/src/firmware_updater/blocking.rs#L59

Using those symbols now. I think it's better to have the same symbols instead of doing our own thing.

I will test this once more with rp and nrf this weekend and then mark it ready to merge.

@Schievel1
Schievel1 force-pushed the auto-flash-layout branch 2 times, most recently from a0bae0a to 2008729 Compare August 13, 2026 18:54
@Schievel1
Schievel1 marked this pull request as ready for review August 13, 2026 18:54
@Schievel1

Copy link
Copy Markdown
Contributor Author

Tested with RP2040 and nRF52840. I think this is good now.

…_flash_from_linkerscript

Signed-off-by: Pascal Jäger <pascal.jaeger@leimstift.de>
@HaoboGu
HaoboGu merged commit 37e6ef3 into rmk-rs:main Aug 14, 2026
62 checks passed
@HaoboGu

HaoboGu commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

great, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants