trezor-mcu/README.md

67 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2016-05-11 12:07:56 -07:00
# TREZOR Firmware
2015-08-05 07:38:53 -07:00
2016-05-11 12:07:56 -07: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 07:38:53 -07:00
2017-01-10 06:14:29 -08:00
https://trezor.io/
2015-08-05 07:38:53 -07:00
2016-05-11 12:07:56 -07:00
## How to build TREZOR firmware?
2015-08-05 07:38:53 -07:00
2017-12-18 10:38:34 -08:00
1. [Install Docker](https://docs.docker.com/engine/installation/)
2015-08-05 07:38:53 -07:00
2. `git clone https://github.com/trezor/trezor-mcu.git`
3. `cd trezor-mcu`
4. `./build-firmware.sh TAG` (where TAG is v1.5.0 for example, if left blank the script builds latest commit in master branch)
2015-08-05 07:38:53 -07:00
This creates file `build/trezor-TAG.bin` and prints its fingerprint and size at the end of the build log.
2015-08-05 07:38:53 -07:00
2018-02-18 14:13:40 -08:00
## How to build TREZOR emulator for Linux?
1. [Install Docker](https://docs.docker.com/engine/installation/)
2. `git clone https://github.com/trezor/trezor-mcu.git`
3. `cd trezor-mcu`
4. `./build-emulator.sh TAG` (where TAG is v1.5.0 for example, if left blank the script builds latest commit in master branch)
This creates binary file `build/trezor-emulator-TAG`, which can be run and works as a trezor emulator. (Use `TREZOR_OLED_SCALE` env. variable to make screen bigger.)
2016-05-11 12:07:56 -07:00
## How to build TREZOR bootloader?
2016-02-18 15:24:33 -08:00
2017-12-18 10:38:34 -08:00
1. [Install Docker](https://docs.docker.com/engine/installation/)
2016-02-18 15:24:33 -08:00
2. `git clone https://github.com/trezor/trezor-mcu.git`
3. `cd trezor-mcu`
4. `./build-bootloader.sh TAG` (where TAG is bl1.3.2 for example, if left blank the script builds latest commit in master branch)
2016-02-18 15:24:33 -08:00
This creates file `build/bootloader-TAG.bin` and prints its fingerprint and size at the end of the build log.
2016-02-18 15:24:33 -08:00
2016-05-11 12:07:56 -07:00
## How to get fingerprint of firmware signed and distributed by SatoshiLabs?
2015-08-05 07:38:53 -07:00
2017-01-10 06:14:29 -08:00
1. Pick version of firmware binary listed on https://wallet.trezor.io/data/firmware/releases.json
2. Download it: `wget -O trezor.signed.bin https://wallet.trezor.io/data/firmware/trezor-1.3.6.bin`
3. Compute fingerprint: `tail -c +257 trezor.signed.bin | sha256sum`
2015-08-05 07:38:53 -07: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 14:40:06 -08: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 10:38:34 -08:00
1. Install python-trezor: `pip install trezor` ([more info](https://github.com/trezor/python-trezor))
2017-12-10 14:40:06 -08:00
2. `trezorctl firmware_update -f build/trezor-TAG.bin`
2017-12-18 10:38:42 -08: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.
* 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`
2. To build the firmware or emulator, run `script/cibuild`
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
`trezorctl -t udp` (for example, `trezorctl -t udp get_features`).
If `trezorctl -t udp` appears to hang, make sure you have run `export TREZOR_TRANSPORT_V1=1`.