User documentation and guides for products sold on the Libre Tech Shop. https://docs.libretech.shop
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1391 lines
41 KiB

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Accessible & Free Documentation for Libre Products">
<meta name="author" content="Abhas Abhinav">
<link rel="icon" href="../../images/als-icon.png">
<meta name="generator" content="mkdocs-1.2.3, mkdocs-material-8.1.7">
<title>(LC230) User Guide - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.cd566b2a.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.e6a45f82.min.css">
<meta name="theme-color" content="#7e56c2">
<link rel="stylesheet" href="../../css/extra.css">
<script>__md_scope=new URL("../..",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="light" data-md-color-primary="deep-purple" data-md-color-accent="pink">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#lc230-user-guide" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="LibreTechShop - Documentation" class="md-header__button md-logo" aria-label="LibreTechShop - Documentation" data-md-component="logo">
<img src="../../images/als-icon.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
(LC230) User Guide
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://sovran.dev/mh/lts-docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
mh/lts-docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="LibreTechShop - Documentation" class="md-nav__button md-logo" aria-label="LibreTechShop - Documentation" data-md-component="logo">
<img src="../../images/als-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<div class="md-nav__source">
<a href="https://sovran.dev/mh/lts-docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
mh/lts-docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
LC230
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="LC230" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
LC230
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../" class="md-nav__link">
(LC230) Overview
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
(LC230) User Guide
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
(LC230) User Guide
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#the-coreboot-boot-process" class="md-nav__link">
The Coreboot Boot Process
</a>
</li>
<li class="md-nav__item">
<a href="#installing-an-os" class="md-nav__link">
Installing an OS
</a>
<nav class="md-nav" aria-label="Installing an OS">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#build-usb-installer" class="md-nav__link">
Build USB Installer
</a>
</li>
<li class="md-nav__item">
<a href="#plug-in-usb-disk" class="md-nav__link">
Plug-in USB Disk
</a>
</li>
<li class="md-nav__item">
<a href="#choose-the-boot-device" class="md-nav__link">
Choose the boot device
</a>
</li>
<li class="md-nav__item">
<a href="#install-the-os" class="md-nav__link">
Install the OS
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#coreboot-internal-flashing" class="md-nav__link">
Coreboot Internal Flashing
</a>
<nav class="md-nav" aria-label="Coreboot Internal Flashing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configure-the-kernel" class="md-nav__link">
Configure the kernel
</a>
</li>
<li class="md-nav__item">
<a href="#query-coreboot-details" class="md-nav__link">
Query Coreboot details
</a>
</li>
<li class="md-nav__item">
<a href="#install-flashrom" class="md-nav__link">
Install: flashrom
</a>
</li>
<li class="md-nav__item">
<a href="#read-bios-image" class="md-nav__link">
Read BIOS Image
</a>
</li>
<li class="md-nav__item">
<a href="#write-bios-image" class="md-nav__link">
Write BIOS Image
</a>
</li>
<li class="md-nav__item">
<a href="#flash-skulls" class="md-nav__link">
Flash: Skulls
</a>
</li>
<li class="md-nav__item">
<a href="#flash-heads" class="md-nav__link">
Flash: Heads
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuring-coreboot" class="md-nav__link">
Configuring Coreboot
</a>
<nav class="md-nav" aria-label="Configuring Coreboot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#swapping-fn-and-ctrl" class="md-nav__link">
Swapping Fn and Ctrl
</a>
</li>
<li class="md-nav__item">
<a href="#increasing-graphics-memory" class="md-nav__link">
Increasing Graphics Memory
</a>
</li>
<li class="md-nav__item">
<a href="#other-settings" class="md-nav__link">
Other settings
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../troubleshooting/" class="md-nav__link">
(LC230) Troubleshooting
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3">
MH-USB
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="MH-USB" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
MH-USB
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../usb/" class="md-nav__link">
(MHUSB) About & Contents
</a>
</li>
<li class="md-nav__item">
<a href="../../usb/use/" class="md-nav__link">
(MHUSB) Using the USB disk
</a>
</li>
<li class="md-nav__item">
<a href="../../usb/update/" class="md-nav__link">
(MHUSB) Add / Update images
</a>
</li>
<li class="md-nav__item">
<a href="../../usb/internals/" class="md-nav__link">
(MHUSB) Internals
</a>
</li>
<li class="md-nav__item">
<a href="../../usb/faqs/" class="md-nav__link">
(MHUSB) FAQs
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4">
Routers
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Routers" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Routers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../routers/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../../routers/first-use/" class="md-nav__link">
First Use
</a>
</li>
<li class="md-nav__item">
<a href="../../routers/next-steps/" class="md-nav__link">
Next Steps
</a>
</li>
<li class="md-nav__item">
<a href="../../routers/optional-steps/" class="md-nav__link">
Optional Steps
</a>
</li>
<li class="md-nav__item">
<a href="../../routers/cli/" class="md-nav__link">
Command Line Guide
</a>
</li>
<li class="md-nav__item">
<a href="../../routers/upgrade/" class="md-nav__link">
Upgrading OpenWrt
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5">
Phones
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="Phones" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Phones
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../phones/" class="md-nav__link">
Introduction
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/lineageos/" class="md-nav__link">
LineageOS
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/f-droid/" class="md-nav__link">
F-Droid
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/first-use/" class="md-nav__link">
First Use
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/applications/" class="md-nav__link">
Applications
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/services/" class="md-nav__link">
Services
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/backups/" class="md-nav__link">
Taking Backups
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/recovery/" class="md-nav__link">
Using Recovery
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/ubports/" class="md-nav__link">
Installing Ubports
</a>
</li>
<li class="md-nav__item">
<a href="../../phones/calyxos/" class="md-nav__link">
Installing CalyxOS
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#the-coreboot-boot-process" class="md-nav__link">
The Coreboot Boot Process
</a>
</li>
<li class="md-nav__item">
<a href="#installing-an-os" class="md-nav__link">
Installing an OS
</a>
<nav class="md-nav" aria-label="Installing an OS">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#build-usb-installer" class="md-nav__link">
Build USB Installer
</a>
</li>
<li class="md-nav__item">
<a href="#plug-in-usb-disk" class="md-nav__link">
Plug-in USB Disk
</a>
</li>
<li class="md-nav__item">
<a href="#choose-the-boot-device" class="md-nav__link">
Choose the boot device
</a>
</li>
<li class="md-nav__item">
<a href="#install-the-os" class="md-nav__link">
Install the OS
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#coreboot-internal-flashing" class="md-nav__link">
Coreboot Internal Flashing
</a>
<nav class="md-nav" aria-label="Coreboot Internal Flashing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configure-the-kernel" class="md-nav__link">
Configure the kernel
</a>
</li>
<li class="md-nav__item">
<a href="#query-coreboot-details" class="md-nav__link">
Query Coreboot details
</a>
</li>
<li class="md-nav__item">
<a href="#install-flashrom" class="md-nav__link">
Install: flashrom
</a>
</li>
<li class="md-nav__item">
<a href="#read-bios-image" class="md-nav__link">
Read BIOS Image
</a>
</li>
<li class="md-nav__item">
<a href="#write-bios-image" class="md-nav__link">
Write BIOS Image
</a>
</li>
<li class="md-nav__item">
<a href="#flash-skulls" class="md-nav__link">
Flash: Skulls
</a>
</li>
<li class="md-nav__item">
<a href="#flash-heads" class="md-nav__link">
Flash: Heads
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuring-coreboot" class="md-nav__link">
Configuring Coreboot
</a>
<nav class="md-nav" aria-label="Configuring Coreboot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#swapping-fn-and-ctrl" class="md-nav__link">
Swapping Fn and Ctrl
</a>
</li>
<li class="md-nav__item">
<a href="#increasing-graphics-memory" class="md-nav__link">
Increasing Graphics Memory
</a>
</li>
<li class="md-nav__item">
<a href="#other-settings" class="md-nav__link">
Other settings
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="lc230-user-guide">(LC230) User Guide<a class="headerlink" href="#lc230-user-guide" title="Permanent link">&para;</a></h1>
<h2 id="the-coreboot-boot-process">The Coreboot Boot Process<a class="headerlink" href="#the-coreboot-boot-process" title="Permanent link">&para;</a></h2>
<p>Here is what the boot process looks like with Coreboot installed:</p>
<figure>
<img src="/images/coreboot-diagram.png" width="420" />
<figcaption>Coreboot Sequence Diagram</figcaption>
</figure>
<p>The first part of the boot process (labelled as "Coreboot Internal" in the diagram above) is
largely hidden from the user. The boot process is illustrated below:</p>
<figure>
<img src="/images/lc230-boot.gif" width="420" />
<figcaption>LC230 Boot Process</figcaption>
</figure>
<h2 id="installing-an-os">Installing an OS<a class="headerlink" href="#installing-an-os" title="Permanent link">&para;</a></h2>
<p>To install any GNU/Linux OS, here is a sequence of steps:</p>
<h3 id="build-usb-installer">Build USB Installer<a class="headerlink" href="#build-usb-installer" title="Permanent link">&para;</a></h3>
<p>Any GNU/Linux OS would work very well on your LC230 laptop. (Some owners have
also installed and used FreeBSD on it.)</p>
<p>LC230 is configured to run without any proprietary firmware and hence, any of
the following operating systems would work well by default:</p>
<ul>
<li><a href="https://debian.org">Debian GNU/Linux (main)</a></li>
<li><a href="https://pureos.net/">PureOS</a></li>
<li><a href="https://trisquel.info/">Triquel</a></li>
</ul>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The <a href="https://www.raspberrypi.org/software/">Rasperrby Pi Imager</a> is a good
tool to use to write an OS image to a USB disk. <a href="https://www.balena.io/etcher/">Balena Etcher</a> is another
one.</p>
</div>
<h3 id="plug-in-usb-disk">Plug-in USB Disk<a class="headerlink" href="#plug-in-usb-disk" title="Permanent link">&para;</a></h3>
<p>The USB needs to be plugged in before you reboot the laptop - or else SeaBIOS
will not detect it and show it as a boot option.</p>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>The blue USB ports on the left side of the laptop are USB3 ports. If you
have a USB disk that works with USB3, then using these ports will give you
much better USB disk performance.</p>
<p>The USB port on the right side (yellow in colour) is a USB2 port.</p>
</div>
<h3 id="choose-the-boot-device">Choose the boot device<a class="headerlink" href="#choose-the-boot-device" title="Permanent link">&para;</a></h3>
<p>Press <span class="keys"><kbd class="key-escape">Esc</kbd></span> on boot and choose the USB disk as the boot device</p>
<figure>
<img src="/images/lc230-boot-logo.jpg" width="400" />
<figcaption>LC230 Boot Image</figcaption>
</figure>
<p>By default, the first boot option is chosen to boot off. This is usually the
2.5" SATA disk if it is plugged in to the laptop. To choose another boot
device, you need to press <span class="keys"><kbd class="key-escape">Esc</kbd></span> and then choose the desired boot device
from the SeaBIOS menu.</p>
<p>If you have a 2.5" SATA disk, then a USB disk would be the second boot device.
If you have a 2.5" SATA disk <strong>and</strong> a mSATA disk, then the USB disk would be
the third boot device.</p>
<figure>
<img src="/images/lc230-usb3.jpg"/>
<figcaption>LC230 USB3 Ports</figcaption>
</figure>
<h3 id="install-the-os">Install the OS<a class="headerlink" href="#install-the-os" title="Permanent link">&para;</a></h3>
<p>You can now proceed with the OS installation as normal.</p>
<p>The LC230 does not provide a UEFI BIOS (like the default Lenovo BIOS firmware).
SeaBIOS is a pc-bios payload and most GNU/Linux OS installers will detect that
and install the correct bootloader. This would be <code>grub-pc</code> if you choose to
use Grub and Debian.</p>
<h2 id="coreboot-internal-flashing">Coreboot Internal Flashing<a class="headerlink" href="#coreboot-internal-flashing" title="Permanent link">&para;</a></h2>
<p>To flash Coreboot to the x230 motherboard, the first step is to flash the BIOS
externally - ie. using a SIOC-8 flashing clip connecting to the BIOS chips:</p>
<figure>
<img src="/images/x230-flashing.png"/>
<figcaption>Liberating the LC230 via External Flashing</figcaption>
</figure>
<p>However, as a part of the external flashing process, the BIOS is unlocked. This
means that you can update / modify the BIOS on the SPI Flash internally - from
within the operating system. Here are some reasons to do that and the steps
involved.</p>
<h3 id="configure-the-kernel">Configure the kernel<a class="headerlink" href="#configure-the-kernel" title="Permanent link">&para;</a></h3>
<p>The first things to do before you can flash Coreboot internally, is to boot the
kernel with an additional option:</p>
<div class="codehilite"><pre><span></span><code>iomem=relaxed
</code></pre></div>
<p>On Debian (and derived operating systems such as Ubuntu), you can make this a
permanent setting:</p>
<ol>
<li>Edit the file: <code>/etc/default/grub</code></li>
<li>
<p>Update the line <code>GRUB_CMDLINE_LINUX</code> to read:</p>
<p><code>GRUB_CMDLINE_LINUX="iomem=relaxed"</code></p>
</li>
<li>
<p>Run: <code>update-grub</code> to update the Grub configuration.</p>
</li>
</ol>
<h3 id="query-coreboot-details">Query Coreboot details<a class="headerlink" href="#query-coreboot-details" title="Permanent link">&para;</a></h3>
<p>You can verify the coreboot version (as well as the fact that you're running
coreboot) by using the <code>dmidecode</code> utility as follows:</p>
<h4 id="bios-version">BIOS version<a class="headerlink" href="#bios-version" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo dmidecode -t bios
<span class="gp"># </span>dmidecode <span class="m">3</span>.3
<span class="go">Getting SMBIOS data from sysfs.</span>
<span class="go">SMBIOS 2.8 present.</span>
<span class="go">Handle 0x0000, DMI type 0, 26 bytes</span>
<span class="go">BIOS Information</span>
<span class="go"> Vendor: coreboot</span>
<span class="go"> Version: CBET4000 4.10-1082-g4357a82076-dirty</span>
<span class="go"> Release Date: 10/20/2019</span>
<span class="go"> ROM Size: 12 MB</span>
<span class="go"> Characteristics:</span>
<span class="go"> PCI is supported</span>
<span class="go"> PC Card (PCMCIA) is supported</span>
<span class="go"> BIOS is upgradeable</span>
<span class="go"> Selectable boot is supported</span>
<span class="go"> ACPI is supported</span>
<span class="go"> Targeted content distribution is supported</span>
<span class="go"> BIOS Revision: 4.10</span>
<span class="go"> Firmware Revision: 0.0</span>
</code></pre></div>
<h4 id="system-type-name">System type &amp; name<a class="headerlink" href="#system-type-name" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo dmidecode -t system
<span class="gp"># </span>dmidecode <span class="m">3</span>.3
<span class="go">Getting SMBIOS data from sysfs.</span>
<span class="go">SMBIOS 2.8 present.</span>
<span class="go">Handle 0x0001, DMI type 1, 27 bytes</span>
<span class="go">System Information</span>
<span class="go"> Manufacturer: LENOVO</span>
<span class="go"> Product Name: 2325BU3</span>
<span class="go"> Version: ThinkPad X230</span>
<span class="go"> Serial Number: PK1HM8E</span>
<span class="go"> UUID: ce136601-xxxx-xxxx-xxxx-xxxxxxxxxxxx</span>
<span class="go"> Wake-up Type: Reserved</span>
<span class="go"> SKU Number: Not Specified</span>
<span class="go"> Family: ThinkPad X230</span>
<span class="go">Handle 0x000B, DMI type 32, 11 bytes</span>
<span class="go">System Boot Information</span>
<span class="go"> Status: No errors detected</span>
</code></pre></div>
<h3 id="install-flashrom">Install: <code>flashrom</code><a class="headerlink" href="#install-flashrom" title="Permanent link">&para;</a></h3>
<p>The primary tool for operating on your BIOS is called <code>flashrom</code>. The Debian
package is also called by the same name and can be installed as:</p>
<div class="codehilite"><pre><span></span><code>apt-get install flashrom
</code></pre></div>
<p>If the kernel is booted correctly with <code>iomem=relaxed</code>, you can run <code>flashrom</code>:</p>
<div class="codehilite"><pre><span></span><code>flashrom -pinternal
</code></pre></div>
<p>Ouput:</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span>
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span>
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span>
<span class="go">coreboot table found at 0xbff51000.</span>
<span class="go">Found chipset &quot;Intel QM77&quot;.</span>
<span class="go">Enabling flash write... SPI Configuration is locked down.</span>
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span>
<span class="go">OK.</span>
<span class="go">Found Programmer flash chip &quot;Opaque flash chip&quot; (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span>
<span class="go">No operations were specified.</span>
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Sometimes <code>flashrom</code> will not detect the internal flash chip, though it
might very well be able to confirm the BIOS type and machine name. In such
cases, you can try to run <code>flashrom</code> as: <code>flashrom
-pinternal:laptop=force_I_want_a_brick</code>. This is not completely safe</p>
</div>
<h3 id="read-bios-image">Read BIOS Image<a class="headerlink" href="#read-bios-image" title="Permanent link">&para;</a></h3>
<p>You can dump the BIOS to a file:</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>flashrom -pinternal -r lc230-coreboot.rom
</code></pre></div>
<p>This will read the BIOS to a file: <code>lc230-coreboot.rom</code>. This file will be 12 MB in size.</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal -r lc230.rom
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span>
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span>
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span>
<span class="go">coreboot table found at 0xbff51000.</span>
<span class="go">Found chipset &quot;Intel QM77&quot;.</span>
<span class="go">Enabling flash write... SPI Configuration is locked down.</span>
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span>
<span class="go">OK.</span>
<span class="go">Found Programmer flash chip &quot;Opaque flash chip&quot; (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span>
<span class="go">Reading flash... done.</span>
<span class="gp">$ </span>ls -lh lc230-coreboot.rom
<span class="go">-rw-r--r-- 1 root root 12M Feb 8 04:46 lc230-coreboot.rom</span>
</code></pre></div>
<h3 id="write-bios-image">Write BIOS Image<a class="headerlink" href="#write-bios-image" title="Permanent link">&para;</a></h3>
<p>You can now write back to the BIOS chips as follows:</p>
<div class="highlight"><pre><span></span><code><span class="gp">$ </span>sudo flashrom -pinternal -w lc230-coreboot.rom
<span class="go">flashrom v1.2 on Linux 5.10.9-gnu (x86_64)</span>
<span class="go">flashrom is free software, get the source code at https://flashrom.org</span>
<span class="go">Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).</span>
<span class="go">coreboot table found at 0xbff51000.</span>
<span class="go">Found chipset &quot;Intel QM77&quot;.</span>
<span class="go">Enabling flash write... SPI Configuration is locked down.</span>
<span class="go">Enabling hardware sequencing due to multiple flash chips detected.</span>
<span class="go">OK.</span>
<span class="go">Found Programmer flash chip &quot;Opaque flash chip&quot; (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.</span>
<span class="go">Reading old flash chip contents... done.</span>
<span class="go">Erasing and writing flash chip... </span>
<span class="go">Warning: Chip content is identical to the requested image.</span>
<span class="go">Erase/write done</span>
</code></pre></div>
<h3 id="flash-skulls">Flash: Skulls<a class="headerlink" href="#flash-skulls" title="Permanent link">&para;</a></h3>
<p>The Skulls Coreboot distribution provides built in scripts to upgrade the BIOS.
The update procedure is <a href="https://github.com/merge/skulls/blob/master/x230/README.md#updating">detailed
here</a>.
Your LC230 ships with the latest release of Skull available at the time of
shipping the laptop to you. You can upgrade skulls using the instructions above. </p>
<h3 id="flash-heads">Flash: Heads<a class="headerlink" href="#flash-heads" title="Permanent link">&para;</a></h3>
<p>If you want to experiment with the <a href="https://osresearch.net/">Heads firmware</a>,
instructions are available on the <a href="https://osresearch.net/">Heads website</a> as
well as in the <a href="https://github.com/merge/skulls/blob/master/x230/README.md#moving-to-heads">Skulls documentation</a>.</p>
<h2 id="configuring-coreboot">Configuring Coreboot<a class="headerlink" href="#configuring-coreboot" title="Permanent link">&para;</a></h2>
<p>Your LC230 ships with a SeaBIOS payload called <code>nvramcui</code> that allows you to
configure coreboot behaviour and save the settings to nvram.</p>
<div style="text-align: center">
<figure style="display: inline-block" >
<img src="/images/nvramcui-1.jpg" width="250" />
<figcaption> nvramcui options (1) </figcaption>
</figure>
<figure style="display: inline-block" >
<img src="/images/nvramcui-2.jpg" width="235" />
<figcaption> nvramcui options (2) </figcaption>
</figure>
<figure style="display: inline-block" >
<img src="/images/nvramcui-3.jpg" width="235" />
<figcaption> nvramcui options (3) </figcaption>
</figure>
</div>
<h3 id="swapping-fn-and-ctrl">Swapping <span class="keys"><kbd class="key-function">Fn</kbd></span> and <span class="keys"><kbd class="key-control">Ctrl</kbd></span><a class="headerlink" href="#swapping-fn-and-ctrl" title="Permanent link">&para;</a></h3>
<p>The <code>fn_ctrl_swap</code> on the 2<sup>nd</sup> page of the <code>nvramcui</code> settings page enables you
to toggle the <span class="keys"><kbd class="key-function">Fn</kbd></span> and <span class="keys"><kbd class="key-control">Ctrl</kbd></span> swap. If you like to have the control key
on the bottom left corner of the keyboard, then you can set this option to <code>Enable</code>.</p>
<h3 id="increasing-graphics-memory">Increasing Graphics Memory<a class="headerlink" href="#increasing-graphics-memory" title="Permanent link">&para;</a></h3>
<p>The x230 GPU does not have dedication RAM. Instead it shares its memory with
the main system memory. You can configure how much RAM is dedicated to the GPU
via the <code>gfx_uma_size</code> option on the 3<sup>rd</sup> page of the <code>nvramcui</code> settings.</p>
<p>Pressing the <span class="keys"><kbd class="key-arrow-left">Left</kbd></span> and <span class="keys"><kbd class="key-arrow-right">Right</kbd></span> arrow keys you can iterate over all the
available settings for this option.</p>
<h3 id="other-settings">Other settings<a class="headerlink" href="#other-settings" title="Permanent link">&para;</a></h3>
<p>You can also configure the following behaviour via nvramcui:</p>
<ul>
<li>
<p><strong>Always On USB</strong>: By enabling this option, you can configure the USB ports
to be <em>always on</em> - even when the laptop is suspended.</p>
</li>
<li>
<p><strong>Enable/Disable Trackpoing, Touchpad</strong>: You can toggle the <code>touchpad</code> and
<code>trackpoint</code> options to enable or disable the the touchpad and trackpoint
respectively.</p>
</li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../" class="md-footer__link md-footer__link--prev" aria-label="Previous: (LC230) Overview" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
(LC230) Overview
</div>
</div>
</a>
<a href="../troubleshooting/" class="md-footer__link md-footer__link--next" aria-label="Next: (LC230) Troubleshooting" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
(LC230) Troubleshooting
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; Mostly Harmless
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../../assets/javascripts/workers/search.22074ed6.min.js"}</script>
<script src="../../assets/javascripts/bundle.01de222e.min.js"></script>
</body>
</html>