System76 Open Firmware
An open source distribution of firmware utilizing coreboot, EDK2, and System76 firmware applications.
Please note that only the darp6, galp4, lemp9, oryp6 models are officially supported - if you brick your device it will be up to you to restore the current firmware using an external programmer.
If you would like to view schematics for any supported System76 model, please send an email to firmware@system76.com with the subject line Schematics for MODEL, where MODEL is the name of a directory in the models directory, such as darp6.
Dependencies
Install toolchain
./scripts/deps.sh
Load Rust environment (or optionally reboot)
source ~/.cargo/env
Build firmware, replace qemu with your model (look in the models directory for examples)
./scripts/build.sh qemu
Emulate firmware, only available after building the qemu model
./scripts/qemu.sh
Flashing
Flashing firmware manually is not recommended for the normal user!
Internal programmer
Use this method for flashing a system already running System76 Open Firmware.
./scripts/flash.sh <model>
External programmer
Use one of these methods for first-time flashing or flashing a bricked system.
CH341A USB programmer - slower, but easier to set up
These can be purchased from many places for around 15 USD. Make sure that the one you get has a ROM clip. Here is an example: https://www.amazon.com/Organizer-Socket-Adpter-Programmer-CH341A/dp/B07R5LPTYM
Then you can follow these steps to flash the ROM chip:
- Turn off the computer
- Unplug the AC adapter
- Remove the bottom panel
- Attach the clip to the SPI ROM chip
- Plug the CH341A into a computer with this repository built
- Verify that you can access the ROM chip, replacing
<model>
with your model:
./scripts/ch341a-dump.sh <model>
- Flash the firmware you built, replacing
<model>
with your model:
./scripts/ch341a-flash.sh <model>
SPI Pi - faster, but harder to set up
SPI Pi is a Raspberry Pi used to flash the SPI ROM. To create a SPI Pi:
- Get a Raspberry Pi 2 or 3 with Ubuntu 16.04
- Hook up a SPI clip to the SPI Pi
- The SPI Pi's SPI pinout can be found here: https://pinout.xyz/pinout/spi#
- The pinout of a SPI rom can be found here: https://www.totalphase.com/media/wysiwyg/soic8-pinout.png
- If you need more instructions, you should not be hooking up the SPI clip
- Connect the SPI Pi's SPI clip to the SPI ROM, ensuring pin 1 of the clip aligns with pin 1 on the ROM
- On the SPI Pi, run the following commands:
sudo apt install flashrom
git clone https://github.com/system76/firmware-open.git firmware
Then you can follow these steps to flash the ROM chip:
- Turn off the computer
- Unplug the AC adapter
- Remove the bottom panel
- Attach the clip to the SPI ROM chip
- Connect to the Raspberry Pi and wait it for boot
sudo tio -b 115200 /dev/ttyUSB0
- From the RPi session, test that the chip is detected.
cd firmware
./scripts/spipi.sh -r backup.rom
- From the host, flash the firmware
SPIPI=<user@spipi> ./scripts/spipi-flash.sh <model>
Intel Management Engine
The IME is present, but disabled. This is accomplished by sending a HECI command on boot, before RAM is initalized. This puts the IME in a state similar to setting the HAP bit on earlier platforms. me_cleaner is not used as it does not support IME version 14.0.
Contents
- apps - Applications
- coreboot - coreboot README
- docs - System76 Open Firmware Documentation
- ec - System76 EC
- edk2 - EDK II Project
- edk2-non-osi
- edk2-platforms - This branch holds all platforms actively maintained against the
- FSP - Intel® Firmware Support Package (Intel® FSP) Binaries
- libs - Libraries
- models - Models
- scripts
- tools - Tools