-
Notifications
You must be signed in to change notification settings - Fork 23
Hardware Flashing with Raspberry Pi
Note: This method is under construction, and still needs to be tested on other hardware than the T60.
The Raspberry Pi (a multipurpose $25 Linux computer) can be used as a BIOS flashing tool, thanks to its GPIO pins and SPI support.
Follow the X60 Hardware Maintenance Manual or T60 Hardware Maintenance Manual to disassemble the laptop, until you can access the BIOS chip.
For photos, follow the Libreboot T60 Recovery Guide.
- On the X60, the BIOS chip is on the bottom of the motherboard, under a layer of protective black tape.
- On the T60, the BIOS chip is just under the palmrest, but blocked by a magnesium frame (which you will have to remove).
Diagram of the 26 GPIO Pins of the Raspberry Pi Model B (for the Model B+ with 40 pins, start counting from the right and leave 14 pins):
8-pin for X60:
~~~~ LCD (Front) ~~~~
8765
----
| |
----
1234
~~~ Palmrest (back) ~~
Pin # | SPI Pin Name | BP (Seeed) | BP (Spkfun) | Beagleboard Black | Raspberry Pi |
---|---|---|---|---|---|
1 | CS | White | Red | Pin 17 | 24 |
2 | MISO | Black | Brown | Pin 21 | 21 |
3 | not used | not used | not used | not used | not used |
4 | GND | Brown | Black | Pin 1 | 25 |
5 | MOSI | Gray | Orange | Pin 18 | 19 |
6 | CLK | Purple | Yellow | Pin 22 | 23 |
7 | not used | not used | not used | not used | not used |
8 | 3.3V | red | White | 3.3V PSU RED | 17 |
Make sure the pinouts are correct; otherwise, Flashrom will fail to detect a chip, or it will "detect" a 0x0
chip. Finally, make sure that the Pomona clip makes contact with the metal wires of the chip. It can be a challenge, but keep trying.
There are two ways to supply power to the chip: plugging in an AC adapter (without turning the laptop on), and using the 8th 3.3v pin.
I have found that the SST chips work best with the 8th pin, while the Macronix chips require an AC Adapter to power up.
Never connect both the 8th pin and the AC adapter at the same time.
Your results may vary.
First, visually inspect (with a magnifying glass) the type of flashchip on the motherboard.
Next, download and compile the latest Flashrom source code on the Raspberry Pi.
sudo apt-get install build-essential pciutils usbutils libpci-dev libusb-dev libusb-1.0-0 libusb-1.0-0-dev libftdi1 libftdi-dev zlib1g-dev subversion
svn co https://code.coreboot.org/svn/flashrom/trunk flashrom
cd flashrom
make
sudo modprobe spi_bcm2708
sudo modprobe spidev
If your chip is an SST, run this command:
sudo ./flashrom -p linux_spi:dev=/dev/spidev0.0 -r test.rom
If your chip is a Macronix, run this command:
sudo ./flashrom -c "MX25L1605" -p linux_spi:dev=/dev/spidev0.0 -r test.rom
Next, check the md5sum of the dump:
md5sum test.rom
Run the flashrom
command again to make a second dump. Then, check the md5sum of the second dump:
md5sum test.rom
If the md5sums match after three tries, flashrom
has managed to read the flashchip precisely (but not always accurately). You may try and flash Libreboot now.
Note: replace
/path/to/libreboot.rom
with the location of your chosen ROM, such as../bin/x60/libreboot_usqwerty.rom
):
If your chip is an SST, run this command:
sudo ./flashrom -p linux_spi:dev=/dev/spidev0.0 -w /path/to/libreboot.rom
If your chip is a Macronix, run this command:
sudo ./flashrom -c "MX25L1605" -p linux_spi:dev=/dev/spidev0.0 -w /path/to/libreboot.rom
Once that command outputs the following, the flash has completed successfully. If not, just flash again.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
- Scruss - Simple ADC with the Raspberry Pi
- Flashing coreboot on a T60 with a Raspberry Pi - the_unconventional's blog
- Pomona SOIC Clip flashing
MCP | 3008 Pin | Pi GPIO Pin # | Pi Pin Name |
---|---|---|---|
16 | VDD |
1 | 3.3 V |
15 | VREF |
1 | 3.3 V |
14 | AGND |
6 | GND |
13 | CLK |
23 | GPIO11 SPI0_SCLK |
12 | DOUT |
21 | GPIO09 SPI0_MISO |
11 | DIN |
19 | GPIO10 SPI0_MOSI |
10 | CS |
24 | GPIO08 CE0 |
9 | DGND |
6 | GND |
- An x86, x86_64, or arm7l (for changing the libreboot.rom image mac address)
- Raspberry Pi and peripherals
- Relevant SOIC clip
- 6 female - female jumpers
- Internet connection
- Screw drivers
Follow the ThinkPad X200: Initial installation guide to disassemble the laptop, and access the BIOS rom chip.
Note:
x86#
refers to commands to be run on the x86 computer, andpi#
refers to commands to be run on the pi. A good practice is to make a work directory to keep your libreboot stuff inside.
x86# mkdir ~/work
Download NOOBS from The Raspberry Pi Foundation. Torrent download recommended, and remember to seed. :)
Download Libreboot from their releases page. For your safety, verify the GPG signature as well.
x86# gpg --keyserver prefered.keyserver.org --recv-keys 0x656F212E
x86# for signature in $(ls *.sig); do gpg --verify $signature; done
Extract NOOBS and libreboot.
x86# mkdir ~/work/noobs
x86# unzip ~/Downloads/NOOBS_v1_4_1.zip -d ~/work/noobs/
x86# cd ~/work && tar -xvJf ~/Downloads/libreboot_bin.tar.xz
Install Noobs to your fat32 formatted SD card
x86# cp -R ~/work/noobs/* /path/to/mounted/SDcard/
Plug in the NOOBs SDCard to your Raspberry Pi, and enable the following under 'Advanced Options':
SSH server
SPI
I2C
On first boot
pi# sudo apt-get update && sudo apt-get dist-upgrade && reboot
On second boot
pi# sudo apt-get update && sudo apt-get install libftdi1 libftdi-dev libusb-dev libpci-dev subversion
Other dependencies that should already be installed with the noobs base install include:
pciutils, zlib, libusb, build-essential
If they are missing then install them.
Download and build flashrom.
pi# svn co svn://flashrom.org/flashrom/trunk ~/flashrom
pi# cd ~/flashrom
pi# make
pi# sudo make install
On your x86 box change the libreboot.rom mac address
x86# cd ~/work/libreboot_bin/
Change the mac address on the libreboot images to match yours.
x86# ./ich9macchange XX:XX:XX:XX:XX:XX
Move the libreboot.rom image over to your pi
x86# scp ~/work/libreboot_bin/<path_to_your_bin> [email protected]:~/flashrom/libreboot.rom
Shutdown your pi, write down your rom chip model, and wire up the clip
pi# sudo shutdown now -hP
Chip model name
Pinout. You may want to download the image so you can zoom in on the text.
Pin # | SPI Pin Name | Raspberry Pi Pin # |
---|---|---|
1 | not used | not used |
2 | 3.3V | 1 |
3 | not used | not used |
4 | not used | not used |
5 | not used | not used |
6 | not used | not used |
7 | CS# | 24 |
8 | S0/SIO1 | 21 |
9 | not used | not used |
10 | GND | 25 |
11 | not used | not used |
12 | not used | not used |
13 | not used | not used |
14 | not used | not used |
15 | S1/SIO0 | 19 |
16 | SCLK | 23 |
Note: The raspberry pi 3.3V rail should be sufficient to power the chip during flashing, so no external power supply should be required; however, at the time of writing that has only been tested and confirmed for one chip, the MX25L6405D.
Macronix Spec sheet so you can adjust your pinout for 8 pin 4Mb chips as necessary
At this point connect your SOIC clip to the rom chip before powering on your PI.
Power on your Pi, and run the following. Ensure you swap out "your_chip_name" with the proper name/model of your chip. Check that it can be read successfully. If you cannot read the chip and receive an error similar to "no EEPROM Detected" or "0x0 Chip detected" then you may want to try powering off your PI, and switching the two pins which are connected to the IO ports. I.E. Connect pins (clip)8 to (pi)19 and pins (clip)15 to (pi)21
pi# cd ~/flashrom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread1.rom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread2.rom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread3.rom
pi# sha512sum romread*.rom
If they are identical sha512 hashes then you can generally assume that it's safe to flash your rom.
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -w libreboot.rom
It may fail a couple times, but keep at it and when you get the message Verifying flash... Verified
or Warning: Chip content is identical to the requested image
then you're done.
Shut down your pi, put your box back together, and install a libre OS for great good!
The Raspberry Pi (a multipurpose $25 Linux computer) can be used as a BIOS flashing tool, thanks to its GPIO pins and SPI support.
- $25 - Raspberry Pi Model B (Rev.2 or higher)
- $10-20 - SOIC-8 Pomona Clip
- Usually comes bundled with nice, color-colored female to female wires
GPIO Pinouts:
*Diagram made by "Pacman" from Win-Raid Forums*
SOIC Pinouts:
We have to connect the Raspberry Pi to the SOIC Clip as shown in the below diagram (using the f-f wires usually included with the Pomona clip).
(C720 Only?) The diagram depicts a "bridged" connection. You will need to fashion one with some copper wire:
Plug in the wires to the clip as shown below:
Plug in the other end of the wires to the Raspberry Pi as shown below:
(C720 only?) Plug in the "bridged" wires as shown below:
Finally, put the Pomona SOIC clip on the chip:
Once it's all set up, flashrom works out of the box.
- Pomona SOIC Clip flashing
- Use a DIY DIP System to flash an desoldered BIOS chip
Coreboot is an open source, user configurable BIOS. However, it does use a few proprietary blobs here and there.
These require hardware flashing. Due to Intel Management Firmware, proprietary blobs are required for newer Intel motherboards to even power up.
-
ThinkPad T430/X230
- xx30 BIOS Whitelist Removal
- xx30 BIOS Mod with Old Keyboard - Since Libreboot's ROMs each can use a different keyboard layout, would it be possible to modify Coreboot to work with the old xx20 keyboard? Or just mod the official BIOS to do so?
- ThinkPad X201
- ThinkPad T60p (ATI GPU)
- ThinkPad T22 - Back when Coreboot was known as "LinuxBIOS", they installed it on a ThinkPad T22 for Richard Stallman.
Most Intel Chromebooks come with Coreboot preinstalled. SeaBIOS can optionally be installed to add Windows support.
Just use John Lewis's Installation Script for All Models to autoinstall.
-
Chromebook Coreboot Installation - Install Coreboot + SeaBIOS for 2nd gen laptops. Not necessary for 3rd gen.
- Acer C7 Chromebook
- Toshiba Chromebook 2 - The only 13-inch model around with an FHD 1920x1080 IPS screen.
- Samsung Series 5 550
- Acer C720 Chromebook
- ThinkPad X131e Chromebook
- Install Typical BIOS
- Chromebook Pixel
NOTE: The Libreboot components of this wiki was divested into the Official Libreboot Documentation here. Please use that from now on.
Libreboot laptops are certified by the FSF to protect your freedom.
They contain no proprietary blobs of any kind, and have the best support for FSF certified GNU/LInux.
- Customizing Libreboot
- X60 T60 Hardware Flashing
- X200 X201 Hardware Flashing
- Installing Trisquel with Full Disk Encryption
- BIOS Flashchip Identification Method
- Phoenix BIOS Crisis Recovery - (under research) Software method for recovering the factory BIOS, even if you lost the original dump.