709 lines
52 KiB
HTML
709 lines
52 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" dir="auto">
|
||
|
||
<head><meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<meta name="robots" content="index, follow">
|
||
<title>Installing Coreboot on a Thinkpad T430s | Part 1 | Tobias Manske</title>
|
||
|
||
<meta name="keywords" content="hacking, thinkpad, hardware, english" />
|
||
<meta name="description" content="I modified my Thinkpad T430s to run Coreboot.">
|
||
<meta name="author" content="Tobias Manske">
|
||
<link rel="canonical" href="https://tobiasmanske.de/posts/thinkpad-coreboot-part1/" />
|
||
<link href="/assets/css/stylesheet.min.228bf87c4c9d52e4f04e9a53becb48c4b7857b69a9535b3ff73c6e61ff51c93b.css" integrity="sha256-Iov4fEydUuTwTppTvstIxLeFe2mpU1s/9zxuYf9RyTs=" rel="preload stylesheet"
|
||
as="style">
|
||
|
||
<link rel="icon" href="https://tobiasmanske.de/favicon.ico">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="https://tobiasmanske.de/favicon-16x16.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="https://tobiasmanske.de/favicon-32x32.png">
|
||
<link rel="apple-touch-icon" href="https://tobiasmanske.de/apple-touch-icon.png">
|
||
<link rel="mask-icon" href="https://tobiasmanske.de/safari-pinned-tab.svg">
|
||
<meta name="theme-color" content="#2e2e33">
|
||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||
<meta name="generator" content="Hugo 0.81.0" />
|
||
|
||
|
||
|
||
<meta property="og:title" content="Installing Coreboot on a Thinkpad T430s | Part 1" />
|
||
<meta property="og:description" content="I modified my Thinkpad T430s to run Coreboot." />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:url" content="https://tobiasmanske.de/posts/thinkpad-coreboot-part1/" />
|
||
<meta property="og:image" content="https://tobiasmanske.de/images/writing-the-new-chip-e1522281795259-750x410.jpg" /><meta property="article:published_time" content="2018-03-29T00:00:00+00:00" />
|
||
<meta property="article:modified_time" content="2018-04-07T00:00:00+00:00" />
|
||
<meta name="twitter:site" content="@rad4day">
|
||
<meta name="twitter:creator" content="@rad4day" />
|
||
<meta name="twitter:title" content="Installing Coreboot on a Thinkpad T430s | Part 1 | Tobias Manske" />
|
||
<meta name="twitter:description" content="" />
|
||
<meta name="twitter:url" content="https://tobiasmanske.de/posts/thinkpad-coreboot-part1/" />
|
||
<meta name="twitter:image" content="https://tobiasmanske.de" />
|
||
<meta name="twitter:image:src" content="https://tobiasmanske.de" />
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BlogPosting",
|
||
"headline": "Installing Coreboot on a Thinkpad T430s | Part 1",
|
||
"name": "Installing Coreboot on a Thinkpad T430s | Part 1",
|
||
"description": "I modified my Thinkpad T430s to run Coreboot.",
|
||
"keywords": [
|
||
"hacking", "thinkpad", "hardware", "english"
|
||
],
|
||
"articleBody": "Why would you flash Coreboot? There are several reasons why you should consider doing this. The BIOS1 on those Laptops is quite restrictive. You’re limited to 3 rather old WiFi card models, which only support 802.11n and are rather slow by today’s standards. If you try a non-whitelisted card it will refuse to boot until you remove the card. Also, there are no updates released by Lenovo to mitigate several exploits to the Intel ME. Another good point would be that you don’t know what the BIOS is doing in the background, it could send data home. Coreboot replaces the bios and therefore solves most of these issues. There is a python script to solve the Intel ME problem.\n Before you start Please make sure that you understand the following things before you start. It could be a major pain to brick your device or having to uninstall the mod later on.\nEC modding As far as I know, it’s not possible to flash the embedded controller without the original firmware/bios. So please apply any EC mods before you replace your bios. Here are some things which require EC modification, which you should really consider doing first. Thanks to Hamish Coleman it’s rather easy. Visit his project on GitHub!\n classic keyboard mod battery whitelist removal Don’t turn your device into an expensive paperweight Just to make it clear. You’re likely to turn your Thinkpad into a brick trying to swap the bios chip. Please remember that removing the chip is not necessary if you don’t suck at soldering and manage to solder wires to the chip. I still recommend replacing the chip, though. You can skip the whole desoldering and resoldering part if your chip already is a SOIC8 package.\n List of parts During the series, I will use the following tools:\n Disassembly Size 1 Phillips screwdriver Chip removal Heat resistant tape Hot air station Flux Tweezers a 500°C tested working surface Reading and writing to the chip Chinese SOIC8 test clip Raspberry Pi2 flashrom — software to flash and read over SPI Some really tiny copper cables and some jumper wires soldering iron Installing the new chip 25Q128FVSIG – 3V – SOIC8 Chip — to replace the BIOS chip 60W soldering iron flux and solder Optional Thermal paste — you’re disassembling the whole thing, so why not reapply some fresh paste to the CPU? Disassembling the Thinkpad For a detailed guide on how to disassemble it, you can and should look into the official maintenance manual from Lenovo.\nProtip: Take pictures of screw placements and antenna cable routing.\nWhat I tried before removing the chip The first thing I tried was to solder way too big wires to the exposed little solder blobs. Thereby, I destroyed the solder blobs and now the board is throwing CMOS errors upon boot. I probably should’ve unplugged the CMOS battery. It still measures 3.10V though, which was slightly worrying as I thought I had damaged the board. As it turns out I didn’t. Still, it was not a smart idea, so disconnect your CMOS battery before soldering\nAlso, the bios didn’t boot after I reassembled the Laptop. Reheating the “destroyed” joints seems to have fixed this. Meaning that the BIOS chip was not broken at this point. So I finally decided to remove it from the board. As I didn’t have a heat gun at the time, I finally ordered one.\n Preparing the board We will heat the board up quite massively, as the WSON chip is connected to the big ground plains via a rather big pad under the chip. There are really small components around our chip which would be desoldered long before the chip if we heat them up. Also, as we don’t want them flying around, we’ll tape them off with our heat resistant tape. I used Kapton-Tape for this, which is not optimal as it is only made to withstand up to 280°C. If you have access to actual heat shielding tape made of aluminium or another metal, go for it. Just make sure to take your time and fit it tightly to the board. In my personal experience, the Kapton-tape is good enough that you don’t even desolder the small components. Well, at least they don’t move if they do and resolder fine.\nBoard covered in Kapton tape – notice the dodgy solder balls around the chip Desoldering the chip Now that you have prepared the board it’s time to take your heat gun. You cannot use a soldering iron as there is a large pad below the chip. I set mine to around 350°C (~660°F) and a medium airflow. Make sure to blow the air straight at the board and not at an angle to avoid desoldering and blowing away those tiny resistors. Cycle over the chip and use your tweezers to test if it came loose and finally remove the chip. Even if you never used a heat gun before, it’s not that hard. Just don’t pull on the chip while there is still solder holding it down. Remove the Kapton-Tape from the board when you’re done unless you want to use the heat gun to solder the replacement into place. Don’t throw the old one away, we’ll need it later.\nThe chip finally came off the board without lifting any pads. — the Kapton-Tape has darkened a bit.\nSoldering the new chip Your replacement chip is a SOIC8 package. If you soldered SMD parts before then you should have no problem. In case you haven’t: Make sure you align the indent on the chip with the white mark on the board. The indent tells you where PIN-1 is and the mark on the board shows you where it should be soldered to. If there is still a rather big amount of solder on the pads consider removing it using some solder wick. Align the chip on the board and solder one pin to the board so it doesn’t move anymore. Then take your time soldering the other seven.\nThe new chip is soldered to the board, you can clearly see the alignment of the chip in the picture.\nExtracting the original firmware At this point, we have a blank chip in our Thinkpad, so it won’t boot. To fix this and to be able to prepare coreboot we need to extract the original from the chip we desoldered. To achieve this I used a Raspberry Pi, jumper wires and some really tiny copper wire. I cut one side of the jumper wire off and attached the tiny copper wires. then I soldered those to our old chip. To relieve stress I used the tape to hold it down.\nWires soldered to the chip, make sure you know where Pin 1 is before you tape it down. Later I spaced the wires on the left side out a bit more to prevent a short.\n Now you have to setup your Raspberry Pi. You need to install flashrom and enable SPI.\nFirst install necessary tools and setup SPI\n1 2 pi@raspberrypi:~ $ sudo apt install flashrom pi@raspberrypi:~ $ sudo raspi-config Enable “P4 SPI” under “Interfacing Options” then reboot.\nWiring the chip to the Pi I followed the Winbond datasheet and the flashrom documentation to wire the Pi up.\n Chip Pin Raspberry Pin Chip Pin Raspberry Pin 1 24 5 19 2 21 6 23 3 17 7 17 4 25 8 17 Flashrom First, check if the chip gets recognized\n1 2 3 4 5 6 7 8 pi@raspberrypi:~ $ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=30000 flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found Winbond flash chip \"W25Q128.V\" (16384 kB, SPI) on linux_spi. No operations were specified. If it doesn’t look like this, try lowering the spispeed first. If it doesn’t work then, it means that you probably did wire it up wrong.\nNow we read the contents at least 2 times and compare the checksums to make sure we have a valid reading.\n1 2 3 4 5 6 7 8 pi@raspberrypi:~/rom $ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=30000 -r 1.rom flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found Winbond flash chip \"W25Q128.V\" (16384 kB, SPI) on linux_spi. Reading flash... done. repeat this step at least another time, change “1.rom” to “2.rom” etc.\nthen compare the checksums\n1 2 3 4 5 pi@raspberrypi:~/rom $ md5sum *.rom ee8d5c6b4cb60fff9dbb2a359626dd96 1.rom ee8d5c6b4cb60fff9dbb2a359626dd96 2.rom ee8d5c6b4cb60fff9dbb2a359626dd96 3.rom Looks fine :) make sure to store one of those somewhere save! You’ll need it if you ever want to update the Embedded Controller or don’t want to use Coreboot anymore.\nFlashing and testing our new chip Before we create a coreboot image, we’ll flash our original bios to our new chip. This way we make sure that we soldered everything correctly and our new chip works. First, you wire up your SOIC8-clip. The wiring is the same as in the table above. Then you clip it onto the chip on the board, make sure that there is no battery attached to the board!\nOn our Raspberry Pi, we now verify that the chip gets recognized and then flash the old firmware.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 pi@raspberrypi:~ $ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=30000 flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found Winbond flash chip \"W25Q128.V\" (16384 kB, SPI) on linux_spi. No operations were specified. pi@raspberrypi:~/rom $ sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=30000 --write 1.rom flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop... OK. Found Winbond flash chip \"W25Q128.V\" (16384 kB, SPI) on linux_spi. Reading old flash chip contents... done. Erasing and writing flash chip... Erase/write done. Verifying flash... VERIFIED. Testing At this point, you connect a monitor via VGA or the display to the LVDS connector, plug in the keyboard and connect the board to power. Try to power on, if it shows you the Thinkpad logo everything works. (Congrats!)\nIf the power LED just lights up shortly, try the following. Disconnect power then press the power button for 1 second then release for one second. Repeat this 10 times, then keep it pressed for 30s. Now plug the cord back in and try booting again. If it still doesn’t work check your solder joints. Sounds stupid, but worked for me.\n Creating a Coreboot image I’ll show you how to do this in Part 2, which I just released.The 2nd part will not be copied over to this blog as it was never really completed. There has always been some discrepancies I don’t feel comfortable with. If you need help setting up coreboot write a message below, or use the contact buttons to the right.\n I know it’s actually UEFI based, but I’ll keep calling it BIOS as the search term is more common. ↩︎\n You can use any other SPI programmer which is supported by flashrom, or even write your own program and use unsupported programmers. The protocol is not that complex. ↩︎\n ",
|
||
"wordCount" : "1868",
|
||
"inLanguage": "en",
|
||
"image":"https://tobiasmanske.de/images/writing-the-new-chip-e1522281795259-750x410.jpg","datePublished": "2018-03-29T00:00:00Z",
|
||
"dateModified": "2018-04-07T00:00:00Z",
|
||
"author":{
|
||
"@type": "Person",
|
||
"name": "Tobias Manske"
|
||
},
|
||
"mainEntityOfPage": {
|
||
"@type": "WebPage",
|
||
"@id": "https://tobiasmanske.de/posts/thinkpad-coreboot-part1/"
|
||
},
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "Tobias Manske",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "https://tobiasmanske.de/favicon.ico"
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
|
||
|
||
</head>
|
||
|
||
<body class="" id="top">
|
||
<script>
|
||
if (localStorage.getItem("pref-theme") === "dark") {
|
||
document.body.classList.add('dark');
|
||
} else if (localStorage.getItem("pref-theme") === "light") {
|
||
document.body.classList.remove('dark')
|
||
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||
document.body.classList.add('dark');
|
||
}
|
||
|
||
</script>
|
||
<noscript>
|
||
<style type="text/css">
|
||
.theme-toggle,
|
||
.top-link {
|
||
display: none;
|
||
}
|
||
|
||
</style>
|
||
</noscript>
|
||
<header class="header">
|
||
<nav class="nav">
|
||
<div class="logo">
|
||
<a href="https://tobiasmanske.de" accesskey="h" title="Tobias Manske (Alt + H)">Tobias Manske</a>
|
||
<span class="logo-switches">
|
||
<a id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
|
||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||
</svg>
|
||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
|
||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||
stroke-linejoin="round">
|
||
<circle cx="12" cy="12" r="5"></circle>
|
||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||
</svg>
|
||
</a>
|
||
|
||
|
||
</span>
|
||
</div>
|
||
<ul id="menu" onscroll="menu_on_scroll()">
|
||
<li>
|
||
<a href="https://tobiasmanske.de/impressum" title="Impressum">
|
||
<span>Impressum</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a href="https://tobiasmanske.de/datenschutzerklarung" title="Datenschutzerklärung">
|
||
<span>Datenschutzerklärung</span>
|
||
</a>
|
||
</li></ul>
|
||
</nav>
|
||
</header>
|
||
|
||
<main class="main">
|
||
|
||
<article class="post-single">
|
||
<header class="post-header">
|
||
<div class="breadcrumbs">
|
||
|
||
<a href="https://tobiasmanske.de">Home</a> » <a href="https://tobiasmanske.de/posts/">Posts</a>
|
||
</div>
|
||
<h1 class="post-title">
|
||
Installing Coreboot on a Thinkpad T430s | Part 1
|
||
</h1>
|
||
<div class="post-meta">
|
||
|
||
March 29, 2018 · Tobias Manske
|
||
|
||
</div>
|
||
</header>
|
||
<figure class="entry-cover"><img src="https://tobiasmanske.de/images/writing-the-new-chip-e1522281795259-750x410.jpg" alt="">
|
||
|
||
</figure>
|
||
|
||
<div class="toc">
|
||
<details >
|
||
<summary accesskey="c" title="(Alt + C)">
|
||
<div class="details">Table of Contents</div>
|
||
</summary>
|
||
<div class="inner"><ul><li>
|
||
<a href="#why-would-you-flash-coreboot" aria-label="Why would you flash Coreboot?">Why would you flash Coreboot?</a></li><li>
|
||
<a href="#before-you-start" aria-label="Before you start">Before you start</a><ul>
|
||
<li>
|
||
<a href="#ec-modding" aria-label="EC modding">EC modding</a></li><li>
|
||
<a href="#dont-turn-your-device-into-an-expensive-paperweight" aria-label="Don&rsquo;t turn your device into an expensive paperweight">Don’t turn your device into an expensive paperweight</a></li><li>
|
||
<a href="#list-of-parts" aria-label="List of parts">List of parts</a></li></ul>
|
||
</li><li>
|
||
<a href="#disassembling-the-thinkpad" aria-label="Disassembling the Thinkpad">Disassembling the Thinkpad</a><ul>
|
||
<li>
|
||
<a href="#what-i-tried-before-removing-the-chip" aria-label="What I tried before removing the chip">What I tried before removing the chip</a></li></ul>
|
||
</li><li>
|
||
<a href="#preparing-the-board" aria-label="Preparing the board">Preparing the board</a></li><li>
|
||
<a href="#desoldering-the-chip" aria-label="Desoldering the chip">Desoldering the chip</a></li><li>
|
||
<a href="#soldering-the-new-chip" aria-label="Soldering the new chip">Soldering the new chip</a></li><li>
|
||
<a href="#extracting-the-original-firmware" aria-label="Extracting the original firmware">Extracting the original firmware</a><ul>
|
||
<li>
|
||
<a href="#wiring-the-chip-to-the-pi" aria-label="Wiring the chip to the Pi">Wiring the chip to the Pi</a></li><li>
|
||
<a href="#flashrom" aria-label="Flashrom">Flashrom</a></li></ul>
|
||
</li><li>
|
||
<a href="#flashing-and-testing-our-new-chip" aria-label="Flashing and testing our new chip">Flashing and testing our new chip</a><ul>
|
||
<li>
|
||
<a href="#testing" aria-label="Testing">Testing</a></li></ul>
|
||
</li><li>
|
||
<a href="#creating-a-coreboot-image" aria-label="Creating a Coreboot image">Creating a Coreboot image</a></li></ul>
|
||
</div>
|
||
</details>
|
||
</div>
|
||
<div class="post-content">
|
||
<h2 id="why-would-you-flash-coreboot">Why would you flash Coreboot?<a hidden class="anchor" aria-hidden="true" href="#why-would-you-flash-coreboot">#</a></h2>
|
||
<p>There are several reasons why you should consider doing this. The
|
||
BIOS<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> on those Laptops is quite restrictive. You’re
|
||
limited to 3 rather old WiFi card models, which only support 802.11n and
|
||
are rather slow by today’s standards. If you try a non-whitelisted card
|
||
it will refuse to boot until you remove the card. Also, there are no
|
||
updates released by Lenovo to mitigate several exploits to the Intel ME.
|
||
Another good point would be that you don’t know what the BIOS is doing
|
||
in the background, it could send data home. Coreboot replaces the bios
|
||
and therefore solves most of these issues. There is a <a href="https://github.com/corna/me_cleaner">python
|
||
script</a> to solve the Intel ME
|
||
problem.</p>
|
||
<hr>
|
||
<h2 id="before-you-start">Before you start<a hidden class="anchor" aria-hidden="true" href="#before-you-start">#</a></h2>
|
||
<p>Please make sure that you understand the following things before you
|
||
start. It could be a major pain to brick your device or having to
|
||
uninstall the mod later on.</p>
|
||
<h3 id="ec-modding">EC modding<a hidden class="anchor" aria-hidden="true" href="#ec-modding">#</a></h3>
|
||
<p>As far as I know, it’s not possible to flash the embedded controller
|
||
without the original firmware/bios. So please apply any EC mods before
|
||
you replace your bios. Here are some things which require EC
|
||
modification, which you should really consider doing first. Thanks to
|
||
Hamish Coleman it’s rather easy. Visit <a href="https://github.com/hamishcoleman/thinkpad-ec">his
|
||
project</a> on GitHub!</p>
|
||
<ol>
|
||
<li><a href="http://www.instructables.com/id/ThinkPad-T430T430sX230-Classic-Keyboard-Mod/">classic keyboard mod</a></li>
|
||
<li>battery whitelist removal</li>
|
||
</ol>
|
||
<h3 id="dont-turn-your-device-into-an-expensive-paperweight">Don’t turn your device into an expensive paperweight<a hidden class="anchor" aria-hidden="true" href="#dont-turn-your-device-into-an-expensive-paperweight">#</a></h3>
|
||
<p>Just to make it clear. <strong>You’re likely to turn your Thinkpad into a
|
||
brick</strong> trying to swap the bios chip. Please remember that removing the
|
||
chip is not necessary if you <a href="https://www.reddit.com/r/thinkpad/comments/7ce1q1/installing_coreboot_on_the_t430s_in_preparation/">don’t suck at
|
||
soldering</a>
|
||
and manage to solder wires to the chip. I still recommend replacing the
|
||
chip, though. You can skip the whole desoldering and resoldering part if
|
||
your chip already is a SOIC8 package.</p>
|
||
<hr>
|
||
<h3 id="list-of-parts">List of parts<a hidden class="anchor" aria-hidden="true" href="#list-of-parts">#</a></h3>
|
||
<p>During the series, I will use the following tools:</p>
|
||
<ul>
|
||
<li>Disassembly
|
||
<ul>
|
||
<li>Size 1 Phillips screwdriver</li>
|
||
</ul>
|
||
</li>
|
||
<li>Chip removal
|
||
<ul>
|
||
<li>Heat resistant tape</li>
|
||
<li>Hot air station</li>
|
||
<li>Flux</li>
|
||
<li>Tweezers</li>
|
||
<li>a 500°C tested working surface</li>
|
||
</ul>
|
||
</li>
|
||
<li>Reading and writing to the chip
|
||
<ul>
|
||
<li>Chinese SOIC8 test clip</li>
|
||
<li>Raspberry Pi<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
|
||
<li>flashrom — software to flash and read over SPI</li>
|
||
<li>Some really tiny copper cables and some jumper wires</li>
|
||
<li>soldering iron</li>
|
||
</ul>
|
||
</li>
|
||
<li>Installing the new chip
|
||
<ul>
|
||
<li>25Q128FVSIG – 3V – SOIC8 Chip — to replace the BIOS chip</li>
|
||
<li>60W soldering iron</li>
|
||
<li>flux and solder</li>
|
||
</ul>
|
||
</li>
|
||
<li>Optional
|
||
<ul>
|
||
<li>Thermal paste — you’re disassembling the whole thing, so why
|
||
not reapply some fresh paste to the CPU?</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<hr>
|
||
<h2 id="disassembling-the-thinkpad">Disassembling the Thinkpad<a hidden class="anchor" aria-hidden="true" href="#disassembling-the-thinkpad">#</a></h2>
|
||
<p>For a detailed guide on how to disassemble it, you can and should look
|
||
into the <a href="https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/0b48538.pdf">official maintenance
|
||
manual</a>
|
||
from Lenovo.</p>
|
||
<p>Protip: Take pictures of screw placements and antenna cable routing.</p>
|
||
<h3 id="what-i-tried-before-removing-the-chip">What I tried before removing the chip<a hidden class="anchor" aria-hidden="true" href="#what-i-tried-before-removing-the-chip">#</a></h3>
|
||
<p>The first thing I tried was to solder way too big wires to the exposed
|
||
little solder blobs. Thereby, I destroyed the solder blobs and now the
|
||
board is throwing CMOS errors upon boot. I probably should’ve unplugged
|
||
the CMOS battery. It still measures 3.10V though, which was slightly
|
||
worrying as I thought I had damaged the board. As it turns out I didn’t.
|
||
Still, it was not a smart idea, so <em>disconnect your CMOS battery before
|
||
soldering</em></p>
|
||
<p><img src="/images/Multimeter-192x300.jpg#center" alt="The voltage measurement of CMOS-Battery"></p>
|
||
<p>Also, the bios didn’t boot after I reassembled the Laptop. Reheating the
|
||
“destroyed” joints seems to have fixed this. Meaning that the BIOS chip
|
||
was not broken at this point. So I finally decided to remove it from the
|
||
board. As I didn’t have a heat gun at the time, I finally ordered one.</p>
|
||
<p> </p>
|
||
<h2 id="preparing-the-board">Preparing the board<a hidden class="anchor" aria-hidden="true" href="#preparing-the-board">#</a></h2>
|
||
<p>We will heat the board up quite massively, as the WSON chip is connected
|
||
to the big ground plains via a rather big pad under the chip. There are
|
||
really small components around our chip which would be desoldered long
|
||
before the chip if we heat them up. Also, as we don’t want them flying around, we’ll tape them
|
||
off with our heat resistant tape. I used Kapton-Tape for this, which is
|
||
not optimal as it is only made to withstand up to 280°C. If you have
|
||
access to actual heat shielding tape made of aluminium or another metal,
|
||
go for it. Just make sure to take your time and fit it tightly to the
|
||
board. In my personal experience, the Kapton-tape is good enough that
|
||
you don’t even desolder the small components. Well, at least they don’t move if they do and resolder fine.</p>
|
||
<p><img src="/images/IMG_20180321_152222-e1522049347702-1024x579.jpg#center" alt="Board covered in Kapton tape – notice the dodgy solder balls around the chip"><br>
|
||
<em>Board covered in Kapton tape – notice the dodgy solder balls around the chip</em>
|
||
</p>
|
||
<h2 id="desoldering-the-chip">Desoldering the chip<a hidden class="anchor" aria-hidden="true" href="#desoldering-the-chip">#</a></h2>
|
||
<p>Now that you have prepared the board it’s time to take your heat gun.
|
||
You cannot use a soldering iron as there is a large pad below the chip.
|
||
I set mine to around 350°C (~660°F) and a medium airflow. Make sure to
|
||
blow the air straight at the board and not at an angle to avoid
|
||
desoldering and blowing away those tiny resistors. Cycle over the chip
|
||
and use your tweezers to test if it came loose and finally remove the
|
||
chip. Even if you never used a heat gun before, it’s not that hard. Just
|
||
don’t pull on the chip while there is still solder holding it down.
|
||
Remove the Kapton-Tape from the board when you’re done unless you want
|
||
to use the heat gun to solder the replacement into place. Don’t throw
|
||
the old one away, we’ll need it later.</p>
|
||
<p><img src="/images/desoldered-e1522272630299-1024x579.jpg#center" alt="The chip finally came off the board without lifting any pads. — the Kapton-Tape has darkened a bit.">
|
||
<em>The chip finally came off the board without lifting any pads. — the Kapton-Tape has darkened a bit.</em></p>
|
||
<h2 id="soldering-the-new-chip">Soldering the new chip<a hidden class="anchor" aria-hidden="true" href="#soldering-the-new-chip">#</a></h2>
|
||
<p>Your replacement chip is a SOIC8 package. If you soldered SMD parts
|
||
before then you should have no problem. In case you haven’t: Make sure
|
||
you align the indent on the chip with the white mark on the board. The
|
||
indent tells you where PIN-1 is and the mark on the board shows you
|
||
where it should be soldered to. If there is still a rather big amount of
|
||
solder on the pads consider removing it using some solder wick. Align
|
||
the chip on the board and solder one pin to the board so it doesn’t move
|
||
anymore. Then take your time soldering the other seven.</p>
|
||
<p><img src="/images/new-chip-e1522273951282-1024x579.jpg#center" alt="The new chip is soldered to the board, you can clearly see the alignment of the chip in the picture.">
|
||
<em>The new chip is soldered to the board, you can clearly see the alignment of the chip in the picture.</em></p>
|
||
<h2 id="extracting-the-original-firmware">Extracting the original firmware<a hidden class="anchor" aria-hidden="true" href="#extracting-the-original-firmware">#</a></h2>
|
||
<p>At this point, we have a blank chip in our Thinkpad, so it won’t boot.
|
||
To fix this and to be able to prepare coreboot we need to extract the
|
||
original from the chip we desoldered. To achieve this I used a Raspberry
|
||
Pi, jumper wires and some really tiny copper wire. I cut one side of the
|
||
jumper wire off and attached the tiny copper wires. then I soldered
|
||
those to our old chip. To relieve stress I used the tape to hold it
|
||
down.</p>
|
||
<p><img src="/images/soldered-wires-1-294x300.jpg#center" alt="Wires soldered to the chip, make sure you know where Pin 1 is before you tape it down. Later I spaced the wires on the left side out a bit more to prevent a short."><br>
|
||
<em>Wires soldered to the chip, make sure you know where Pin 1 is before you tape it down. Later I spaced the wires on the left side out a bit more to prevent a short.</em></p>
|
||
<hr>
|
||
<p>Now you have to setup your Raspberry Pi. You need to install flashrom
|
||
and enable SPI.</p>
|
||
<p>First install necessary tools and setup SPI</p>
|
||
<div class="highlight"><div class="chroma">
|
||
<table class="lntable"><tr><td class="lntd">
|
||
<pre class="chroma"><code><span class="lnt">1
|
||
</span><span class="lnt">2
|
||
</span></code></pre></td>
|
||
<td class="lntd">
|
||
<pre class="chroma"><code class="language-bash" data-lang="bash">pi@raspberrypi:~ $ sudo apt install flashrom
|
||
pi@raspberrypi:~ $ sudo raspi-config
|
||
</code></pre></td></tr></table>
|
||
</div>
|
||
</div><p>
|
||
Enable “P4 SPI” under “Interfacing Options” then reboot.</p>
|
||
<h3 id="wiring-the-chip-to-the-pi">Wiring the chip to the Pi<a hidden class="anchor" aria-hidden="true" href="#wiring-the-chip-to-the-pi">#</a></h3>
|
||
<p>I followed the <a href="https://www.winbond.com/resource-files/w25q128fv_revhh1_100913_website1.pdf">Winbond
|
||
datasheet</a>
|
||
and the <a href="https://www.flashrom.org/RaspberryPi">flashrom documentation</a>
|
||
to wire the Pi up.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Chip Pin</th>
|
||
<th>Raspberry Pin</th>
|
||
<th>Chip Pin</th>
|
||
<th>Raspberry Pin</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>1</td>
|
||
<td>24</td>
|
||
<td>5</td>
|
||
<td>19</td>
|
||
</tr>
|
||
<tr>
|
||
<td>2</td>
|
||
<td>21</td>
|
||
<td>6</td>
|
||
<td>23</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td>17</td>
|
||
<td>7</td>
|
||
<td>17</td>
|
||
</tr>
|
||
<tr>
|
||
<td>4</td>
|
||
<td>25</td>
|
||
<td>8</td>
|
||
<td>17</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h3 id="flashrom">Flashrom<a hidden class="anchor" aria-hidden="true" href="#flashrom">#</a></h3>
|
||
<p>First, check if the chip gets recognized</p>
|
||
<div class="highlight"><div class="chroma">
|
||
<table class="lntable"><tr><td class="lntd">
|
||
<pre class="chroma"><code><span class="lnt">1
|
||
</span><span class="lnt">2
|
||
</span><span class="lnt">3
|
||
</span><span class="lnt">4
|
||
</span><span class="lnt">5
|
||
</span><span class="lnt">6
|
||
</span><span class="hl"><span class="lnt">7
|
||
</span></span><span class="lnt">8
|
||
</span></code></pre></td>
|
||
<td class="lntd">
|
||
<pre class="chroma"><code class="language-bash" data-lang="bash">pi@raspberrypi:~ $ sudo flashrom -p linux_spi:dev<span class="o">=</span>/dev/spidev0.0,spispeed<span class="o">=</span><span class="m">30000</span>
|
||
|
||
flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ <span class="o">(</span>armv7l<span class="o">)</span>
|
||
flashrom is free software, get the <span class="nb">source</span> code at https://flashrom.org
|
||
|
||
Calibrating delay loop... OK.
|
||
<span class="hl">Found Winbond flash chip <span class="s2">"W25Q128.V"</span> <span class="o">(</span><span class="m">16384</span> kB, SPI<span class="o">)</span> on linux_spi.
|
||
</span>No operations were specified.</code></pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<p>If it doesn’t look like this, try lowering the spispeed first. If it
|
||
doesn’t work then, it means that you probably did wire it up wrong.</p>
|
||
<p>Now we read the contents at least 2 times and compare the checksums to
|
||
make sure we have a valid reading.</p>
|
||
<div class="highlight"><div class="chroma">
|
||
<table class="lntable"><tr><td class="lntd">
|
||
<pre class="chroma"><code><span class="lnt">1
|
||
</span><span class="lnt">2
|
||
</span><span class="lnt">3
|
||
</span><span class="lnt">4
|
||
</span><span class="lnt">5
|
||
</span><span class="lnt">6
|
||
</span><span class="lnt">7
|
||
</span><span class="lnt">8
|
||
</span></code></pre></td>
|
||
<td class="lntd">
|
||
<pre class="chroma"><code class="language-bash" data-lang="bash">pi@raspberrypi:~/rom $ sudo flashrom -p linux_spi:dev<span class="o">=</span>/dev/spidev0.0,spispeed<span class="o">=</span><span class="m">30000</span> -r 1.rom
|
||
|
||
flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ <span class="o">(</span>armv7l<span class="o">)</span>
|
||
flashrom is free software, get the <span class="nb">source</span> code at https://flashrom.org
|
||
|
||
Calibrating delay loop... OK.
|
||
Found Winbond flash chip <span class="s2">"W25Q128.V"</span> <span class="o">(</span><span class="m">16384</span> kB, SPI<span class="o">)</span> on linux_spi.
|
||
Reading flash... <span class="k">done</span>.</code></pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<p>repeat this step at least another time, change “1.rom” to “2.rom” etc.</p>
|
||
<p>then compare the checksums</p>
|
||
<div class="highlight"><div class="chroma">
|
||
<table class="lntable"><tr><td class="lntd">
|
||
<pre class="chroma"><code><span class="lnt">1
|
||
</span><span class="lnt">2
|
||
</span><span class="lnt">3
|
||
</span><span class="lnt">4
|
||
</span><span class="lnt">5
|
||
</span></code></pre></td>
|
||
<td class="lntd">
|
||
<pre class="chroma"><code class="language-bash" data-lang="bash">pi@raspberrypi:~/rom $ md5sum *.rom
|
||
|
||
ee8d5c6b4cb60fff9dbb2a359626dd96 1.rom
|
||
ee8d5c6b4cb60fff9dbb2a359626dd96 2.rom
|
||
ee8d5c6b4cb60fff9dbb2a359626dd96 3.rom</code></pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<p>Looks fine :) make sure to store one of those somewhere save! You’ll need
|
||
it if you ever want to update the Embedded Controller or don’t want
|
||
to use Coreboot anymore.</p>
|
||
<h2 id="flashing-and-testing-our-new-chip">Flashing and testing our new chip<a hidden class="anchor" aria-hidden="true" href="#flashing-and-testing-our-new-chip">#</a></h2>
|
||
<p>Before we create a coreboot image, we’ll flash our original bios to our
|
||
new chip. This way we make sure that we soldered everything correctly
|
||
and our new chip works. First, you wire up your SOIC8-clip. The wiring
|
||
is the same as in the table above. Then you clip it onto the chip on the
|
||
board, make sure that there is no battery attached to the board!</p>
|
||
<p><img src="/images/writing-the-new-chip-e1522281795259-1024x621.jpg#center" alt="The clip attached to the chip. Getting it to make a good connection can be hard the first times.">
|
||
</p>
|
||
<p>On our Raspberry Pi, we now verify that the chip gets recognized and
|
||
then flash the old firmware.</p>
|
||
<div class="highlight"><div class="chroma">
|
||
<table class="lntable"><tr><td class="lntd">
|
||
<pre class="chroma"><code><span class="hl"><span class="lnt"> 1
|
||
</span></span><span class="lnt"> 2
|
||
</span><span class="lnt"> 3
|
||
</span><span class="lnt"> 4
|
||
</span><span class="lnt"> 5
|
||
</span><span class="lnt"> 6
|
||
</span><span class="lnt"> 7
|
||
</span><span class="lnt"> 8
|
||
</span><span class="lnt"> 9
|
||
</span><span class="hl"><span class="lnt">10
|
||
</span></span><span class="lnt">11
|
||
</span><span class="lnt">12
|
||
</span><span class="lnt">13
|
||
</span><span class="lnt">14
|
||
</span><span class="lnt">15
|
||
</span><span class="lnt">16
|
||
</span><span class="lnt">17
|
||
</span><span class="hl"><span class="lnt">18
|
||
</span></span></code></pre></td>
|
||
<td class="lntd">
|
||
<pre class="chroma"><code class="language-bash" data-lang="bash"><span class="hl">pi@raspberrypi:~ $ sudo flashrom -p linux_spi:dev<span class="o">=</span>/dev/spidev0.0,spispeed<span class="o">=</span><span class="m">30000</span>
|
||
</span>
|
||
flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ <span class="o">(</span>armv7l<span class="o">)</span>
|
||
flashrom is free software, get the <span class="nb">source</span> code at https://flashrom.org
|
||
|
||
Calibrating delay loop... OK.
|
||
Found Winbond flash chip <span class="s2">"W25Q128.V"</span> <span class="o">(</span><span class="m">16384</span> kB, SPI<span class="o">)</span> on linux_spi.
|
||
No operations were specified.
|
||
|
||
<span class="hl">pi@raspberrypi:~/rom $ sudo flashrom -p linux_spi:dev<span class="o">=</span>/dev/spidev0.0,spispeed<span class="o">=</span><span class="m">30000</span> --write 1.rom
|
||
</span>flashrom v0.9.9-r1954 on Linux 4.9.80-v7+ <span class="o">(</span>armv7l<span class="o">)</span>
|
||
flashrom is free software, get the <span class="nb">source</span> code at https://flashrom.org
|
||
|
||
Calibrating delay loop... OK.
|
||
Found Winbond flash chip <span class="s2">"W25Q128.V"</span> <span class="o">(</span><span class="m">16384</span> kB, SPI<span class="o">)</span> on linux_spi.
|
||
Reading old flash chip contents... <span class="k">done</span>.
|
||
Erasing and writing flash chip... Erase/write <span class="k">done</span>.
|
||
<span class="hl">Verifying flash... VERIFIED.</span></code></pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<h3 id="testing">Testing<a hidden class="anchor" aria-hidden="true" href="#testing">#</a></h3>
|
||
<p>At this point, you connect a monitor via VGA or the display to the LVDS
|
||
connector, plug in the keyboard and connect the board to power. Try to
|
||
power on, if it shows you the Thinkpad logo everything works.
|
||
(Congrats!)</p>
|
||
<p>If the power LED just lights up shortly, try the following. Disconnect
|
||
power then press the power button for 1 second then release for one
|
||
second. Repeat this 10 times, then keep it pressed for 30s. Now plug the
|
||
cord back in and try booting again. If it still doesn’t work check your
|
||
solder joints. Sounds stupid, but worked for me.</p>
|
||
<p> </p>
|
||
<h2 id="creating-a-coreboot-image">Creating a Coreboot image<a hidden class="anchor" aria-hidden="true" href="#creating-a-coreboot-image">#</a></h2>
|
||
<p><!-- raw HTML omitted -->I’ll show you how to do this in Part 2, which I just released.<!-- raw HTML omitted --><br>
|
||
<em>The 2nd part will not be copied over to this blog as it was never really completed.
|
||
There has always been some discrepancies I don’t feel comfortable with. If you need help
|
||
setting up coreboot write a message below, or use the contact buttons to the right.</em></p>
|
||
<section class="footnotes" role="doc-endnotes">
|
||
<hr>
|
||
<ol>
|
||
<li id="fn:1" role="doc-endnote">
|
||
<p>I know it’s actually UEFI based, but I’ll keep calling it BIOS as the search term is more common. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||
</li>
|
||
<li id="fn:2" role="doc-endnote">
|
||
<p>You can use any other SPI programmer which is supported by flashrom, or even write your own program and use unsupported programmers. The protocol is not that complex. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
|
||
</div>
|
||
<footer class="post-footer">
|
||
<ul class="post-tags">
|
||
<li><a href="https://tobiasmanske.de/tags/hacking/">hacking</a></li>
|
||
<li><a href="https://tobiasmanske.de/tags/thinkpad/">thinkpad</a></li>
|
||
<li><a href="https://tobiasmanske.de/tags/hardware/">hardware</a></li>
|
||
<li><a href="https://tobiasmanske.de/tags/english/">english</a></li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="share-buttons">
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on twitter"
|
||
href="https://twitter.com/intent/tweet/?text=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201&url=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f&hashtags=hacking%2cthinkpad%2chardware%2cenglish">
|
||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve">
|
||
<path
|
||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-253.927,424.544c135.939,0 210.268,-112.643 210.268,-210.268c0,-3.218 0,-6.437 -0.153,-9.502c14.406,-10.421 26.973,-23.448 36.935,-38.314c-13.18,5.824 -27.433,9.809 -42.452,11.648c15.326,-9.196 26.973,-23.602 32.49,-40.92c-14.252,8.429 -30.038,14.56 -46.896,17.931c-13.487,-14.406 -32.644,-23.295 -53.946,-23.295c-40.767,0 -73.87,33.104 -73.87,73.87c0,5.824 0.613,11.494 1.992,16.858c-61.456,-3.065 -115.862,-32.49 -152.337,-77.241c-6.284,10.881 -9.962,23.601 -9.962,37.088c0,25.594 13.027,48.276 32.95,61.456c-12.107,-0.307 -23.448,-3.678 -33.41,-9.196l0,0.92c0,35.862 25.441,65.594 59.311,72.49c-6.13,1.686 -12.72,2.606 -19.464,2.606c-4.751,0 -9.348,-0.46 -13.946,-1.38c9.349,29.426 36.628,50.728 68.965,51.341c-25.287,19.771 -57.164,31.571 -91.8,31.571c-5.977,0 -11.801,-0.306 -17.625,-1.073c32.337,21.15 71.264,33.41 112.95,33.41Z" />
|
||
</svg>
|
||
</a>
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on linkedin"
|
||
href="https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f&title=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201&summary=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201&source=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f">
|
||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve">
|
||
<path
|
||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
|
||
</svg>
|
||
</a>
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on reddit"
|
||
href="https://reddit.com/submit?url=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f&title=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201">
|
||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve">
|
||
<path
|
||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
|
||
</svg>
|
||
</a>
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on facebook"
|
||
href="https://facebook.com/sharer/sharer.php?u=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f">
|
||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve">
|
||
<path
|
||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
|
||
</svg>
|
||
</a>
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on whatsapp"
|
||
href="https://api.whatsapp.com/send?text=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201%20-%20https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f">
|
||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve">
|
||
<path
|
||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
|
||
</svg>
|
||
</a>
|
||
<a target="_blank" rel="noopener noreferrer" aria-label="share Installing Coreboot on a Thinkpad T430s | Part 1 on telegram"
|
||
href="https://telegram.me/share/url?text=Installing%20Coreboot%20on%20a%20Thinkpad%20T430s%20%7c%20Part%201&url=https%3a%2f%2ftobiasmanske.de%2fposts%2fthinkpad-coreboot-part1%2f">
|
||
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28">
|
||
<path
|
||
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
|
||
</footer><div id="disqus_thread"></div>
|
||
<script type="application/javascript">
|
||
var disqus_config = function () {
|
||
|
||
|
||
|
||
};
|
||
(function() {
|
||
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
|
||
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
|
||
return;
|
||
}
|
||
var d = document, s = d.createElement('script'); s.async = true;
|
||
s.src = '//' + "rad4day" + '.disqus.com/embed.js';
|
||
s.setAttribute('data-timestamp', +new Date());
|
||
(d.head || d.body).appendChild(s);
|
||
})();
|
||
</script>
|
||
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
||
|
||
</article>
|
||
</main><footer class="footer">
|
||
<span>© 2021 <a href="https://tobiasmanske.de">Tobias Manske</a></span>
|
||
<span>·</span>
|
||
<span><a href="https://tobiasmanske.de/files/manske.asc" rel="noopener" target="_blank">PGP-Key</a></span>
|
||
<span>·</span>
|
||
<span>Powered by <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a></span>
|
||
<span>·</span>
|
||
<span>Theme <a href="https://git.io/hugopapermod" rel="noopener" target="_blank">PaperMod</a></span>
|
||
</footer>
|
||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)">
|
||
<button class="top-link" id="top-link" type="button" accesskey="g">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||
<path d="M12 6H0l6-6z" />
|
||
</svg>
|
||
</button>
|
||
</a>
|
||
|
||
|
||
|
||
<script>
|
||
window.onload = function () {
|
||
if (localStorage.getItem("menu-scroll-position")) {
|
||
document.getElementById('menu').scrollLeft = localStorage.getItem("menu-scroll-position");
|
||
}
|
||
}
|
||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||
anchor.addEventListener("click", function (e) {
|
||
e.preventDefault();
|
||
var id = this.getAttribute("href").substr(1);
|
||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||
behavior: "smooth"
|
||
});
|
||
} else {
|
||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||
}
|
||
if (id === "top") {
|
||
history.replaceState(null, null, " ");
|
||
} else {
|
||
history.pushState(null, null, `#${id}`);
|
||
}
|
||
});
|
||
});
|
||
var mybutton = document.getElementById("top-link");
|
||
window.onscroll = function () {
|
||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||
mybutton.style.visibility = "visible";
|
||
mybutton.style.opacity = "1";
|
||
} else {
|
||
mybutton.style.visibility = "hidden";
|
||
mybutton.style.opacity = "0";
|
||
}
|
||
};
|
||
|
||
function menu_on_scroll() {
|
||
localStorage.setItem("menu-scroll-position", document.getElementById('menu').scrollLeft);
|
||
}
|
||
|
||
</script>
|
||
<script>
|
||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||
if (document.body.className.includes("dark")) {
|
||
document.body.classList.remove('dark');
|
||
localStorage.setItem("pref-theme", 'light');
|
||
} else {
|
||
document.body.classList.add('dark');
|
||
localStorage.setItem("pref-theme", 'dark');
|
||
}
|
||
})
|
||
|
||
</script>
|
||
|
||
</body>
|
||
|
||
</html>
|