koktoh の雑記帳

気ままに書いていきます

QMK ファームウェア 2MB の壁を超える

はじめに

先日投稿した、「QMK は 2MB を超えるファームウェアを作れない」という問題が解決できたので、その方法を記していきます。

問題の詳しい内容はこちら。

koktoh.hatenablog.com

前提

RP2040 をターゲットとしてファームウェアをビルドする場合です。

RP2040 をターゲットとしてビルドするための基本的な設定などは、別途 公式ドキュメント などで確認してください。

解決法 その1

rules.mk に以下を追加するだけです。

EXTRALDFLAGS = -Wl,--defsym,FLASH_LEN=16m

FLASH_LEN=16m で、フラッシュサイズを 16MB に設定しています。
8MB にするなら FLASH_LEN=8m にするなど、環境に合わせて変更していけば OK です。

解決法 その2

リンカスクリプトを配置する方法です。

RP2040 をターゲットとしたビルドでは、 <keyboard>.elf を作るために qmk_firmware/platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld を使用します。
これを qmk_firmware/keyboards/<keyboard>/ld 以下にコピペして、それを参照するようにする方法です。

必要なファイルの配置

qmk_firmware/platforms/chibios/boards/common/ld 以下にあるファイルから、次に挙げる2つのファイルを qmk_firmware/keyboards/<keyboard>/ld にコピペします。

  • RP2040_FLASH_TIMECRIT.ld
  • RP2040_rules_data_with_timecrit.ld

RP2040_rules_data_with_timecrit.ldRP2040_FLASH_TIMECRIT.ld から参照されるファイルで、一緒に入れておかないとビルドできないので、とりあえず入れておきます。
編集などはしません。

RP2040_FLASH_TIMECRIT.ld はわかりやすいようにリネームしておくといいでしょう。
今回は RP2040_FLASH_16MB.ld とします。

ディレクトリ構成としては以下のようになります。

<keyboard>
│  config.h
│  keyboard.json
│  readme.md
│  rules.mk
│
├─keymaps
│  └─default
│          keymap.c
│
└─ld
        RP2040_FLASH_16MB.ld
        RP2040_rules_data_with_timecrit.ld

ファイルの編集

RP2040_FLASH_16MB.ld は、以下の部分を編集します。

/*
 * RP2040 memory setup.
 */
MEMORY
{
    flash0 (rx) : org = 0x00000000, len = 16k   /* ROM                  */
    flash1 (rx) : org = 0x10000000, len = 16m   /* ここを編集 DEFINED(FLASH_LEN) ? FLASH_LEN : 2048k -> 16m */
    flash2 (rx) : org = 0x00000000, len = 0
    flash3 (rx) : org = 0x00000000, len = 0
    flash4 (rx) : org = 0x00000000, len = 0
    flash5 (rx) : org = 0x00000000, len = 0
    flash6 (rx) : org = 0x00000000, len = 0
    flash7 (rx) : org = 0x00000000, len = 0
    ram0   (wx) : org = 0x20000000, len = 256k  /* SRAM0 striped        */
    ram1   (wx) : org = 0x00000000, len = 256k  /* SRAM0 non striped    */
    ram2   (wx) : org = 0x00000000, len = 0
    ram3   (wx) : org = 0x00000000, len = 0
    ram4   (wx) : org = 0x20040000, len = 4k    /* SRAM4                */
    ram5   (wx) : org = 0x20041000, len = 4k    /* SRAM5                */
    ram6   (wx) : org = 0x00000000, len = 0
    ram7   (wx) : org = 0x20041f00, len = 256   /* SRAM5 boot           */
}

配置したリンカスクリプトを参照させる

rules.mk に以下を追加します。

MCU_LDSCRIPT = RP2040_FLASH_16MB

これで 16MB までのファームウェアがビルドできるようになりました。
8MB にするなら、 flash1 の値を 8m にするなど、環境によって変更してください。

解決法 その3 (非推奨)

ライブラリ側のリンカスクリプトを直接編集する方法です。

submodule に含まれているファイルを編集するので非推奨です。

この方法でもできるので一応書いておくだけです。

qmk_firmware/platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld を直接編集します。

編集内容は解決法 その2 でやったことと同じです。

/*
 * RP2040 memory setup.
 */
MEMORY
{
    flash0 (rx) : org = 0x00000000, len = 16k   /* ROM                  */
    flash1 (rx) : org = 0x10000000, len = 16m   /* ここを編集 DEFINED(FLASH_LEN) ? FLASH_LEN : 2048k -> 16m */
    flash2 (rx) : org = 0x00000000, len = 0
    flash3 (rx) : org = 0x00000000, len = 0
    flash4 (rx) : org = 0x00000000, len = 0
    flash5 (rx) : org = 0x00000000, len = 0
    flash6 (rx) : org = 0x00000000, len = 0
    flash7 (rx) : org = 0x00000000, len = 0
    ram0   (wx) : org = 0x20000000, len = 256k  /* SRAM0 striped        */
    ram1   (wx) : org = 0x00000000, len = 256k  /* SRAM0 non striped    */
    ram2   (wx) : org = 0x00000000, len = 0
    ram3   (wx) : org = 0x00000000, len = 0
    ram4   (wx) : org = 0x20040000, len = 4k    /* SRAM4                */
    ram5   (wx) : org = 0x20041000, len = 4k    /* SRAM5                */
    ram6   (wx) : org = 0x00000000, len = 0
    ram7   (wx) : org = 0x20041f00, len = 256   /* SRAM5 boot           */
}

方法によってビルド成果物に違いがないか確認

解決法 その1解決法 その2 で、ビルドした <keyboard>.uf2 に変わりがないか確認しました。

以下のコマンドで md5 チェックサムを表示してくれるということなので、各解決法で確認しました。

make <keyboard>:<keymap>:check-md5

実際は以下のコマンドを実行しました。

make VERBOSE_LD_CMD=yes <keyboard>:<keymap>:check-md5 > log

解決法 その1 のチェックサム

リンカスクリプト関係のログだけ抜粋して示します。

Linking: .build/qp_test_default.elf                                                                 [33;01m[WARNINGS][0m
 | 
 | Using built-in specs.
 | Reading specs from h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/nano.specs
 | rename spec link to nano_link
 | rename spec link_gcc_c_sequence to nano_link_gcc_c_sequence
 | rename spec cpp_unique_options to nano_cpp_unique_options
 | COLLECT_GCC=H:\QMK_MSYS\mingw64\bin\arm-none-eabi-gcc.exe
 | COLLECT_LTO_WRAPPER=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/lto-wrapper.exe
 | Target: arm-none-eabi
 | Configured with: ../configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --prefix=/mingw64 --target=arm-none-eabi --with-native-system-header-dir=/mingw64/include --libexecdir=/mingw64/lib --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --disable-libada --with-gnu-as --with-gnu-ld --with-system-zlib --with-newlib --with-headers=/mingw64/arm-none-eabi/include --with-python-dir=share/gcc-arm-none-eabi --with-gmp --with-mpfr --with-mpc --with-isl --with-libelf --enable-gnu-indirect_function --with-multilib-list=rmprofile --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ -pipe\ -Wl,--stack,12582912' LDFLAGS='-pipe -Wl,--disable-dynamicbase'
 | Thread model: single
 | Supported LTO compression algorithms: zlib zstd
 | gcc version 12.2.0 (GCC) 
 | COMPILER_PATH=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/;h:/qmk_msys/mingw64/bin/../lib/gcc/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/bin/
 | LIBRARY_PATH=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/thumb/v6-m/nofp/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/;h:/qmk_msys/mingw64/bin/../lib/gcc/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/
 | COLLECT_GCC_OPTIONS='-D' 'THUMB_PRESENT' '-D' 'THUMB_NO_INTERWORKING' '-D' 'PICO_NO_FPGA_CHECK' '-D' 'NDEBUG' '-fomit-frame-pointer' '-ffunction-sections' '-fdata-sections' '-fshort-wchar' '-fno-builtin-printf' '-ggdb' '-Os' '-Wall' '-Wstrict-prototypes' '-Werror' '-std=gnu11' '-fcommon' '-o' '.build/qp_test_default.elf' '-L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld' '-T' './platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld' '-L./platforms/chibios/boards/common/ld' '-nostartfiles' '-specs=nano.specs' '-mcpu=cortex-m0plus' '-mthumb' '-D' 'THUMB_PRESENT' '-mno-thumb-interwork' '-D' 'THUMB_NO_INTERWORKING' '-mno-unaligned-access' '-v' '-L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld' '-mfloat-abi=soft' '-mlibarch=armv6s-m' '-march=armv6s-m' '-dumpdir' '.build/qp_test_default.elf.'
 |  h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/collect2.exe -plugin h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/liblto_plugin.dll -plugin-opt=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/lto-wrapper.exe -plugin-opt=-fresolution=H:\QMK_MSYS\tmp\ccHG8A3N.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lg_nano -plugin-opt=-pass-through=-lc_nano -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc_nano -X -o .build/qp_test_default.elf -L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld -L./platforms/chibios/boards/common/ld -L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/thumb/v6-m/nofp -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0 -Lh:/qmk_msys/mingw64/bin/../lib/gcc -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib --wrap=__aeabi_idiv --wrap=__aeabi_idivmod --wrap=__aeabi_ldivmod --wrap=__aeabi_uidiv --wrap=__aeabi_uidivmod --wrap=__aeabi_uldivmod --wrap=__aeabi_lmul .build/obj_qp_test_default/lcd/lcd_helper.o .build/obj_qp_test_default/gfx/fonts/noto.qff.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0002.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0005.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0009.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0011.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0013.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0015.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0023.qgf.o .build/obj_qp_test_default/keyboards/qp_test/qp_test.o .build/obj_qp_test_default/.build/obj_qp_test_default/src/default_keyboard.o .build/obj_qp_test_default/quantum/keymap_introspection.o .build/obj_qp_test_default/quantum/quantum.o .build/obj_qp_test_default/quantum/bitwise.o .build/obj_qp_test_default/quantum/led.o .build/obj_qp_test_default/quantum/action.o .build/obj_qp_test_default/quantum/action_layer.o .build/obj_qp_test_default/quantum/action_tapping.o .build/obj_qp_test_default/quantum/action_util.o .build/obj_qp_test_default/quantum/eeconfig.o .build/obj_qp_test_default/quantum/keyboard.o .build/obj_qp_test_default/quantum/keymap_common.o .build/obj_qp_test_default/quantum/keycode_config.o .build/obj_qp_test_default/quantum/sync_timer.o .build/obj_qp_test_default/quantum/logging/debug.o .build/obj_qp_test_default/quantum/logging/sendchar.o .build/obj_qp_test_default/quantum/logging/print.o .build/obj_qp_test_default/quantum/matrix_common.o .build/obj_qp_test_default/quantum/matrix.o .build/obj_qp_test_default/quantum/debounce/sym_defer_g.o .build/obj_qp_test_default/quantum/main.o .build/obj_qp_test_default/printf.o .build/obj_qp_test_default/quantum/unicode/utf8.o .build/obj_qp_test_default/quantum/color.o .build/obj_qp_test_default/quantum/painter/qp.o .build/obj_qp_test_default/quantum/painter/qp_internal.o .build/obj_qp_test_default/quantum/painter/qp_stream.o .build/obj_qp_test_default/quantum/painter/qgf.o .build/obj_qp_test_default/quantum/painter/qff.o .build/obj_qp_test_default/quantum/painter/qp_draw_core.o .build/obj_qp_test_default/quantum/painter/qp_draw_codec.o .build/obj_qp_test_default/quantum/painter/qp_draw_circle.o .build/obj_qp_test_default/quantum/painter/qp_draw_ellipse.o .build/obj_qp_test_default/quantum/painter/qp_draw_image.o .build/obj_qp_test_default/quantum/painter/qp_draw_text.o .build/obj_qp_test_default/drivers/painter/tft_panel/qp_tft_panel.o .build/obj_qp_test_default/drivers/painter/st77xx/qp_st7735.o .build/obj_qp_test_default/quantum/painter/qp_comms.o .build/obj_qp_test_default/drivers/painter/comms/qp_comms_spi.o .build/obj_qp_test_default/eeprom_driver.o .build/obj_qp_test_default/eeprom_wear_leveling.o .build/obj_qp_test_default/wear_leveling.o .build/obj_qp_test_default/wear_leveling_rp2040_flash.o .build/obj_qp_test_default/quantum/rgb_matrix/rgb_matrix.o .build/obj_qp_test_default/quantum/rgb_matrix/rgb_matrix_drivers.o .build/obj_qp_test_default/quantum/process_keycode/process_rgb.o .build/obj_qp_test_default/quantum/led_tables.o .build/obj_qp_test_default/qmk_fnv_type_validation.o .build/obj_qp_test_default/hash_32a.o .build/obj_qp_test_default/hash_64a.o .build/obj_qp_test_default/lib/lib8tion/lib8tion.o .build/obj_qp_test_default/ws2812_vendor.o .build/obj_qp_test_default/quantum/bootmagic/bootmagic.o .build/obj_qp_test_default/quantum/deferred_exec.o .build/obj_qp_test_default/quantum/process_keycode/process_grave_esc.o .build/obj_qp_test_default/quantum/process_keycode/process_magic.o .build/obj_qp_test_default/quantum/mousekey.o .build/obj_qp_test_default/quantum/send_string/send_string.o .build/obj_qp_test_default/quantum/process_keycode/process_space_cadet.o .build/obj_qp_test_default/protocol/host.o .build/obj_qp_test_default/protocol/report.o .build/obj_qp_test_default/protocol/usb_device_state.o .build/obj_qp_test_default/protocol/usb_util.o .build/obj_qp_test_default/platforms/suspend.o .build/obj_qp_test_default/platforms/synchronization_util.o .build/obj_qp_test_default/platforms/timer.o .build/obj_qp_test_default/platforms/chibios/hardware_id.o .build/obj_qp_test_default/platforms/chibios/platform.o .build/obj_qp_test_default/platforms/chibios/suspend.o .build/obj_qp_test_default/platforms/chibios/timer.o .build/obj_qp_test_default/platforms/chibios/bootloaders/rp2040.o .build/obj_qp_test_default/spi_master.a .build/obj_qp_test_default/./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.o .build/obj_qp_test_default/./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/vectors.o .build/obj_qp_test_default/./lib/chibios/os/common/ports/ARMv6-M-RP2/compilers/GCC/chcoreasm.o .build/obj_qp_test_default/protocol/chibios/usb_main.o .build/obj_qp_test_default/protocol/chibios/chibios.o .build/obj_qp_test_default/usb_descriptor.o .build/obj_qp_test_default/protocol/chibios/usb_driver.o .build/obj_qp_test_default/protocol/chibios/usb_endpoints.o .build/obj_qp_test_default/protocol/chibios/usb_report_handling.o .build/obj_qp_test_default/protocol/chibios/usb_util.o .build/obj_qp_test_default/lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt1.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chsys.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chrfcu.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chdebug.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chtrace.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chvt.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chschd.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chinstances.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chthreads.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chtm.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chstats.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chregistry.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chsem.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chmtx.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chcond.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chevents.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chmsg.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chdynamic.o .build/obj_qp_test_default/lib/chibios/os/common/ports/ARMv6-M-RP2/chcore.o .build/obj_qp_test_default/lib/chibios/os/hal/osal/rt-nil/osal.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmboxes.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmemcore.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmemheaps.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmempools.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chpipes.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chobjcaches.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chdelegates.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chfactory.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_st.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_buffers.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_queues.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_flash.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mmcsd.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_adc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_can.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_crypto.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_dac.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_efl.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_gpt.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_i2c.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_i2s.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_icu.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mac.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mmc_spi.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_pal.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_pwm.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_rtc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_sdc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_serial.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_serial_usb.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_sio.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_spi.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_trng.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_uart.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_usb.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_wdg.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_wspi.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/common/ARMCMx/nvic.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/RP2040/rp_isr.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/RP2040/hal_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/DMAv1/rp_dma.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/SPIv1/hal_spi_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/TIMERv1/hal_st_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/RTCv1/hal_rtc_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/WDGv1/hal_wdg_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/I2Cv1/hal_i2c_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/PWMv1/hal_pwm_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/ADCv1/hal_adc_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/USBDv1/hal_usb_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/boards/RP_PICO_RP2040/board.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/chprintf.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/chscanf.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/memstreams.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/nullstreams.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/bufstreams.o .build/obj_qp_test_default/lib/chibios/os/various/syscalls.o .build/obj_qp_test_default/platforms/chibios/syscall-fallbacks.o .build/obj_qp_test_default/platforms/chibios/wait.o .build/obj_qp_test_default/platforms/chibios/synchronization_util.o .build/obj_qp_test_default/platforms/chibios/interrupt_handlers.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_clocks/clocks.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_pll/pll.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_pio/pio.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_timer/timer.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_flash/flash.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_gpio/gpio.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_claim/claim.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_xosc/xosc.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_bootrom/bootrom.o .build/obj_qp_test_default/platforms/chibios/vendors/RP/stage2_bootloaders.o .build/obj_qp_test_default/platforms/chibios/vendors/RP/pico_sdk_shims.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_divider/divider.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.o --gc-sections --no-warn-rwx-segments --defsym=__process_stack_size__=0x800 --defsym=__main_stack_size__=0x400 --no-wchar-size-warning -Map=.build/qp_test_default.map --cref -lm --defsym FLASH_LEN=16m --start-group -lgcc -lg_nano -lc_nano --end-group --start-group -lgcc -lc_nano --end-group -T ./platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld
 | COLLECT_GCC_OPTIONS='-D' 'THUMB_PRESENT' '-D' 'THUMB_NO_INTERWORKING' '-D' 'PICO_NO_FPGA_CHECK' '-D' 'NDEBUG' '-fomit-frame-pointer' '-ffunction-sections' '-fdata-sections' '-fshort-wchar' '-fno-builtin-printf' '-ggdb' '-Os' '-Wall' '-Wstrict-prototypes' '-Werror' '-std=gnu11' '-fcommon' '-o' '.build/qp_test_default.elf' '-L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld' '-T' './platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld' '-L./platforms/chibios/boards/common/ld' '-nostartfiles' '-specs=nano.specs' '-mcpu=cortex-m0plus' '-mthumb' '-D' 'THUMB_PRESENT' '-mno-thumb-interwork' '-D' 'THUMB_NO_INTERWORKING' '-mno-unaligned-access' '-v' '-L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld' '-mfloat-abi=soft' '-mlibarch=armv6s-m' '-march=armv6s-m' '-dumpdir' '.build/qp_test_default.elf.'
 | 
Creating UF2 file for deployment: .build/qp_test_default.uf2                                        [32;01m[OK][0m
Copying qp_test_default.uf2 to qmk_firmware folder                                                  [32;01m[OK][0m
0139dd971ba59f3d03699d2c49f43077 *.build/qp_test_default.uf2

チェックサムの値は以下です。

0139dd971ba59f3d03699d2c49f43077

解決法 その2 のチェックサム

リンカスクリプト関係のログだけ抜粋して示します。

Linking: .build/qp_test_default.elf                                                                 [33;01m[WARNINGS][0m
 | 
 | Using built-in specs.
 | Reading specs from h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/nano.specs
 | rename spec link to nano_link
 | rename spec link_gcc_c_sequence to nano_link_gcc_c_sequence
 | rename spec cpp_unique_options to nano_cpp_unique_options
 | COLLECT_GCC=H:\QMK_MSYS\mingw64\bin\arm-none-eabi-gcc.exe
 | COLLECT_LTO_WRAPPER=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/lto-wrapper.exe
 | Target: arm-none-eabi
 | Configured with: ../configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --prefix=/mingw64 --target=arm-none-eabi --with-native-system-header-dir=/mingw64/include --libexecdir=/mingw64/lib --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --disable-libada --with-gnu-as --with-gnu-ld --with-system-zlib --with-newlib --with-headers=/mingw64/arm-none-eabi/include --with-python-dir=share/gcc-arm-none-eabi --with-gmp --with-mpfr --with-mpc --with-isl --with-libelf --enable-gnu-indirect_function --with-multilib-list=rmprofile --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ -pipe\ -Wl,--stack,12582912' LDFLAGS='-pipe -Wl,--disable-dynamicbase'
 | Thread model: single
 | Supported LTO compression algorithms: zlib zstd
 | gcc version 12.2.0 (GCC) 
 | COMPILER_PATH=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/;h:/qmk_msys/mingw64/bin/../lib/gcc/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/bin/
 | LIBRARY_PATH=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/thumb/v6-m/nofp/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/;h:/qmk_msys/mingw64/bin/../lib/gcc/;h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/
 | COLLECT_GCC_OPTIONS='-D' 'THUMB_PRESENT' '-D' 'THUMB_NO_INTERWORKING' '-D' 'PICO_NO_FPGA_CHECK' '-D' 'NDEBUG' '-fomit-frame-pointer' '-ffunction-sections' '-fdata-sections' '-fshort-wchar' '-fno-builtin-printf' '-ggdb' '-Os' '-Wall' '-Wstrict-prototypes' '-Werror' '-std=gnu11' '-fcommon' '-o' '.build/qp_test_default.elf' '-L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld' '-T' 'keyboards/qp_test/ld/RP2040_FLASH_16MB.ld' '-Lkeyboards/qp_test/ld' '-nostartfiles' '-specs=nano.specs' '-mcpu=cortex-m0plus' '-mthumb' '-D' 'THUMB_PRESENT' '-mno-thumb-interwork' '-D' 'THUMB_NO_INTERWORKING' '-mno-unaligned-access' '-v' '-L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld' '-mfloat-abi=soft' '-mlibarch=armv6s-m' '-march=armv6s-m' '-dumpdir' '.build/qp_test_default.elf.'
 |  h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/collect2.exe -plugin h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/liblto_plugin.dll -plugin-opt=h:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/lto-wrapper.exe -plugin-opt=-fresolution=H:\QMK_MSYS\tmp\ccsCZDv8.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lg_nano -plugin-opt=-pass-through=-lc_nano -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc_nano -X -o .build/qp_test_default.elf -L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld -Lkeyboards/qp_test/ld -L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/thumb/v6-m/nofp -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0 -Lh:/qmk_msys/mingw64/bin/../lib/gcc -Lh:/qmk_msys/mingw64/bin/../lib/gcc/arm-none-eabi/12.2.0/../../../../arm-none-eabi/lib --wrap=__aeabi_idiv --wrap=__aeabi_idivmod --wrap=__aeabi_ldivmod --wrap=__aeabi_uidiv --wrap=__aeabi_uidivmod --wrap=__aeabi_uldivmod --wrap=__aeabi_lmul .build/obj_qp_test_default/lcd/lcd_helper.o .build/obj_qp_test_default/gfx/fonts/noto.qff.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0002.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0005.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0009.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0011.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0013.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0015.qgf.o .build/obj_qp_test_default/gfx/images/rabbit_hole_0023.qgf.o .build/obj_qp_test_default/keyboards/qp_test/qp_test.o .build/obj_qp_test_default/.build/obj_qp_test_default/src/default_keyboard.o .build/obj_qp_test_default/quantum/keymap_introspection.o .build/obj_qp_test_default/quantum/quantum.o .build/obj_qp_test_default/quantum/bitwise.o .build/obj_qp_test_default/quantum/led.o .build/obj_qp_test_default/quantum/action.o .build/obj_qp_test_default/quantum/action_layer.o .build/obj_qp_test_default/quantum/action_tapping.o .build/obj_qp_test_default/quantum/action_util.o .build/obj_qp_test_default/quantum/eeconfig.o .build/obj_qp_test_default/quantum/keyboard.o .build/obj_qp_test_default/quantum/keymap_common.o .build/obj_qp_test_default/quantum/keycode_config.o .build/obj_qp_test_default/quantum/sync_timer.o .build/obj_qp_test_default/quantum/logging/debug.o .build/obj_qp_test_default/quantum/logging/sendchar.o .build/obj_qp_test_default/quantum/logging/print.o .build/obj_qp_test_default/quantum/matrix_common.o .build/obj_qp_test_default/quantum/matrix.o .build/obj_qp_test_default/quantum/debounce/sym_defer_g.o .build/obj_qp_test_default/quantum/main.o .build/obj_qp_test_default/printf.o .build/obj_qp_test_default/quantum/unicode/utf8.o .build/obj_qp_test_default/quantum/color.o .build/obj_qp_test_default/quantum/painter/qp.o .build/obj_qp_test_default/quantum/painter/qp_internal.o .build/obj_qp_test_default/quantum/painter/qp_stream.o .build/obj_qp_test_default/quantum/painter/qgf.o .build/obj_qp_test_default/quantum/painter/qff.o .build/obj_qp_test_default/quantum/painter/qp_draw_core.o .build/obj_qp_test_default/quantum/painter/qp_draw_codec.o .build/obj_qp_test_default/quantum/painter/qp_draw_circle.o .build/obj_qp_test_default/quantum/painter/qp_draw_ellipse.o .build/obj_qp_test_default/quantum/painter/qp_draw_image.o .build/obj_qp_test_default/quantum/painter/qp_draw_text.o .build/obj_qp_test_default/drivers/painter/tft_panel/qp_tft_panel.o .build/obj_qp_test_default/drivers/painter/st77xx/qp_st7735.o .build/obj_qp_test_default/quantum/painter/qp_comms.o .build/obj_qp_test_default/drivers/painter/comms/qp_comms_spi.o .build/obj_qp_test_default/eeprom_driver.o .build/obj_qp_test_default/eeprom_wear_leveling.o .build/obj_qp_test_default/wear_leveling.o .build/obj_qp_test_default/wear_leveling_rp2040_flash.o .build/obj_qp_test_default/quantum/rgb_matrix/rgb_matrix.o .build/obj_qp_test_default/quantum/rgb_matrix/rgb_matrix_drivers.o .build/obj_qp_test_default/quantum/process_keycode/process_rgb.o .build/obj_qp_test_default/quantum/led_tables.o .build/obj_qp_test_default/qmk_fnv_type_validation.o .build/obj_qp_test_default/hash_32a.o .build/obj_qp_test_default/hash_64a.o .build/obj_qp_test_default/lib/lib8tion/lib8tion.o .build/obj_qp_test_default/ws2812_vendor.o .build/obj_qp_test_default/quantum/bootmagic/bootmagic.o .build/obj_qp_test_default/quantum/deferred_exec.o .build/obj_qp_test_default/quantum/process_keycode/process_grave_esc.o .build/obj_qp_test_default/quantum/process_keycode/process_magic.o .build/obj_qp_test_default/quantum/mousekey.o .build/obj_qp_test_default/quantum/send_string/send_string.o .build/obj_qp_test_default/quantum/process_keycode/process_space_cadet.o .build/obj_qp_test_default/protocol/host.o .build/obj_qp_test_default/protocol/report.o .build/obj_qp_test_default/protocol/usb_device_state.o .build/obj_qp_test_default/protocol/usb_util.o .build/obj_qp_test_default/platforms/suspend.o .build/obj_qp_test_default/platforms/synchronization_util.o .build/obj_qp_test_default/platforms/timer.o .build/obj_qp_test_default/platforms/chibios/hardware_id.o .build/obj_qp_test_default/platforms/chibios/platform.o .build/obj_qp_test_default/platforms/chibios/suspend.o .build/obj_qp_test_default/platforms/chibios/timer.o .build/obj_qp_test_default/platforms/chibios/bootloaders/rp2040.o .build/obj_qp_test_default/spi_master.a .build/obj_qp_test_default/./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.o .build/obj_qp_test_default/./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/vectors.o .build/obj_qp_test_default/./lib/chibios/os/common/ports/ARMv6-M-RP2/compilers/GCC/chcoreasm.o .build/obj_qp_test_default/protocol/chibios/usb_main.o .build/obj_qp_test_default/protocol/chibios/chibios.o .build/obj_qp_test_default/usb_descriptor.o .build/obj_qp_test_default/protocol/chibios/usb_driver.o .build/obj_qp_test_default/protocol/chibios/usb_endpoints.o .build/obj_qp_test_default/protocol/chibios/usb_report_handling.o .build/obj_qp_test_default/protocol/chibios/usb_util.o .build/obj_qp_test_default/lib/chibios/os/common/startup/ARMCMx/compilers/GCC/crt1.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chsys.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chrfcu.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chdebug.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chtrace.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chvt.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chschd.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chinstances.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chthreads.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chtm.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chstats.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chregistry.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chsem.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chmtx.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chcond.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chevents.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chmsg.o .build/obj_qp_test_default/lib/chibios/os/rt/src/chdynamic.o .build/obj_qp_test_default/lib/chibios/os/common/ports/ARMv6-M-RP2/chcore.o .build/obj_qp_test_default/lib/chibios/os/hal/osal/rt-nil/osal.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmboxes.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmemcore.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmemheaps.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chmempools.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chpipes.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chobjcaches.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chdelegates.o .build/obj_qp_test_default/lib/chibios/os/oslib/src/chfactory.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_st.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_buffers.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_queues.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_flash.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mmcsd.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_adc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_can.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_crypto.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_dac.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_efl.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_gpt.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_i2c.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_i2s.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_icu.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mac.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_mmc_spi.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_pal.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_pwm.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_rtc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_sdc.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_serial.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_serial_usb.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_sio.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_spi.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_trng.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_uart.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_usb.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_wdg.o .build/obj_qp_test_default/lib/chibios/os/hal/src/hal_wspi.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/common/ARMCMx/nvic.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/RP2040/rp_isr.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/RP2040/hal_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/DMAv1/rp_dma.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/GPIOv1/hal_pal_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/SPIv1/hal_spi_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/TIMERv1/hal_st_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/RTCv1/hal_rtc_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/ports/RP/LLD/WDGv1/hal_wdg_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/I2Cv1/hal_i2c_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/PWMv1/hal_pwm_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/ADCv1/hal_adc_lld.o .build/obj_qp_test_default/lib/chibios-contrib/os/hal/ports/RP/LLD/USBDv1/hal_usb_lld.o .build/obj_qp_test_default/lib/chibios/os/hal/boards/RP_PICO_RP2040/board.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/chprintf.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/chscanf.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/memstreams.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/nullstreams.o .build/obj_qp_test_default/lib/chibios/os/hal/lib/streams/bufstreams.o .build/obj_qp_test_default/lib/chibios/os/various/syscalls.o .build/obj_qp_test_default/platforms/chibios/syscall-fallbacks.o .build/obj_qp_test_default/platforms/chibios/wait.o .build/obj_qp_test_default/platforms/chibios/synchronization_util.o .build/obj_qp_test_default/platforms/chibios/interrupt_handlers.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_clocks/clocks.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_pll/pll.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_pio/pio.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_timer/timer.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_flash/flash.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_gpio/gpio.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_claim/claim.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/hardware_xosc/xosc.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_bootrom/bootrom.o .build/obj_qp_test_default/platforms/chibios/vendors/RP/stage2_bootloaders.o .build/obj_qp_test_default/platforms/chibios/vendors/RP/pico_sdk_shims.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_divider/divider.o .build/obj_qp_test_default/./lib/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.o --gc-sections --no-warn-rwx-segments --defsym=__process_stack_size__=0x800 --defsym=__main_stack_size__=0x400 --no-wchar-size-warning -Map=.build/qp_test_default.map --cref -lm --start-group -lgcc -lg_nano -lc_nano --end-group --start-group -lgcc -lc_nano --end-group -T keyboards/qp_test/ld/RP2040_FLASH_16MB.ld
 | COLLECT_GCC_OPTIONS='-D' 'THUMB_PRESENT' '-D' 'THUMB_NO_INTERWORKING' '-D' 'PICO_NO_FPGA_CHECK' '-D' 'NDEBUG' '-fomit-frame-pointer' '-ffunction-sections' '-fdata-sections' '-fshort-wchar' '-fno-builtin-printf' '-ggdb' '-Os' '-Wall' '-Wstrict-prototypes' '-Werror' '-std=gnu11' '-fcommon' '-o' '.build/qp_test_default.elf' '-L./lib/chibios-contrib/os/common/startup/ARMCMx/compilers/GCC/ld' '-T' 'keyboards/qp_test/ld/RP2040_FLASH_16MB.ld' '-Lkeyboards/qp_test/ld' '-nostartfiles' '-specs=nano.specs' '-mcpu=cortex-m0plus' '-mthumb' '-D' 'THUMB_PRESENT' '-mno-thumb-interwork' '-D' 'THUMB_NO_INTERWORKING' '-mno-unaligned-access' '-v' '-L./lib/chibios/os/common/startup/ARMCMx/compilers/GCC/ld' '-mfloat-abi=soft' '-mlibarch=armv6s-m' '-march=armv6s-m' '-dumpdir' '.build/qp_test_default.elf.'
 | 
Creating UF2 file for deployment: .build/qp_test_default.uf2                                        [32;01m[OK][0m
Copying qp_test_default.uf2 to qmk_firmware folder                                                  [32;01m[OK][0m
0139dd971ba59f3d03699d2c49f43077 *.build/qp_test_default.uf2

チェックサムの値は以下です。

0139dd971ba59f3d03699d2c49f43077

比較

解決法 その1

0139dd971ba59f3d03699d2c49f43077

解決法 その2

0139dd971ba59f3d03699d2c49f43077

どちらも同じ、つまり、解決法 その1その2 でビルド成果物に変化がないことがわかりました。

ちなみに、 解決法 その3チェックサムも同一でした。

0139dd971ba59f3d03699d2c49f43077

Tips

ビルドの詳細を表示する

make VARBOSE=true <keyboard>:<keymap>

ld コマンドの詳細を表示する

make VARBOSE_LD_CMD=yes <keyboard>:<keymap>

画面がログで埋まるので、 > log などでファイルにリダイレクトした方がいい。(検索性も上がる)

make コマンドで有効な引数など一覧

docs.qmk.fm

おわりに

無事に 2MB の壁を越えてファームウェアがビルドできるようになりました。
これで Quantum Painter でアニメーション GIF を表示しまくれます。やったぜ!

そもそも #define PICO_FLASH_SIZE_BYTES (16 * 1024 * 1024) とかしてるんだから、それ見ていい感じにしてくれたらいいのになぁとか思ったり……

謝辞

今回の問題解決にあたり、 Self-Made Keyboard in Japan のたくさんの方々に助言をいただきました。
ここに、感謝を申し上げます。