Сборка прошивки Pybricks
Иногда стандартной прошивки с code.pybricks.com недостаточно: нужно проверить свежий master, изменить код Pybricks или собрать прошивку с локальными правками. В этом случае собирают файл firmware.zip из исходников pybricks-micropython.
Важно
Самостоятельная сборка нужна только если вы понимаете, зачем меняете прошивку. Для обычной установки Pybricks используйте готовую прошивку через браузер.
Что получится в конце
После успешной сборки для SPIKE Prime Hub появится файл:
bricks/primehub/build/firmware.zip
Внутри архива должны быть три файла:
firmware-base.bin
firmware.metadata.json
ReadMe_OSS.txt
Именно такой состав ожидают инструменты Pybricks для прошивки хаба.
Проверенная среда
Эти шаги были проверены на Windows с Cygwin.
| Инструмент | Проверенная версия |
|---|---|
| Python | 3.12.10 |
| Poetry | 1.8.5 |
| Cygwin make | GNU Make 4.4.1 |
| Cygwin zip | Zip 3.0 |
| Cygwin MinGW GCC | 13.4.0 |
| Arm GNU Toolchain | 13.3.rel1, arm-none-eabi-gcc 13.3.1 |
Почему не 10-2020-q4-major?
Старый GNU Arm Embedded Toolchain 10.2.1 доходит до линковки, но на текущем master Pybricks падает с ошибкой lto-wrapper.exe: fatal error: make returned 2 exit status. Рабочая сборка получилась с Arm GNU Toolchain 13.3.rel1, который соответствует текущим рекомендациям Pybricks.
1. Установите инструменты
Cygwin
Установите Cygwin и выберите пакеты:
coreutils
doxygen
graphviz
make
mingw64-x86_64-gcc-core
python3
zip
coreutils нужен для базовых команд вроде cat, cp, ln, которые используют скрипты установки и сборки.
Arm GNU Toolchain
Скачайте Windows-архив Arm GNU Toolchain 13.3.rel1:
arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi.zip
Распакуйте его, например в:
C:\Tools\arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi
Python и Poetry
Установите Python 3.12 и Poetry. Если Python уже установлен, Poetry можно поставить так:
py -3.12 -m pip install pipx
pipx install poetry
2. Получите исходники
Клонируйте pybricks-micropython без --recursive:
git clone https://github.com/pybricks/pybricks-micropython
cd pybricks-micropython
Submodules подтянутся сами во время make. Так быстрее, потому что MicroPython содержит много submodules, которые Pybricks не использует.
3. Подготовьте Python-окружение
В папке pybricks-micropython создайте Poetry-окружение:
poetry env use C:\Users\<user>\AppData\Local\Programs\Python\Python312\python.exe
poetry install
Если Python установлен в другом месте, замените путь на свой. Проверить путь к Python внутри окружения можно так:
poetry env info --executable
Для следующих команд нужен именно этот Python из Poetry-окружения. В примерах ниже предполагается, что он находится здесь:
C:\Projects\pybricks-micropython\.venv\Scripts\python.exe
4. Соберите mpy-cross
Откройте Cygwin terminal или запустите bash.exe из Cygwin. Перейдите в папку исходников и добавьте Arm toolchain в PATH:
cd /cygdrive/c/Projects/pybricks-micropython
export PATH="/cygdrive/c/Tools/arm-gnu-toolchain-13.3.rel1-mingw-w64-i686-arm-none-eabi/bin:$PATH"
export PYTHON=/cygdrive/c/Projects/pybricks-micropython/.venv/Scripts/python.exe
Соберите mpy-cross:
make mpy-cross -j8 PYTHON=$PYTHON
mpy-cross компилирует Python-модули в формат MicroPython. Без него сборка прошивки не дойдет до конца.
5. Соберите прошивку для SPIKE Prime
Для SPIKE Prime Hub используется target primehub:
make -C bricks/primehub -j8 PYTHON=$PYTHON
Успешная сборка заканчивается строками примерно такого вида:
BIN creating firmware base file
META creating firmware metadata
ZIP creating firmware package
adding: firmware-base.bin
adding: firmware.metadata.json
adding: ReadMe_OSS.txt
Проверьте архив:
$PYTHON -m zipfile -l bricks/primehub/build/firmware.zip
6. Установка своего firmware.zip
Физическую прошивку хаба выполняйте только если уверены, что собрали нужную версию.
- Откройте code.pybricks.com в Chrome или Edge.
- Откройте установку прошивки Pybricks.
- Перейдите в расширенный режим выбора прошивки.
- Выберите файл
bricks/primehub/build/firmware.zip. - Переведите SPIKE Prime Hub в DFU-режим и выполните установку так же, как при обычной установке Pybricks.
Если нужно вернуть заводскую прошивку, используйте официальный LEGO SPIKE app или пункт восстановления официальной прошивки в Pybricks.
Частые ошибки
make: command not found
Cygwin не добавлен в PATH, или пакет make не установлен. Проверьте:
which make
make --version
arm-none-eabi-gcc: command not found
Arm toolchain не добавлен в PATH. Проверьте:
which arm-none-eabi-gcc
arm-none-eabi-gcc --version
ModuleNotFoundError во время сборки
Сборка запущена не тем Python. Укажите Python из Poetry-окружения явно:
make -C bricks/primehub -j8 PYTHON=/cygdrive/c/Projects/pybricks-micropython/.venv/Scripts/python.exe
Ошибка submodules
Не клонируйте репозиторий с --recursive. Если сеть оборвалась во время первого make, просто повторите команду сборки. Make сам продолжит подтягивать нужные submodules.
lto-wrapper.exe: fatal error: make returned 2 exit status
Если это случилось на Arm GCC 10.2.1 из 10-2020-q4-major, поставьте Arm GNU Toolchain 13.3.rel1, очистите старые объектные файлы и пересоберите:
make -C bricks/primehub clean
make -C bricks/primehub -j8 PYTHON=$PYTHON