1*4f2df630SAndroid Build Coastguard Worker# Get Started Building EC Images (Quickly) 2*4f2df630SAndroid Build Coastguard Worker 3*4f2df630SAndroid Build Coastguard Worker[TOC] 4*4f2df630SAndroid Build Coastguard Worker 5*4f2df630SAndroid Build Coastguard WorkerThe 6*4f2df630SAndroid Build Coastguard Worker[Chromium OS Developer Guide](https://chromium.googlesource.com/chromiumos/docs/+/main/developer_guide.md) 7*4f2df630SAndroid Build Coastguard Workerand [README](../README.md) walk through the steps needed to fetch and build 8*4f2df630SAndroid Build Coastguard WorkerChromium OS source. These steps can be followed to retrieve and build EC source 9*4f2df630SAndroid Build Coastguard Workeras well. On the other hand, if your sole interest is building an EC image, the 10*4f2df630SAndroid Build Coastguard Workergeneral developer guide contains some extra unneeded steps. 11*4f2df630SAndroid Build Coastguard Worker 12*4f2df630SAndroid Build Coastguard WorkerThe fastest possible way to build an EC image is to skip the Chromium OS chroot 13*4f2df630SAndroid Build Coastguard Workerinstall entirely. The following steps have been tested on an Ubuntu 15.10 (Wily 14*4f2df630SAndroid Build Coastguard WorkerWerewolf) 64-bit host machine. Other distros / versions may be used, but 15*4f2df630SAndroid Build Coastguard Workertoolchain incompatibilities may require extra debug. 16*4f2df630SAndroid Build Coastguard Worker 17*4f2df630SAndroid Build Coastguard Worker## Building 18*4f2df630SAndroid Build Coastguard Worker 19*4f2df630SAndroid Build Coastguard Worker1. Install build / dev tools: 20*4f2df630SAndroid Build Coastguard Worker 21*4f2df630SAndroid Build Coastguard Worker ```bash 22*4f2df630SAndroid Build Coastguard Worker sudo apt-get install git libftdi-dev libusb-dev libncurses5-dev gcc-arm-none-eabi 23*4f2df630SAndroid Build Coastguard Worker ``` 24*4f2df630SAndroid Build Coastguard Worker 25*4f2df630SAndroid Build Coastguard Worker1. Sync the cros-ec git repo: 26*4f2df630SAndroid Build Coastguard Worker 27*4f2df630SAndroid Build Coastguard Worker ```bash 28*4f2df630SAndroid Build Coastguard Worker git clone https://chromium.googlesource.com/chromiumos/platform/ec 29*4f2df630SAndroid Build Coastguard Worker ``` 30*4f2df630SAndroid Build Coastguard Worker 31*4f2df630SAndroid Build Coastguard Worker1. Build your EC image: 32*4f2df630SAndroid Build Coastguard Worker 33*4f2df630SAndroid Build Coastguard Worker ```bash 34*4f2df630SAndroid Build Coastguard Worker HOSTCC=x86_64-linux-gnu-gcc make BOARD=$board 35*4f2df630SAndroid Build Coastguard Worker ``` 36*4f2df630SAndroid Build Coastguard Worker 37*4f2df630SAndroid Build Coastguard Worker## External Dependencies 38*4f2df630SAndroid Build Coastguard Worker 39*4f2df630SAndroid Build Coastguard WorkerMost boards are buildable, but some will fail due to dependencies on external 40*4f2df630SAndroid Build Coastguard Workerbinaries (such as [`futility`](#building-futility)). Also, some related tools 41*4f2df630SAndroid Build Coastguard Worker(such as `flash_ec` and `servod`) must be run from the Chromium OS chroot. Here 42*4f2df630SAndroid Build Coastguard Workeris a set of steps to setup a minimal development environment to build EC images 43*4f2df630SAndroid Build Coastguard Workerfrom the Chromium OS chroot: 44*4f2df630SAndroid Build Coastguard Worker 45*4f2df630SAndroid Build Coastguard Worker1. Create a folder for your chroot: 46*4f2df630SAndroid Build Coastguard Worker 47*4f2df630SAndroid Build Coastguard Worker ```bash 48*4f2df630SAndroid Build Coastguard Worker mkdir cros-src; cd cros-src 49*4f2df630SAndroid Build Coastguard Worker ``` 50*4f2df630SAndroid Build Coastguard Worker 51*4f2df630SAndroid Build Coastguard Worker1. Run 52*4f2df630SAndroid Build Coastguard Worker 53*4f2df630SAndroid Build Coastguard Worker ```bash 54*4f2df630SAndroid Build Coastguard Worker repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git -g minilayout 55*4f2df630SAndroid Build Coastguard Worker ``` 56*4f2df630SAndroid Build Coastguard Worker 57*4f2df630SAndroid Build Coastguard Worker1. Edit `.repo/manifest.xml`, and add `groups="minilayout"` to the platform/ec 58*4f2df630SAndroid Build Coastguard Worker project, so the line becomes: 59*4f2df630SAndroid Build Coastguard Worker 60*4f2df630SAndroid Build Coastguard Worker ``` 61*4f2df630SAndroid Build Coastguard Worker <project path="src/platform/ec" name="chromiumos/platform/ec" groups="minilayout" /> 62*4f2df630SAndroid Build Coastguard Worker ``` 63*4f2df630SAndroid Build Coastguard Worker 64*4f2df630SAndroid Build Coastguard Worker1. Run `repo sync`: 65*4f2df630SAndroid Build Coastguard Worker 66*4f2df630SAndroid Build Coastguard Worker ```bash 67*4f2df630SAndroid Build Coastguard Worker repo sync -j <number of cores on your workstatsion> 68*4f2df630SAndroid Build Coastguard Worker ``` 69*4f2df630SAndroid Build Coastguard Worker 70*4f2df630SAndroid Build Coastguard Worker1. Enter the chroot and enter your password for `sudo` if prompted: 71*4f2df630SAndroid Build Coastguard Worker 72*4f2df630SAndroid Build Coastguard Worker ```bash 73*4f2df630SAndroid Build Coastguard Worker ./chromite/bin/cros_sdk 74*4f2df630SAndroid Build Coastguard Worker ``` 75*4f2df630SAndroid Build Coastguard Worker 76*4f2df630SAndroid Build Coastguard Worker1. Set up your board: 77*4f2df630SAndroid Build Coastguard Worker 78*4f2df630SAndroid Build Coastguard Worker ```bash 79*4f2df630SAndroid Build Coastguard Worker ./setup_board --board=$BOARD 80*4f2df630SAndroid Build Coastguard Worker ``` 81*4f2df630SAndroid Build Coastguard Worker 82*4f2df630SAndroid Build Coastguard Worker (ex. `./setup_board --board=glados`) 83*4f2df630SAndroid Build Coastguard Worker 84*4f2df630SAndroid Build Coastguard Worker1. Build EC: 85*4f2df630SAndroid Build Coastguard Worker 86*4f2df630SAndroid Build Coastguard Worker ```bash 87*4f2df630SAndroid Build Coastguard Worker ./build_packages --board=$BOARD chromeos-ec 88*4f2df630SAndroid Build Coastguard Worker ``` 89*4f2df630SAndroid Build Coastguard Worker 90*4f2df630SAndroid Build Coastguard Worker1. Now, EC images for any board can be built with: 91*4f2df630SAndroid Build Coastguard Worker 92*4f2df630SAndroid Build Coastguard Worker ```bash 93*4f2df630SAndroid Build Coastguard Worker cd ~/trunk/src/platform/ec; make BOARD=$board -j 94*4f2df630SAndroid Build Coastguard Worker ``` 95*4f2df630SAndroid Build Coastguard Worker 96*4f2df630SAndroid Build Coastguard Worker## Building `futility` outside the chroot {#building-futility} 97*4f2df630SAndroid Build Coastguard Worker 98*4f2df630SAndroid Build Coastguard WorkerIf you want to build the `futility` host tool outside the normal Chrome OS 99*4f2df630SAndroid Build Coastguard Workerchroot self-contained environment, you can try the following 100*4f2df630SAndroid Build Coastguard Worker 101*4f2df630SAndroid Build Coastguard Worker1. Install futility build dependencies: 102*4f2df630SAndroid Build Coastguard Worker 103*4f2df630SAndroid Build Coastguard Worker ```bash 104*4f2df630SAndroid Build Coastguard Worker sudo apt-get install uuid-dev liblzma-dev libyaml-dev libssl-dev 105*4f2df630SAndroid Build Coastguard Worker ``` 106*4f2df630SAndroid Build Coastguard Worker 107*4f2df630SAndroid Build Coastguard Worker1. Get the vboot reference sources: 108*4f2df630SAndroid Build Coastguard Worker 109*4f2df630SAndroid Build Coastguard Worker ```bash 110*4f2df630SAndroid Build Coastguard Worker git clone https://chromium.googlesource.com/chromiumos/platform/vboot_reference 111*4f2df630SAndroid Build Coastguard Worker ``` 112*4f2df630SAndroid Build Coastguard Worker 113*4f2df630SAndroid Build Coastguard Worker1. Build it: 114*4f2df630SAndroid Build Coastguard Worker 115*4f2df630SAndroid Build Coastguard Worker ```bash 116*4f2df630SAndroid Build Coastguard Worker cd vboot_reference ; make 117*4f2df630SAndroid Build Coastguard Worker ``` 118*4f2df630SAndroid Build Coastguard Worker 119*4f2df630SAndroid Build Coastguard Worker1. Install it in `/usr/local/bin`: 120*4f2df630SAndroid Build Coastguard Worker 121*4f2df630SAndroid Build Coastguard Worker ```bash 122*4f2df630SAndroid Build Coastguard Worker sudo make install 123*4f2df630SAndroid Build Coastguard Worker ``` 124*4f2df630SAndroid Build Coastguard Worker 125*4f2df630SAndroid Build Coastguard Worker1. Add `/usr/local/bin` to your default `PATH`: 126*4f2df630SAndroid Build Coastguard Worker 127*4f2df630SAndroid Build Coastguard Worker ```bash 128*4f2df630SAndroid Build Coastguard Worker export PATH="${PATH}:/usr/local/bin" 129*4f2df630SAndroid Build Coastguard Worker ``` 130