Сборка прошивки#
Прошивку MCU (Katapult + Klipper) можно собрать либо на самом хосте принтера, либо на Mac / Linux-машине, а потом скопировать .bin. Оба дают идентичные образы — выбирай, что под рукой.
Тулчейн#
На хосте принтера (Allwinner H616 платы Sovol Zero, Debian aarch64)#
arm-none-eabi-gcc уже установлен — это вендорская же цепочка сборки. Клонируй исходники и собирай на месте; никакой доп-настройки и ни одной из macOS-причуд ниже:
make CROSS_PREFIX=arm-none-eabi-На macOS#
brew install --cask gcc-arm-embeddedОн ставится в /Applications/ArmGNUToolchain/<version>/arm-none-eabi/bin/ (например, 15.2.rel1) и не добавляется в PATH. Собирай с полным префиксом и переопредели CPP:
TC=/Applications/ArmGNUToolchain/<version>/arm-none-eabi/bin
make CROSS_PREFIX=$TC/arm-none-eabi- CPP=$TC/arm-none-eabi-cppПереопределение CPP на macOS обязательно: Makefile Klipper препроцессит linker-скрипт через cpp, а это там clang, и он падает с cc: error: no input files. На хосте это не нужно (там cpp — это gcc).
Что собирать#
Собери все четыре образа из одного и того же коммита Klipper master (и совпадающего чекаута Arksine/katapult). Затравку каждого .config бери из вендорского на диске и поправь офсет — вендорские файлы .config* заявляют 0x8000000, что устарело.
| Образ | Таргет / затравка | Опция офсета | Адрес приложения | Сохрани вывод как |
|---|---|---|---|---|
| Katapult тулхеда | F103, CANSERIAL, 8 MHz, CAN PB8/PB9 — затравка .config103 | — | 0x8000000 | katapult-f103.bin |
| Klipper тулхеда | F103, затравка .config103 | STM32_FLASH_START_2000 | 0x8002000 | klipper-f103.bin |
| Katapult deployer мейнборда | MACH_STM32H743 (+ BUILD_DEPLOYER) | STM32_FLASH_START_20000 | 0x8020000 | deployer-mainboard.bin |
| Klipper мейнборда | MACH_STM32H743, затравка .config750 | STM32_FLASH_START_20000 | 0x8020000 | klipper-mainboard.bin |
Каждая сборка перезаписывает out/klipper.bin (или out/katapult.bin / out/deployer.bin), так что копируй вывод под отдельным именем перед следующей сборкой — иначе четыре образа затрут друг друга, и ты рискуешь прошить F103-образ тулхеда на мейнборд или наоборот. Шаги прошивки в Миграции MCU используют имена из колонки «Сохрани вывод как» выше.
Мейнборд: собирай как STM32H743 (валидированный клок 400 МГц)#
Выбирай MACH_STM32H743, а не H750. На текущем master Klipper оба таргета дают офсет 0x8020000 (STM32_FLASH_START_20000) стоковой опцией меню, так что ни один не требует патча — но они различаются клоком: H750 по умолчанию 480 МГц, H743 — 400 МГц, и 400 МГц — та скорость, на которой этот мейнборд валидирован (и вендор, и asnajder/zero-config гоняют его на 400). Сборка как H743 даёт проверенный клок из стокового таргета. Гнаться за 480 МГц тут незачем: ворклоад мейнборда Klipper на 400 не упирается в клок, а 480 МГц на H750 всё равно зависит от ревизии кремния (партии rev-Y капятся на 400 МГц и требуют overdrive VOS0), так что 480 — это риск без выигрыша, а 400 проверено и достаточно. Через make menuconfig:
- processor model STM32H743
- кварц 25 MHz
- application offset 128 KiB (→
0x8020000) - USB-to-CAN-bus bridge, USB на PA11/PA12, CAN на PB8/PB9
- GPIO pins to set at startup:
!PE11,!PB0— держит вспомогательный/выхлопной вентиляторы в низком уровне, пока Klipper не перехватит, вместо того чтобы гонять их на полную через окно загрузки
Собери Katapult deployer для мейнборда с теми же настройками H743 плюс BUILD_DEPLOYER=y (включается автоматически, когда офсет приложения отличается от офсета загрузчика). Он выдаёт deployer.bin рядом с katapult.bin; deployer — это то, что ставит mainline Katapult по USB без SWD (см. Миграцию MCU).
Katapult тулхеда: держи его CANSERIAL#
Затравку .config для Katapult тулхеда бери из вендорского .config103 и меняй только офсет. Голая/руками написанная затравка заставляет olddefconfig выставить интерфейс связи в USB по умолчанию, и получается Katapult, который входит в загрузчик, но молчит на CAN-шине. CANSERIAL — это то, что делает тулхед CAN-прошиваемым после одного SWD-бутстрапа.
Сноска: сборка как H750#
На текущем master MACH_STM32H750 тоже достаёт офсет 0x8020000, так что и ему патч не нужен — поддержка из Klipper3d/klipper#7219 приехала на master коммитом 666781a6 2026-06-09. Отдельный коммит в тот же день разделил дефолт клока на H750 → 480 МГц / H743 → 400 МГц; до этого H750 тоже по умолчанию брал 400 МГц. Так что на свежем чекауте единственное, что разделяет два таргета, — это дефолт клока, и брать H750 тут по-прежнему незачем. Однострочный Kconfig-патч, который раньше включал офсет в меню, важен только если ты пинишь Klipper старше 2026-06-09 — чего этот отслеживающий master гайд не делает.
Проверь перед прошивкой#
Проверь, что reset-handler каждого .bin — байты 4–7, little-endian — попадает в целевой офсет:
python3 -c "d=open('out/klipper.bin','rb').read(8); print(hex(int.from_bytes(d[4:8],'little')))"- F103 на
0x8002000→ ожидай0x08002xxx(значение0x08000xxxозначает, что собрано под0x8000000, неверно). - Мейнборд на
0x8020000→ ожидай0x0802xxxx(значение0x0800xxxxозначает неверный офсет — окирпичит мост).