2018-04-08 00:13:46 +00:00
# TREZOR One Bootloader and Firmware
2015-08-05 14:38:53 +00:00
2016-05-11 19:07:56 +00:00
[![Build Status ](https://travis-ci.org/trezor/trezor-mcu.svg?branch=master )](https://travis-ci.org/trezor/trezor-mcu) [![gitter ](https://badges.gitter.im/trezor/community.svg )](https://gitter.im/trezor/community)
2015-08-05 14:38:53 +00:00
2017-01-10 14:14:29 +00:00
https://trezor.io/
2015-08-05 14:38:53 +00:00
2018-10-11 12:58:22 +00:00
## How to build the TREZOR bootloader, firmware and emulator
Ensure that you have Docker installed. You can follow [Docker's installation instructions ](https://docs.docker.com/engine/installation/ ).
Clone this repository:
```sh
git clone https://github.com/trezor/trezor-mcu.git`
cd trezor-mcu
```
Use the `build.sh` command to build the images.
* to build bootloader 1.6.0 and firmware 1.7.0:
```sh
./build.sh bl1.6.0 v1.7.0
```
* to build latest firmware from master:
```sh
./build.sh
```
* to build the emulator from master:
```sh
./build.sh EMU
```
* to build the emulator for version 1.7.0:
```sh
./build.sh EMU v1.7.0
```
Build results are stored in the `build/` directory. File `bootloader-<tag>.bin` represents
the bootloader, `trezor-<tag>.bin` is the firmware image, and `trezor-emulator-<tag>.elf`
is the emulator executable.
You can use `TREZOR_OLED_SCALE` environment variable to make emulator screen bigger.
2018-02-18 22:13:40 +00:00
2016-05-11 19:07:56 +00:00
## How to get fingerprint of firmware signed and distributed by SatoshiLabs?
2015-08-05 14:38:53 +00:00
2018-03-22 19:23:56 +00:00
1. Pick version of firmware binary listed on https://wallet.trezor.io/data/firmware/1/releases.json
2018-03-22 19:26:44 +00:00
2. Download it: `wget -O trezor.signed.bin https://wallet.trezor.io/data/firmware/1/trezor-1.6.1.bin`
2017-07-24 17:44:10 +00:00
3. Compute fingerprint: `tail -c +257 trezor.signed.bin | sha256sum`
2015-08-05 14:38:53 +00:00
2017-07-24 17:44:10 +00:00
Step 3 should produce the same sha256 fingerprint like your local build (for the same version tag). Firmware has a special header (of length 256 bytes) holding signatures themselves, which must be avoided while calculating the fingerprint, that's why tail command has to be used.
2017-12-10 22:40:06 +00:00
## How to install custom built firmware?
**WARNING: This will erase the recovery seed stored on the device! You should never do this on TREZOR that contains coins!**
2017-12-18 18:38:34 +00:00
1. Install python-trezor: `pip install trezor` ([more info](https://github.com/trezor/python-trezor))
2017-12-10 22:40:06 +00:00
2. `trezorctl firmware_update -f build/trezor-TAG.bin`
2017-12-18 18:38:42 +00:00
## Building for development
If you want to build device firmware, make sure you have the
[GNU ARM Embedded toolchain ](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ) installed.
2018-11-06 15:44:32 +00:00
You will also need Python 3.5 or later and [pipenv ](https://pipenv.readthedocs.io/en/latest/install/ ).
2017-12-18 18:38:42 +00:00
* If you want to build the emulator instead of the firmware, run `export EMULATOR=1 TREZOR_TRANSPORT_V1=1`
* If you want to build with the debug link, run `export DEBUG_LINK=1` . Use this if you want to run the device tests.
* When you change these variables, use `script/setup` to clean the repository
1. To initialize the repository, run `script/setup`
2018-11-06 15:44:32 +00:00
2. To initialize a Python environment, run `pipenv install`
3. To build the firmware or emulator, run `pipenv run script/cibuild`
2017-12-18 18:38:42 +00:00
If you are building device firmware, the firmware will be in `firmware/trezor.bin` .
You can launch the emulator using `firmware/trezor.elf` . To use `trezorctl` with the emulator, use
2018-11-06 15:44:32 +00:00
`trezorctl -p udp` (for example, `trezorctl -p udp get_features` ).