Сборка прошивки Trezor One из исходного кода
Подготовка
- Виртуальная машина VirtualBox с установленным дистрибутивом Ubuntu 22.04 Desktop
- 30 GB для диска виртуальной машины
- 4 GB оперативной памяти
- 4 потока процессора
- Правила udev для установки прошивки на устройство
Зависимости
sudo apt install git gcc-arm-none-eabi python3-poetry python3-pip libsdl2-dev libsdl2-image-dev protobuf-compiler
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
echo 'export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring' >> ~/.bashrc
source ~/.bashrc
python3 -m pip install trezorПолучение исходного кода
git clone --recurse-submodules https://github.com/trezor/trezor-firmware ~/trezor-firmware
cd ~/trezor-firmware/На этом этапе необходимо определить, какую версию прошивки вы хотите собрать самостоятельно. Обратите внимание, что установить версию прошивки ниже, чем текущая версия загрузчика, находящегося на устройстве, не получится. Узнать текущую версию загрузчика можно с помощью следующих команд:
trezorctl device reboot-to-bootloader
# Подтвердите действие на устройстве
trezorctl get-features
# Версия загрузчика также отобразится на экране устройстваПодробнее об особенностях прошивки Trezor One можно узнать из этого материала. Для сборки рекомендуется использовать не последнюю версию кода, а откатиться на момент выхода нужной версии прошивки с помощью тегов. Для Trezor One прошивки обозначены тегом legacy/v[номер версии]. В данном руководстве будет использована прошивка legacy/v1.12.1:
git checkout legacy/v1.12.1Устанавливаем дополнительные зависимости:
cd legacy/
poetry installВнесем небольшое изменение в файл script/bootstrap:
nano script/bootstrapЗамените строку:
git submodule update --init --recursiveна:
git submodule update --init --recursive --force --remoteПоследовательно нажмите Ctrl+X, Y и Enter для сохранения изменений и выхода из редактора nano.
Сборка эмулятора
cd ~/trezor-firmware/legacy/
poetry run ./script/setup
export EMULATOR=1
poetry run ./script/cibuildГотовый файл trezor.elf будет находиться в поддиректории firmware.
Запуск эмулятора
cd ~/trezor-firmware/legacy/
# Значение TREZOR_OLED_SCALE отвечает за увеличение экрана эмулятора
TREZOR_OLED_SCALE=4 ./firmware/trezor.elfСборка и установка прошивки
cd ~/trezor-firmware/legacy/
poetry run ./script/setup
export EMULATOR=0 PRODUCTION=0
poetry run ./script/cibuildГотовый файл trezor.bin будет находиться в поддиректории firmware.
Сброс устройства
Рекомендуется полностью стереть данные с устройства перед установкой собственной прошивки.
Перед сбросом устройства проверьте валидность резервной копии вашей сид-фразы, перейдя в настройки Trezor Suite > Устройство > Проверить резервную копию.
# Перезагрузитесь в режим загрузчика
trezorctl device reboot-to-bootloader
# Подтвердите действие на устройстве
trezorctl device wipe --bootloader
# Переподключите устройствоДругой способ войти в режим загрузчика: зажать левую клавишу на Trezor и подключить кабель питания.
Прошивка устройства
cd ~/trezor-firmware/legacy/
trezorctl firmware update -f firmware/trezor.bin
# Подтвердите действие на устройствеВо время сборки и установки будет отображен отпечаток прошивки (Firmware fingerprint). Он же будет отображаться при каждом запуске устройства.
Модификация прошивки
Пример модификации прошивки с установкой порта игры Pong.
Оригинальный порт написан для старых версий прошивок и во многом не совместим с современным кодом Trezor One. Кроме того, в репозитории проекта содержится только код эмулятора. Модифицированный код, проверенный на прошивке 1.12.1, доступен по ссылке. Вы можете самостоятельно ознакомиться с изменениями по сравнению с оригиналом.
Получите код Trezor Pong:
cd git clone https://github.com/crypto-warz/trezor-pong ~/trezor-pongСкопируйте файлы trezor-pong.c, trezor-sdl.c и trezor-sdl.h в поддиректорию firmware в исходном коде прошивки:
cd ~/trezor-firmware/legacy/ cp ~/trezor-pong/*.c ~/trezor-pong/*.h firmware/Отредактируйте код основного файла прошивки firmware/trezor.c:
nano firmware/trezor.cВ начале файла добавьте
#include "trezor-pong.c":... #include "otp.h" #endif #ifdef USE_SECP256K1_ZKP #include "zkp_context.h" #endif #include "trezor-pong.c" ...Найдите функцию
collect_hw_entropyи замените:static void collect_hw_entropy(bool privileged) {на:
void collect_hw_entropy(bool privileged) {В самом конце файла вставьте
pong_main();послеusbInit();:... config_init(); layoutHome(); usbInit(); pong_main(); for (;;) { ...Последовательно нажмите Ctrl+X, Y и Enter для сохранения изменений и выхода из редактора nano.
Отредактируйте Makefile
nano MakefileПосле
OBJS += winusb.oдобавьте:... OBJS += util.o OBJS += webusb.o OBJS += winusb.o ifeq ($(EMULATOR),1) OBJS += firmware/trezor-pong.o OBJS += firmware/trezor-sdl.o endif ...Соберите и запустите эмулятор по инструкции.
Соберите и установите прошивку по инструкции.
Обновление gcc
Для сборки последних версий прошивки требуется обновление gcc:
cd
wget https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
tar -xvf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
sudo mv arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/ /opt/arm-gnu-toolchain-13/
echo 'export PATH=/opt/arm-gnu-toolchain-13/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
rm arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xzДля переключения репозитория прошивки на последнюю версию выполните:
cd ~/trezor-firmware/
git checkout main




