Browse Source

Docs for products available on the Libre Tech Shop

main
Abhas Abhinav 3 years ago
commit
2c7d564814
103 changed files with 4813 additions and 0 deletions
  1. +100
    -0
      docs/css/extra.css
  2. +6
    -0
      docs/images/.directory
  3. BIN
      docs/images/both-rgb-controller.jpg
  4. BIN
      docs/images/clean-fan.jpg
  5. BIN
      docs/images/coreboot-diagram.png
  6. BIN
      docs/images/dirty-fan.jpg
  7. BIN
      docs/images/htop.png
  8. BIN
      docs/images/lc230-boot-logo.jpg
  9. BIN
      docs/images/lc230-boot.gif
  10. BIN
      docs/images/lc230-boot.mp4
  11. BIN
      docs/images/lc230-boot.png
  12. BIN
      docs/images/lc230-usb3.jpg
  13. BIN
      docs/images/lc230.png
  14. BIN
      docs/images/lenovo-error.jpg
  15. BIN
      docs/images/libreelec.png
  16. BIN
      docs/images/lts-icon.png
  17. BIN
      docs/images/lts-logo.png
  18. BIN
      docs/images/nvramcui-1.jpg
  19. BIN
      docs/images/nvramcui-2.jpg
  20. BIN
      docs/images/nvramcui-3.jpg
  21. BIN
      docs/images/rgb-d1-r32.png
  22. BIN
      docs/images/rgb-d1.png
  23. BIN
      docs/images/stress-test.png
  24. BIN
      docs/images/tinc.png
  25. BIN
      docs/images/x230-flashing.jpg
  26. BIN
      docs/images/x230-flashing.png
  27. BIN
      docs/images/x230.png
  28. +23
    -0
      docs/index.md
  29. +92
    -0
      docs/lc230/index.md
  30. +69
    -0
      docs/lc230/troubleshooting.md
  31. +318
    -0
      docs/lc230/user-guide.md
  32. +8
    -0
      docs/le01/index.md
  33. +8
    -0
      docs/ledc/index.md
  34. +69
    -0
      mkdocs.yml
  35. +327
    -0
      site/404.html
  36. BIN
      site/assets/images/favicon.png
  37. +2
    -0
      site/assets/javascripts/bundle.83e5331e.min.js
  38. +1
    -0
      site/assets/javascripts/bundle.83e5331e.min.js.map
  39. +1
    -0
      site/assets/javascripts/lunr/min/lunr.ar.min.js
  40. +18
    -0
      site/assets/javascripts/lunr/min/lunr.da.min.js
  41. +18
    -0
      site/assets/javascripts/lunr/min/lunr.de.min.js
  42. +18
    -0
      site/assets/javascripts/lunr/min/lunr.du.min.js
  43. +18
    -0
      site/assets/javascripts/lunr/min/lunr.es.min.js
  44. +18
    -0
      site/assets/javascripts/lunr/min/lunr.fi.min.js
  45. +18
    -0
      site/assets/javascripts/lunr/min/lunr.fr.min.js
  46. +18
    -0
      site/assets/javascripts/lunr/min/lunr.hu.min.js
  47. +18
    -0
      site/assets/javascripts/lunr/min/lunr.it.min.js
  48. +1
    -0
      site/assets/javascripts/lunr/min/lunr.ja.min.js
  49. +1
    -0
      site/assets/javascripts/lunr/min/lunr.jp.min.js
  50. +1
    -0
      site/assets/javascripts/lunr/min/lunr.multi.min.js
  51. +18
    -0
      site/assets/javascripts/lunr/min/lunr.nl.min.js
  52. +18
    -0
      site/assets/javascripts/lunr/min/lunr.no.min.js
  53. +18
    -0
      site/assets/javascripts/lunr/min/lunr.pt.min.js
  54. +18
    -0
      site/assets/javascripts/lunr/min/lunr.ro.min.js
  55. +18
    -0
      site/assets/javascripts/lunr/min/lunr.ru.min.js
  56. +1
    -0
      site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js
  57. +18
    -0
      site/assets/javascripts/lunr/min/lunr.sv.min.js
  58. +18
    -0
      site/assets/javascripts/lunr/min/lunr.tr.min.js
  59. +1
    -0
      site/assets/javascripts/lunr/min/lunr.vi.min.js
  60. +1
    -0
      site/assets/javascripts/lunr/tinyseg.min.js
  61. +16
    -0
      site/assets/javascripts/vendor.93c04032.min.js
  62. +1
    -0
      site/assets/javascripts/vendor.93c04032.min.js.map
  63. +59
    -0
      site/assets/javascripts/worker/search.8c7e0a7e.min.js
  64. +1
    -0
      site/assets/javascripts/worker/search.8c7e0a7e.min.js.map
  65. +3
    -0
      site/assets/stylesheets/main.15aa0b43.min.css
  66. +1
    -0
      site/assets/stylesheets/main.15aa0b43.min.css.map
  67. +3
    -0
      site/assets/stylesheets/palette.75751829.min.css
  68. +1
    -0
      site/assets/stylesheets/palette.75751829.min.css.map
  69. +100
    -0
      site/css/extra.css
  70. BIN
      site/images/both-rgb-controller.jpg
  71. BIN
      site/images/clean-fan.jpg
  72. BIN
      site/images/coreboot-diagram.png
  73. BIN
      site/images/dirty-fan.jpg
  74. BIN
      site/images/htop.png
  75. BIN
      site/images/lc230-boot-logo.jpg
  76. BIN
      site/images/lc230-boot.gif
  77. BIN
      site/images/lc230-boot.mp4
  78. BIN
      site/images/lc230-boot.png
  79. BIN
      site/images/lc230-usb3.jpg
  80. BIN
      site/images/lc230.png
  81. BIN
      site/images/lenovo-error.jpg
  82. BIN
      site/images/libreelec.png
  83. BIN
      site/images/lts-icon.png
  84. BIN
      site/images/lts-logo.png
  85. BIN
      site/images/nvramcui-1.jpg
  86. BIN
      site/images/nvramcui-2.jpg
  87. BIN
      site/images/nvramcui-3.jpg
  88. BIN
      site/images/rgb-d1-r32.png
  89. BIN
      site/images/rgb-d1.png
  90. BIN
      site/images/stress-test.png
  91. BIN
      site/images/tinc.png
  92. BIN
      site/images/x230-flashing.jpg
  93. BIN
      site/images/x230-flashing.png
  94. BIN
      site/images/x230.png
  95. +416
    -0
      site/index.html
  96. +570
    -0
      site/lc230/index.html
  97. +534
    -0
      site/lc230/troubleshooting/index.html
  98. +984
    -0
      site/lc230/user-guide/index.html
  99. +405
    -0
      site/le01/index.html
  100. +391
    -0
      site/ledc/index.html

+ 100
- 0
docs/css/extra.css View File

@ -0,0 +1,100 @@
.title-bar {
background-color: #FFC512;
}
.title-bar .title-bar__title {
color: #000133;
font-family: Iosevka;
}
.side-bar .side-bar__menu .side-bar__link:hover, .side-bar .side-bar__menu .side-bar__link.side-bar__link--active {
color: #B30049;
}
h1 {
color: #EBA80F;
font-family: Iosevka;
font-size: 2em;
}
h2 {
color: #0082C9;
font-family: Iosevka;
font-size: 1.5em;
border: 3px solid #DFDFDF;
padding: 4px;
text-align: center;
box-shadow: 0px 0px 15px #888888;
}
h3 {
color: #B30049;
font-family: Iosevka;
font-size: 1.2em;
}
.p, .kpn-style p:not([class]) {
font-family: Iosevka;
}
body, h1 {
font-family: Iosevka;
}
.h2, .kpn-style h2:not([class]) {
font-family: Iosevka;
font-weight: 800;
}
.tile {
box-shadow: 1px 1px 6px #6f6f6f;
}
a[rel=prev] {
display: none;
}
a[rel=next] {
display: none;
}
.card-title {
text-align: center;
font-size: 1.2em;
}
.card-title h4 {
text-align: center;
}
.card-footer {
text-align: center;
}
.card-footer .btn {
}
.badge {
font-size: 50%;
}
.card-img-top {
width: 100%;
height: 10vw;
object-fit: cover;
margin-top: 0.5em;
}
.md-typeset a, a {
color: #0082C9;
}
.md-tabs__link {
color: #F8E7A5;
}
.md-tabs__link--active {
font-weight: 900;
font-size: 1.6em;
}

+ 6
- 0
docs/images/.directory View File

@ -0,0 +1,6 @@
[Dolphin]
SortOrder=1
SortRole=modificationtime
Timestamp=2021,2,11,2,17,39
Version=4
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_type,CustomizedDetails

BIN
docs/images/both-rgb-controller.jpg View File

Before After
Width: 562  |  Height: 390  |  Size: 66 KiB

BIN
docs/images/clean-fan.jpg View File

Before After
Width: 339  |  Height: 286  |  Size: 85 KiB

BIN
docs/images/coreboot-diagram.png View File

Before After
Width: 652  |  Height: 614  |  Size: 60 KiB

BIN
docs/images/dirty-fan.jpg View File

Before After
Width: 259  |  Height: 225  |  Size: 57 KiB

BIN
docs/images/htop.png View File

Before After
Width: 627  |  Height: 101  |  Size: 16 KiB

BIN
docs/images/lc230-boot-logo.jpg View File

Before After
Width: 410  |  Height: 230  |  Size: 17 KiB

BIN
docs/images/lc230-boot.gif View File

Before After
Width: 1920  |  Height: 1080  |  Size: 12 MiB

BIN
docs/images/lc230-boot.mp4 View File


BIN
docs/images/lc230-boot.png View File

Before After
Width: 800  |  Height: 524  |  Size: 483 KiB

BIN
docs/images/lc230-usb3.jpg View File

Before After
Width: 300  |  Height: 37  |  Size: 4.9 KiB

BIN
docs/images/lc230.png View File

Before After
Width: 800  |  Height: 673  |  Size: 660 KiB

BIN
docs/images/lenovo-error.jpg View File

Before After
Width: 2196  |  Height: 532  |  Size: 323 KiB

BIN
docs/images/libreelec.png View File

Before After
Width: 1360  |  Height: 768  |  Size: 206 KiB

BIN
docs/images/lts-icon.png View File

Before After
Width: 250  |  Height: 250  |  Size: 16 KiB

BIN
docs/images/lts-logo.png View File

Before After
Width: 321  |  Height: 89  |  Size: 16 KiB

BIN
docs/images/nvramcui-1.jpg View File

Before After
Width: 476  |  Height: 435  |  Size: 108 KiB

BIN
docs/images/nvramcui-2.jpg View File

Before After
Width: 449  |  Height: 435  |  Size: 91 KiB

BIN
docs/images/nvramcui-3.jpg View File

Before After
Width: 465  |  Height: 257  |  Size: 68 KiB

BIN
docs/images/rgb-d1-r32.png View File

Before After
Width: 377  |  Height: 312  |  Size: 200 KiB

BIN
docs/images/rgb-d1.png View File

Before After
Width: 398  |  Height: 327  |  Size: 246 KiB

BIN
docs/images/stress-test.png View File

Before After
Width: 408  |  Height: 380  |  Size: 25 KiB

BIN
docs/images/tinc.png View File

Before After
Width: 614  |  Height: 429  |  Size: 433 KiB

BIN
docs/images/x230-flashing.jpg View File

Before After
Width: 600  |  Height: 548  |  Size: 124 KiB

BIN
docs/images/x230-flashing.png View File

Before After
Width: 400  |  Height: 299  |  Size: 247 KiB

BIN
docs/images/x230.png View File

Before After
Width: 200  |  Height: 200  |  Size: 10 KiB

+ 23
- 0
docs/index.md View File

@ -0,0 +1,23 @@
---
hide:
---
# Welcome to the Libre Tech Shop Documentation
The Libre Tech Shop is a first of its kind online store for products that
respect your freedom.
Every product you purchase here will be powered by free software, will be
accompanied by documentation and will give you the freedom to hack, learn,
modify and share. These products will not track you and will respect your
freedom and privacy.
# Products
| Method | Description |
| ----------- | ------------------------------------ |
| <img class="card-img-top" src="/images/lc230.png" style="height: 100px"> | [LC230](/lc230/) <br> Liberated Computer LC230 |
| <img class="card-img-top" src="/images/libreelec.png" style="height: 100px"> | [LE01](/le01/) <br> Liberated Entertainment Center LE01 |
| <img class="card-img-top" src="/images/both-rgb-controller.jpg" style="height: 100px"> | [LEDC](/ledc/) <br> LED Lighting Controller LEDC |

+ 92
- 0
docs/lc230/index.md View File

@ -0,0 +1,92 @@
# LC230 - The Liberated Computer
<figure>
<img src="/images/x230.png"/>
</figure>
## Why LC230?
Why does LC230 exist?
Some of the most fundamental questions that we need to answer about the hardware that we possess are those of "ownership":
!!! question
- [ ] What is the definition of owning a piece of hardware?
- [ ] Are we the owners of the hardware merely because we paid for it and now have possession of it?
- [ ] If we are owners do we have the necessary freedom and opportunity to do what we want with it?
- [ ] How much control does the manufacturer of a device exert after "selling" the device to us?
- [ ] If such control does exist, then how do we re-define ownership now?
The answers to these questions are not easy, universal or simple. Hence, we might define ownership in the following terms:
!!! info
We are the true owners of our hardware if we can **do whatever we want** with hardware **without then
permission of the manufacturer**. This includes the **freedom to change or upgrade hardware components**
at will, **repair and refurbish** the hardware and **install the software we want** (without constraints).
The **"Liberated Computer"** project exists to provide users with convenient access to
reliable, libre-software friendly and hackable computers. The key to having the freedom to compute in a manner
we deem respectful is to first liberate the computers from the locks and constraints imposed by the manufacturer.
!!! failure
<figure>
<img src="/images/lenovo-error.jpg" />
<figcaption style="text-align: justify;">
Even 8 years after the model ceased production, Lenovo's BIOS does not give you the freedom to change the
wireless card of the laptop to one that would work without proprietary firmware! <br> <br>
This is a classic example of a manufacturer exerting control over the hardware well beyond its intended lifespan. <br> <br>
Unless a wireless card that is "white-listed" by the BIOS is plugged in, the system will not boot up. The only way to
move beyond this limitation is to replace the BIOS and hence, liberate the computer.
</figcaption>
</figure>
## What is Coreboot?
Coreboot is a free/libre software BIOS replacement. It was developed to allow computers users the ability to exert
greater control on their computers by being able to control the BIOS. Coreboot is a very modular BIOS and runs on a wide
variety of computer mainboards. More details are available at: [coreboot.org](https://coreboot.org)
Coreboot's main advantage is that of software freedom at the BIOS level. It liberates the computer and allows a
user to load multiple types of boot payloads while also allowing us to cripple and neuter the Intel ME.
Some of the common payloads supported by Coreboot are:
- SeaBIOS - the default payload that ships with your LC230
- Linux - you can embed and load a Linux kernel on the BIOS chip
- Grub - You can also daisy-chain and boot Grub from Coreboot so that you can perform the rest of the boot process via Grub
- `nvramtui` - a utility to configure the Embedded Controller (EC) firmware on thinkpad laptops
- `memtest` - perform memory tests at the BIOS level!
- `coreinfo` - provides low-level information about Coreboot
- TINC - play tetris without even booting an OS!
!!! info
<figure>
<img src="/images/tinc.png" style="height: auto; width: 400px;"/>
<figcaption style="text-align: justify;">
The TINC Coreboot payload - Tetris at the BIOS level. No Operating System!
</figcaption>
</figure>
## Introducing Skulls
The [Skulls Project](https://github.com/merge/skulls) is a [Coreboot
distribution](https://doc.coreboot.org/distributions.html). They ship a
pre-compiled Coreboot binary for the Lenovo X230 Thinkpad along with a set of
scripts that make it it simple to install and use it.
The LC230 ships pre-installed with the latest release of Skulls.
## How is an LC230 assembled?
Your LC230 laptop is refurbished and liberated with a mix of new and used components. Here is the process of refurbishing it:
1. We first purchase a used Lenovo x230 Thinkpad laptop
2. Once we inspect it for physical and other defects, the process of liberating it starts.
3. First the laptop is opened up and cleaned - all the internal and external plus the CPU fan.
4. Next using a SIOC-8 clip, coreboot is flashed to SPI flash that is used to store the system firmware.
5. Once the sytem is running coreboot, the default Intel wireless card is replaced with an Atheros one.
6. After that, based on the requested configuration, a new mSATA or SATA SSD is added, more RAM or even a brand new battery.
7. Finally - an OS is installed and the system is tested for heating issues, networking and so on.
Now your liberated computer is ready for you to play with ! :-)

+ 69
- 0
docs/lc230/troubleshooting.md View File

@ -0,0 +1,69 @@
# Troubleshooting & Common Problems
## Heating or fan issues
One possible challenge with a refurbished laptop is that there can be heating
issues. All LC230 units that we sell are well tested for such issues to ensure
that the laptop's CPU cools well during heavy CPU usage. This is done by
ensuring two things:
1. The CPU fan is clean of dust and other foreign material that might affect
its ability to offer good CPU cooling.
2. The CPU fan's heatsink is able to conduct heat properly
Check out what a dirty and clean fan looks like.
<div style="text-align: center">
<figure style="display: inline-block" >
<img src="/images/dirty-fan.jpg" width="250" />
<figcaption> A dirty fan! </figcaption>
</figure>
&nbsp; &nbsp;
<figure style="display: inline-block" >
<img src="/images/clean-fan.jpg" width="250" />
<figcaption> A very clean fan! </figcaption>
</figure>
</div>
If you face any heating issues (or a noisy fan) a few months after purchasing a
LC230, one thing that would help is cleaning the fan using an air blower.
Here is what a clean CPU fan achieves:
<figure style="box-shadow: 0px 0px 20px #888888; margin-bottom: -2em;" >
<img src="/images/htop.png" />
</figure>
<br>
<figure style="box-shadow: 0px 0px 20px #888888;" >
<img src="/images/stress-test.png" />
</figure>
As you can see, even under very heavy CPU utilisation (and system load), the
CPU fan running at **5380 RPM** is able to cool down the CPU to keep the core
temperature around +84&#176; C.
## Battery management
In case your current LC230 battery does not give you sufficient backup, you can
purchase a new 6-cell or 9-cell battery. The part numbers are as follows:
* Lenovo Thinkpad 6-cell Battery 44+ (Part Number: 0A36306)
* Lenovo ThinkPad 9-cell Battery 44++ (Part Number: 0A36307)
## Swapping the keyboard
It is possible to use the Lenovo Classic keyboard (last seen on the X220
Thinkpad model) with the X230. This involves three steps:
- Modifying the keyboard connector
- Flashing a modified BIOS (over the default Lenovo one)
- Replacing the palm-rest with an x220 one
We will be glad to help you with this modification. The steps are detailed on the
[Thinkwiki](http://www.thinkwiki.org/wiki/Install_Classic_Keyboard_on_xx30_Series_ThinkPads).

+ 318
- 0
docs/lc230/user-guide.md View File

@ -0,0 +1,318 @@
# (LC230) User Guide
## The Coreboot Boot Process
Here is what the boot process looks like with Coreboot installed:
<figure>
<img src="/images/coreboot-diagram.png" width="420" />
<figcaption>Coreboot Sequence Diagram</figcaption>
</figure>
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:
<figure>
<img src="/images/lc230-boot.gif" width="420" />
<figcaption>LC230 Boot Process</figcaption>
</figure>
## Installing an OS
To install any GNU/Linux OS, here is a sequence of steps:
### Build USB Installer
Any GNU/Linux OS would work very well on your LC230 laptop. (Some owners have
also installed and used FreeBSD on it.)
LC230 is configured to run without any proprietary firmware and hence, any of
the following operating systems would work well by default:
* [Debian GNU/Linux (main)](https://debian.org)
* [PureOS](https://pureos.net/)
* [Triquel](https://trisquel.info/)
!!! tip
The [Rasperrby Pi Imager](https://www.raspberrypi.org/software/) is a good
tool to use to write an OS image to a USB disk. [Balena Etcher](https://www.balena.io/etcher/) is another
one.
### Plug-in USB Disk
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.
!!! info
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.
The USB port on the right side (yellow in colour) is a USB2 port.
### Choose the boot device
Press ++escape++ on boot and choose the USB disk as the boot device
<figure>
<img src="/images/lc230-boot-logo.jpg" width="400" />
<figcaption>LC230 Boot Image</figcaption>
</figure>
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 ++escape++ and then choose the desired boot device
from the SeaBIOS menu.
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 **and** a mSATA disk, then the USB disk would be
the third boot device.
<figure>
<img src="/images/lc230-usb3.jpg"/>
<figcaption>LC230 USB3 Ports</figcaption>
</figure>
### Install the OS
You can now proceed with the OS installation as normal.
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 `grub-pc` if you choose to
use Grub and Debian.
## Coreboot Internal Flashing
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:
<figure>
<img src="/images/x230-flashing.png"/>
<figcaption>Liberating the LC230 via External Flashing</figcaption>
</figure>
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.
### Configure the kernel
The first things to do before you can flash Coreboot internally, is to boot the
kernel with an additional option:
iomem=relaxed
On Debian (and derived operating systems such as Ubuntu), you can make this a
permanent setting:
1. Edit the file: `/etc/default/grub`
2. Update the line `GRUB_CMDLINE_LINUX` to read:
`GRUB_CMDLINE_LINUX="iomem=relaxed"`
3. Run: `update-grub` to update the Grub configuration.
### Query Coreboot details
You can verify the coreboot version (as well as the fact that you're running
coreboot) by using the `dmidecode` utility as follows:
#### BIOS version
``` console
$ sudo dmidecode -t bios
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
Vendor: coreboot
Version: CBET4000 4.10-1082-g4357a82076-dirty
Release Date: 10/20/2019
ROM Size: 12 MB
Characteristics:
PCI is supported
PC Card (PCMCIA) is supported
BIOS is upgradeable
Selectable boot is supported
ACPI is supported
Targeted content distribution is supported
BIOS Revision: 4.10
Firmware Revision: 0.0
```
#### System type & name
``` shell-session
$ sudo dmidecode -t system
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: LENOVO
Product Name: 2325BU3
Version: ThinkPad X230
Serial Number: PK1HM8E
UUID: ce136601-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Wake-up Type: Reserved
SKU Number: Not Specified
Family: ThinkPad X230
Handle 0x000B, DMI type 32, 11 bytes
System Boot Information
Status: No errors detected
```
### Install: `flashrom`
The primary tool for operating on your BIOS is called `flashrom`. The Debian
package is also called by the same name and can be installed as:
apt-get install flashrom
If the kernel is booted correctly with `iomem=relaxed`, you can run `flashrom`:
flashrom -pinternal
Ouput:
``` shell-session
$ sudo flashrom -pinternal
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
No operations were specified.
```
!!! tip
Sometimes `flashrom` 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 `flashrom` as: `flashrom
-pinternal:laptop=force_I_want_a_brick`. This is not completely safe
### Read BIOS Image
You can dump the BIOS to a file:
``` console
$ flashrom -pinternal -r lc230-coreboot.rom
```
This will read the BIOS to a file: `lc230-coreboot.rom`. This file will be 12 MB in size.
``` console
$ sudo flashrom -pinternal -r lc230.rom
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
Reading flash... done.
$ ls -lh lc230-coreboot.rom
-rw-r--r-- 1 root root 12M Feb 8 04:46 lc230-coreboot.rom
```
### Write BIOS Image
You can now write back to the BIOS chips as follows:
``` console
$ sudo flashrom -pinternal -w lc230-coreboot.rom
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
Reading old flash chip contents... done.
Erasing and writing flash chip...
Warning: Chip content is identical to the requested image.
Erase/write done
```
### Flash: Skulls
The Skulls Coreboot distribution provides built in scripts to upgrade the BIOS.
The update procedure is [detailed
here](https://github.com/merge/skulls/blob/master/x230/README.md#updating).
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.
### Flash: Heads
If you want to experiment with the [Heads firmware](https://osresearch.net/),
instructions are available on the [Heads website](https://osresearch.net/) as
well as in the [Skulls documentation](https://github.com/merge/skulls/blob/master/x230/README.md#moving-to-heads).
## Configuring Coreboot
Your LC230 ships with a SeaBIOS payload called `nvramcui` that allows you to
configure coreboot behaviour and save the settings to nvram.
<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>
### Swapping ++fn++ and ++control++
The `fn_ctrl_swap` on the 2nd page of the `nvramcui` settings page enables you
to toggle the ++fn++ and ++control++ swap. If you like to have the control key
on the bottom left corner of the keyboard, then you can set this option to `Enable`.
### Increasing Graphics Memory
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 `gfx_uma_size` option on the 3rd page of the `nvramcui` settings.
Pressing the ++left++ and ++right++ arrow keys you can iterate over all the
available settings for this option.
### Other settings
You can also configure the following behaviour via nvramcui:
* **Always On USB**: By enabling this option, you can configure the USB ports
to be *always on* - even when the laptop is suspended.
* **Enable/Disable Trackpoing, Touchpad**: You can toggle the `touchpad` and
`trackpoint` options to enable or disable the the touchpad and trackpoint
respectively.

+ 8
- 0
docs/le01/index.md View File

@ -0,0 +1,8 @@
# LE01 - Liberated Entertainment Center
<figure>
<img src="/images/libreelec.png" width="420" align="left" />
<figcaption>Powered by LibreELEC</figcaption>
</figure>
# Documentation coming soon...

+ 8
- 0
docs/ledc/index.md View File

@ -0,0 +1,8 @@
# LEDC - LED Lighting Controller
<figure>
<img src="/images/both-rgb-controller.jpg" width="420" align="left" />
<figcaption>For RGB LED Strips</figcaption>
</figure>
# Documentation coming soon...

+ 69
- 0
mkdocs.yml View File

@ -0,0 +1,69 @@
# Project information
site_name: 'LibreTechShop - Documentation'
site_description: 'Accessible & Free Documentation for Libre Products'
site_author: 'Abhas Abhinav'
site_logo: /images/lts-icon.png
# Repository
#repo_name: 'abhas/lts-docs'
#repo_url: https://github.com/abhas/lts-docs
# Copyright
copyright: 'Copyright &copy; Mostly Harmless'
theme:
name: material
nav_style: dark
font: false
logo: images/lts-icon.png
favicon: images/lts-icon.png
palette:
scheme: default
primary: white
accent: pink
# Google Analytics Disabled by default
google_analytics:
extra:
# Use the repo edit url instead of the link to the repo
use_edit_url: false
nav:
- Home: index.md
- LC230:
- (LC230) Overview: lc230/index.md
- (LC230) User Guide: lc230/user-guide.md
- (LC230) Troubleshooting: lc230/troubleshooting.md
- LE01: le01/index.md
- LEDC: ledc/index.md
plugins:
- search
extra_css:
- css/extra.css
# Extensions
markdown_extensions:
- attr_list
- admonition
- codehilite:
guess_lang: false
- toc:
permalink: true
toc_depth: 3
- footnotes
- meta
- pymdownx.critic
- pymdownx.emoji
- pymdownx.keys
- pymdownx.mark
- pymdownx.smartsymbols
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.tilde
- pymdownx.tabbed
- pymdownx.progressbar
- pymdownx.highlight
- pymdownx.superfences

+ 327
- 0
site/404.html View File

@ -0,0 +1,327 @@
<!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="shortcut icon" href="/images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>LibreTechShop - Documentation</title>
<link rel="stylesheet" href="/assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="/assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="/css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header-nav md-grid" aria-label="Header">
<a href="/." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="/images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="/images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" >
<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="/lc230/" class="md-nav__link">
(LC230) Overview
</a>
</li>
<li class="md-nav__item">
<a href="/lc230/user-guide/" class="md-nav__link">
(LC230) User Guide
</a>
</li>
<li class="md-nav__item">
<a href="/lc230/troubleshooting/" class="md-nav__link">
(LC230) Troubleshooting
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="/le01/" class="md-nav__link">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="/ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="/assets/javascripts/vendor.93c04032.min.js"></script>
<script src="/assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "/",
features: [],
search: Object.assign({
worker: "/assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

BIN
site/assets/images/favicon.png View File

Before After
Width: 48  |  Height: 48  |  Size: 1.8 KiB

+ 2
- 0
site/assets/javascripts/bundle.83e5331e.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/bundle.83e5331e.min.js.map
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/lunr/min/lunr.ar.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.da.min.js View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});

+ 18
- 0
site/assets/javascripts/lunr/min/lunr.de.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.du.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.es.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.fi.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.fr.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.hu.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.it.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/lunr/min/lunr.ja.min.js View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});

+ 1
- 0
site/assets/javascripts/lunr/min/lunr.jp.min.js View File

@ -0,0 +1 @@
module.exports=require("./lunr.ja");

+ 1
- 0
site/assets/javascripts/lunr/min/lunr.multi.min.js View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});

+ 18
- 0
site/assets/javascripts/lunr/min/lunr.nl.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.no.min.js View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});

+ 18
- 0
site/assets/javascripts/lunr/min/lunr.pt.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.ro.min.js
File diff suppressed because it is too large
View File


+ 18
- 0
site/assets/javascripts/lunr/min/lunr.ru.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js View File

@ -0,0 +1 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});

+ 18
- 0
site/assets/javascripts/lunr/min/lunr.sv.min.js View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});

+ 18
- 0
site/assets/javascripts/lunr/min/lunr.tr.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/lunr/min/lunr.vi.min.js View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});

+ 1
- 0
site/assets/javascripts/lunr/tinyseg.min.js
File diff suppressed because it is too large
View File


+ 16
- 0
site/assets/javascripts/vendor.93c04032.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/vendor.93c04032.min.js.map
File diff suppressed because it is too large
View File


+ 59
- 0
site/assets/javascripts/worker/search.8c7e0a7e.min.js
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/javascripts/worker/search.8c7e0a7e.min.js.map
File diff suppressed because it is too large
View File


+ 3
- 0
site/assets/stylesheets/main.15aa0b43.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/stylesheets/main.15aa0b43.min.css.map
File diff suppressed because it is too large
View File


+ 3
- 0
site/assets/stylesheets/palette.75751829.min.css
File diff suppressed because it is too large
View File


+ 1
- 0
site/assets/stylesheets/palette.75751829.min.css.map
File diff suppressed because it is too large
View File


+ 100
- 0
site/css/extra.css View File

@ -0,0 +1,100 @@
.title-bar {
background-color: #FFC512;
}
.title-bar .title-bar__title {
color: #000133;
font-family: Iosevka;
}
.side-bar .side-bar__menu .side-bar__link:hover, .side-bar .side-bar__menu .side-bar__link.side-bar__link--active {
color: #B30049;
}
h1 {
color: #EBA80F;
font-family: Iosevka;
font-size: 2em;
}
h2 {
color: #0082C9;
font-family: Iosevka;
font-size: 1.5em;
border: 3px solid #DFDFDF;
padding: 4px;
text-align: center;
box-shadow: 0px 0px 15px #888888;
}
h3 {
color: #B30049;
font-family: Iosevka;
font-size: 1.2em;
}
.p, .kpn-style p:not([class]) {
font-family: Iosevka;
}
body, h1 {
font-family: Iosevka;
}
.h2, .kpn-style h2:not([class]) {
font-family: Iosevka;
font-weight: 800;
}
.tile {
box-shadow: 1px 1px 6px #6f6f6f;
}
a[rel=prev] {
display: none;
}
a[rel=next] {
display: none;
}
.card-title {
text-align: center;
font-size: 1.2em;
}
.card-title h4 {
text-align: center;
}
.card-footer {
text-align: center;
}
.card-footer .btn {
}
.badge {
font-size: 50%;
}
.card-img-top {
width: 100%;
height: 10vw;
object-fit: cover;
margin-top: 0.5em;
}
.md-typeset a, a {
color: #0082C9;
}
.md-tabs__link {
color: #F8E7A5;
}
.md-tabs__link--active {
font-weight: 900;
font-size: 1.6em;
}

BIN
site/images/both-rgb-controller.jpg View File

Before After
Width: 562  |  Height: 390  |  Size: 66 KiB

BIN
site/images/clean-fan.jpg View File

Before After
Width: 339  |  Height: 286  |  Size: 85 KiB

BIN
site/images/coreboot-diagram.png View File

Before After
Width: 652  |  Height: 614  |  Size: 60 KiB

BIN
site/images/dirty-fan.jpg View File

Before After
Width: 259  |  Height: 225  |  Size: 57 KiB

BIN
site/images/htop.png View File

Before After
Width: 627  |  Height: 101  |  Size: 16 KiB

BIN
site/images/lc230-boot-logo.jpg View File

Before After
Width: 410  |  Height: 230  |  Size: 17 KiB

BIN
site/images/lc230-boot.gif View File

Before After
Width: 1920  |  Height: 1080  |  Size: 12 MiB

BIN
site/images/lc230-boot.mp4 View File


BIN
site/images/lc230-boot.png View File

Before After
Width: 800  |  Height: 524  |  Size: 483 KiB

BIN
site/images/lc230-usb3.jpg View File

Before After
Width: 300  |  Height: 37  |  Size: 4.9 KiB

BIN
site/images/lc230.png View File

Before After
Width: 800  |  Height: 673  |  Size: 660 KiB

BIN
site/images/lenovo-error.jpg View File

Before After
Width: 2196  |  Height: 532  |  Size: 323 KiB

BIN
site/images/libreelec.png View File

Before After
Width: 1360  |  Height: 768  |  Size: 206 KiB

BIN
site/images/lts-icon.png View File

Before After
Width: 250  |  Height: 250  |  Size: 16 KiB

BIN
site/images/lts-logo.png View File

Before After
Width: 321  |  Height: 89  |  Size: 16 KiB

BIN
site/images/nvramcui-1.jpg View File

Before After
Width: 476  |  Height: 435  |  Size: 108 KiB

BIN
site/images/nvramcui-2.jpg View File

Before After
Width: 449  |  Height: 435  |  Size: 91 KiB

BIN
site/images/nvramcui-3.jpg View File

Before After
Width: 465  |  Height: 257  |  Size: 68 KiB

BIN
site/images/rgb-d1-r32.png View File

Before After
Width: 377  |  Height: 312  |  Size: 200 KiB

BIN
site/images/rgb-d1.png View File

Before After
Width: 398  |  Height: 327  |  Size: 246 KiB

BIN
site/images/stress-test.png View File

Before After
Width: 408  |  Height: 380  |  Size: 25 KiB

BIN
site/images/tinc.png View File

Before After
Width: 614  |  Height: 429  |  Size: 433 KiB

BIN
site/images/x230-flashing.jpg View File

Before After
Width: 600  |  Height: 548  |  Size: 124 KiB

BIN
site/images/x230-flashing.png View File

Before After
Width: 400  |  Height: 299  |  Size: 247 KiB

BIN
site/images/x230.png View File

Before After
Width: 200  |  Height: 200  |  Size: 10 KiB

+ 416
- 0
site/index.html View File

@ -0,0 +1,416 @@
<!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="shortcut icon" href="images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>LibreTechShop - Documentation</title>
<link rel="stylesheet" href="assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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="#welcome-to-the-libre-tech-shop-documentation" 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-nav md-grid" aria-label="Header">
<a href="." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
Home
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="." class="md-nav__link md-nav__link--active">
Home
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" >
<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="lc230/" class="md-nav__link">
(LC230) Overview
</a>
</li>
<li class="md-nav__item">
<a href="lc230/user-guide/" class="md-nav__link">
(LC230) User Guide
</a>
</li>
<li class="md-nav__item">
<a href="lc230/troubleshooting/" class="md-nav__link">
(LC230) Troubleshooting
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="le01/" class="md-nav__link">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="welcome-to-the-libre-tech-shop-documentation">Welcome to the Libre Tech Shop Documentation<a class="headerlink" href="#welcome-to-the-libre-tech-shop-documentation" title="Permanent link">&para;</a></h1>
<p>The Libre Tech Shop is a first of its kind online store for products that
respect your freedom.</p>
<p>Every product you purchase here will be powered by free software, will be
accompanied by documentation and will give you the freedom to hack, learn,
modify and share. These products will not track you and will respect your
freedom and privacy.</p>
<h1 id="products">Products<a class="headerlink" href="#products" title="Permanent link">&para;</a></h1>
<table>
<thead>
<tr>
<th>Method</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><img class="card-img-top" src="/images/lc230.png" style="height: 100px"></td>
<td><a href="/lc230/">LC230</a> <br> Liberated Computer LC230</td>
</tr>
<tr>
<td><img class="card-img-top" src="/images/libreelec.png" style="height: 100px"></td>
<td><a href="/le01/">LE01</a> <br> Liberated Entertainment Center LE01</td>
</tr>
<tr>
<td><img class="card-img-top" src="/images/both-rgb-controller.jpg" style="height: 100px"></td>
<td><a href="/ledc/">LEDC</a> <br> LED Lighting Controller LEDC</td>
</tr>
</tbody>
</table>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="lc230/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
(LC230) Overview
</div>
</div>
<div class="md-footer-nav__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>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="assets/javascripts/vendor.93c04032.min.js"></script>
<script src="assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: ".",
features: [],
search: Object.assign({
worker: "assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

+ 570
- 0
site/lc230/index.html View File

@ -0,0 +1,570 @@
<!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="shortcut icon" href="../images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>(LC230) Overview - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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-the-liberated-computer" 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-nav md-grid" aria-label="Header">
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="../images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
(LC230) Overview
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="../images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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 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) Overview
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
(LC230) Overview
</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-scrollfix>
<li class="md-nav__item">
<a href="#why-lc230" class="md-nav__link">
Why LC230?
</a>
</li>
<li class="md-nav__item">
<a href="#what-is-coreboot" class="md-nav__link">
What is Coreboot?
</a>
</li>
<li class="md-nav__item">
<a href="#introducing-skulls" class="md-nav__link">
Introducing Skulls
</a>
</li>
<li class="md-nav__item">
<a href="#how-is-an-lc230-assembled" class="md-nav__link">
How is an LC230 assembled?
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="user-guide/" class="md-nav__link">
(LC230) User Guide
</a>
</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">
<a href="../le01/" class="md-nav__link">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="../ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="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-scrollfix>
<li class="md-nav__item">
<a href="#why-lc230" class="md-nav__link">
Why LC230?
</a>
</li>
<li class="md-nav__item">
<a href="#what-is-coreboot" class="md-nav__link">
What is Coreboot?
</a>
</li>
<li class="md-nav__item">
<a href="#introducing-skulls" class="md-nav__link">
Introducing Skulls
</a>
</li>
<li class="md-nav__item">
<a href="#how-is-an-lc230-assembled" class="md-nav__link">
How is an LC230 assembled?
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="lc230-the-liberated-computer">LC230 - The Liberated Computer<a class="headerlink" href="#lc230-the-liberated-computer" title="Permanent link">&para;</a></h1>
<figure>
<img src="/images/x230.png"/>
</figure>
<h2 id="why-lc230">Why LC230?<a class="headerlink" href="#why-lc230" title="Permanent link">&para;</a></h2>
<p>Why does LC230 exist?</p>
<p>Some of the most fundamental questions that we need to answer about the hardware that we possess are those of "ownership":</p>
<div class="admonition question">
<p class="admonition-title">Question</p>
<ul class="task-list">
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> What is the definition of owning a piece of hardware? </li>
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> Are we the owners of the hardware merely because we paid for it and now have possession of it?</li>
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> If we are owners do we have the necessary freedom and opportunity to do what we want with it? </li>
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> How much control does the manufacturer of a device exert after "selling" the device to us?</li>
<li class="task-list-item"><label class="task-list-control"><input type="checkbox" disabled/><span class="task-list-indicator"></span></label> If such control does exist, then how do we re-define ownership now?</li>
</ul>
</div>
<p>The answers to these questions are not easy, universal or simple. Hence, we might define ownership in the following terms:</p>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>We are the true owners of our hardware if we can <strong>do whatever we want</strong> with hardware <strong>without then
permission of the manufacturer</strong>. This includes the <strong>freedom to change or upgrade hardware components</strong>
at will, <strong>repair and refurbish</strong> the hardware and <strong>install the software we want</strong> (without constraints).</p>
</div>
<p>The <strong>"Liberated Computer"</strong> project exists to provide users with convenient access to
reliable, libre-software friendly and hackable computers. The key to having the freedom to compute in a manner
we deem respectful is to first liberate the computers from the locks and constraints imposed by the manufacturer.</p>
<div class="admonition failure">
<p class="admonition-title">Failure</p>
<p><figure>
<img src="/images/lenovo-error.jpg" />
<figcaption style="text-align: justify;">
Even 8 years after the model ceased production, Lenovo's BIOS does not give you the freedom to change the
wireless card of the laptop to one that would work without proprietary firmware! <br> <br>
This is a classic example of a manufacturer exerting control over the hardware well beyond its intended lifespan. <br> <br>
Unless a wireless card that is "white-listed" by the BIOS is plugged in, the system will not boot up. The only way to
move beyond this limitation is to replace the BIOS and hence, liberate the computer.
</figcaption>
</figure></p>
</div>
<h2 id="what-is-coreboot">What is Coreboot?<a class="headerlink" href="#what-is-coreboot" title="Permanent link">&para;</a></h2>
<p>Coreboot is a free/libre software BIOS replacement. It was developed to allow computers users the ability to exert
greater control on their computers by being able to control the BIOS. Coreboot is a very modular BIOS and runs on a wide
variety of computer mainboards. More details are available at: <a href="https://coreboot.org">coreboot.org</a></p>
<p>Coreboot's main advantage is that of software freedom at the BIOS level. It liberates the computer and allows a
user to load multiple types of boot payloads while also allowing us to cripple and neuter the Intel ME.</p>
<p>Some of the common payloads supported by Coreboot are:</p>
<ul>
<li>SeaBIOS - the default payload that ships with your LC230</li>
<li>Linux - you can embed and load a Linux kernel on the BIOS chip</li>
<li>Grub - You can also daisy-chain and boot Grub from Coreboot so that you can perform the rest of the boot process via Grub</li>
<li><code>nvramtui</code> - a utility to configure the Embedded Controller (EC) firmware on thinkpad laptops</li>
<li><code>memtest</code> - perform memory tests at the BIOS level!</li>
<li><code>coreinfo</code> - provides low-level information about Coreboot</li>
<li>TINC - play tetris without even booting an OS!</li>
</ul>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p><figure>
<img src="/images/tinc.png" style="height: auto; width: 400px;"/>
<figcaption style="text-align: justify;">
The TINC Coreboot payload - Tetris at the BIOS level. No Operating System!
</figcaption>
</figure></p>
</div>
<h2 id="introducing-skulls">Introducing Skulls<a class="headerlink" href="#introducing-skulls" title="Permanent link">&para;</a></h2>
<p>The <a href="https://github.com/merge/skulls">Skulls Project</a> is a <a href="https://doc.coreboot.org/distributions.html">Coreboot
distribution</a>. They ship a
pre-compiled Coreboot binary for the Lenovo X230 Thinkpad along with a set of
scripts that make it it simple to install and use it.</p>
<p>The LC230 ships pre-installed with the latest release of Skulls.</p>
<h2 id="how-is-an-lc230-assembled">How is an LC230 assembled?<a class="headerlink" href="#how-is-an-lc230-assembled" title="Permanent link">&para;</a></h2>
<p>Your LC230 laptop is refurbished and liberated with a mix of new and used components. Here is the process of refurbishing it:</p>
<ol>
<li>We first purchase a used Lenovo x230 Thinkpad laptop</li>
<li>Once we inspect it for physical and other defects, the process of liberating it starts.</li>
<li>First the laptop is opened up and cleaned - all the internal and external plus the CPU fan.</li>
<li>Next using a SIOC-8 clip, coreboot is flashed to SPI flash that is used to store the system firmware.</li>
<li>Once the sytem is running coreboot, the default Intel wireless card is replaced with an Atheros one.</li>
<li>After that, based on the requested configuration, a new mSATA or SATA SSD is added, more RAM or even a brand new battery.</li>
<li>Finally - an OS is installed and the system is tested for heating issues, networking and so on.</li>
</ol>
<p>Now your liberated computer is ready for you to play with ! :-) </p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href=".." class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
Home
</div>
</div>
</a>
<a href="user-guide/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
(LC230) User Guide
</div>
</div>
<div class="md-footer-nav__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>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="../assets/javascripts/vendor.93c04032.min.js"></script>
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "..",
features: [],
search: Object.assign({
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

+ 534
- 0
site/lc230/troubleshooting/index.html View File

@ -0,0 +1,534 @@
<!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="shortcut icon" href="../../images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>(LC230) Troubleshooting - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../../css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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="#troubleshooting-common-problems" 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-nav md-grid" aria-label="Header">
<a href="../.." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="../../images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
(LC230) Troubleshooting
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="../../images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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">
<a href="../user-guide/" class="md-nav__link">
(LC230) User Guide
</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) Troubleshooting
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
(LC230) Troubleshooting
</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-scrollfix>
<li class="md-nav__item">
<a href="#heating-or-fan-issues" class="md-nav__link">
Heating or fan issues
</a>
</li>
<li class="md-nav__item">
<a href="#battery-management" class="md-nav__link">
Battery management
</a>
</li>
<li class="md-nav__item">
<a href="#swapping-the-keyboard" class="md-nav__link">
Swapping the keyboard
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../le01/" class="md-nav__link">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="../../ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="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-scrollfix>
<li class="md-nav__item">
<a href="#heating-or-fan-issues" class="md-nav__link">
Heating or fan issues
</a>
</li>
<li class="md-nav__item">
<a href="#battery-management" class="md-nav__link">
Battery management
</a>
</li>
<li class="md-nav__item">
<a href="#swapping-the-keyboard" class="md-nav__link">
Swapping the keyboard
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="troubleshooting-common-problems">Troubleshooting &amp; Common Problems<a class="headerlink" href="#troubleshooting-common-problems" title="Permanent link">&para;</a></h1>
<h2 id="heating-or-fan-issues">Heating or fan issues<a class="headerlink" href="#heating-or-fan-issues" title="Permanent link">&para;</a></h2>
<p>One possible challenge with a refurbished laptop is that there can be heating
issues. All LC230 units that we sell are well tested for such issues to ensure
that the laptop's CPU cools well during heavy CPU usage. This is done by
ensuring two things:</p>
<ol>
<li>
<p>The CPU fan is clean of dust and other foreign material that might affect
its ability to offer good CPU cooling.</p>
</li>
<li>
<p>The CPU fan's heatsink is able to conduct heat properly</p>
</li>
</ol>
<p>Check out what a dirty and clean fan looks like.</p>
<div style="text-align: center">
<figure style="display: inline-block" >
<img src="/images/dirty-fan.jpg" width="250" />
<figcaption> A dirty fan! </figcaption>
</figure>
&nbsp; &nbsp;
<figure style="display: inline-block" >
<img src="/images/clean-fan.jpg" width="250" />
<figcaption> A very clean fan! </figcaption>
</figure>
</div>
<p>If you face any heating issues (or a noisy fan) a few months after purchasing a
LC230, one thing that would help is cleaning the fan using an air blower.</p>
<p>Here is what a clean CPU fan achieves:</p>
<figure style="box-shadow: 0px 0px 20px #888888; margin-bottom: -2em;" >
<img src="/images/htop.png" />
</figure>
<p><br></p>
<figure style="box-shadow: 0px 0px 20px #888888;" >
<img src="/images/stress-test.png" />
</figure>
<p>As you can see, even under very heavy CPU utilisation (and system load), the
CPU fan running at <strong>5380 RPM</strong> is able to cool down the CPU to keep the core
temperature around +84&#176; C.</p>
<h2 id="battery-management">Battery management<a class="headerlink" href="#battery-management" title="Permanent link">&para;</a></h2>
<p>In case your current LC230 battery does not give you sufficient backup, you can
purchase a new 6-cell or 9-cell battery. The part numbers are as follows:</p>
<ul>
<li>Lenovo Thinkpad 6-cell Battery 44+ (Part Number: 0A36306)</li>
<li>Lenovo ThinkPad 9-cell Battery 44++ (Part Number: 0A36307)</li>
</ul>
<h2 id="swapping-the-keyboard">Swapping the keyboard<a class="headerlink" href="#swapping-the-keyboard" title="Permanent link">&para;</a></h2>
<p>It is possible to use the Lenovo Classic keyboard (last seen on the X220
Thinkpad model) with the X230. This involves three steps:</p>
<ul>
<li>Modifying the keyboard connector</li>
<li>Flashing a modified BIOS (over the default Lenovo one)</li>
<li>Replacing the palm-rest with an x220 one</li>
</ul>
<p>We will be glad to help you with this modification. The steps are detailed on the
<a href="http://www.thinkwiki.org/wiki/Install_Classic_Keyboard_on_xx30_Series_ThinkPads">Thinkwiki</a>.</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../user-guide/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
(LC230) User Guide
</div>
</div>
</a>
<a href="../../le01/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
LE01
</div>
</div>
<div class="md-footer-nav__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>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="../../assets/javascripts/vendor.93c04032.min.js"></script>
<script src="../../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "../..",
features: [],
search: Object.assign({
worker: "../../assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

+ 984
- 0
site/lc230/user-guide/index.html View File

@ -0,0 +1,984 @@
<!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="shortcut icon" href="../../images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>(LC230) User Guide - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../../css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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-nav md-grid" aria-label="Header">
<a href="../.." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="../../images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
(LC230) User Guide
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="../../images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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-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">
<a href="../../le01/" class="md-nav__link">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="../../ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="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-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">
<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>BIOS version</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>System type &amp; name</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">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
(LC230) Overview
</div>
</div>
</a>
<a href="../troubleshooting/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
(LC230) Troubleshooting
</div>
</div>
<div class="md-footer-nav__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>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="../../assets/javascripts/vendor.93c04032.min.js"></script>
<script src="../../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "../..",
features: [],
search: Object.assign({
worker: "../../assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

+ 405
- 0
site/le01/index.html View File

@ -0,0 +1,405 @@
<!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="shortcut icon" href="../images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>LE01 - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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="#le01-liberated-entertainment-center" 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-nav md-grid" aria-label="Header">
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="../images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LE01
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="../images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" >
<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="../lc230/" class="md-nav__link">
(LC230) Overview
</a>
</li>
<li class="md-nav__item">
<a href="../lc230/user-guide/" class="md-nav__link">
(LC230) User Guide
</a>
</li>
<li class="md-nav__item">
<a href="../lc230/troubleshooting/" class="md-nav__link">
(LC230) Troubleshooting
</a>
</li>
</ul>
</nav>
</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">
<a href="./" class="md-nav__link md-nav__link--active">
LE01
</a>
</li>
<li class="md-nav__item">
<a href="../ledc/" class="md-nav__link">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="le01-liberated-entertainment-center">LE01 - Liberated Entertainment Center<a class="headerlink" href="#le01-liberated-entertainment-center" title="Permanent link">&para;</a></h1>
<figure>
<img src="/images/libreelec.png" width="420" align="left" />
<figcaption>Powered by LibreELEC</figcaption>
</figure>
<h1 id="documentation-coming-soon">Documentation coming soon...<a class="headerlink" href="#documentation-coming-soon" title="Permanent link">&para;</a></h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../lc230/troubleshooting/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
(LC230) Troubleshooting
</div>
</div>
</a>
<a href="../ledc/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
<div class="md-footer-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Next
</span>
LEDC
</div>
</div>
<div class="md-footer-nav__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>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="../assets/javascripts/vendor.93c04032.min.js"></script>
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "..",
features: [],
search: Object.assign({
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

+ 391
- 0
site/ledc/index.html View File

@ -0,0 +1,391 @@
<!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="shortcut icon" href="../images/lts-icon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.4">
<title>LEDC - LibreTechShop - Documentation</title>
<link rel="stylesheet" href="../assets/stylesheets/main.15aa0b43.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.75751829.min.css">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../css/extra.css">
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" 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="#ledc-led-lighting-controller" 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-nav md-grid" aria-label="Header">
<a href=".." title="LibreTechShop - Documentation" class="md-header-nav__button md-logo" aria-label="LibreTechShop - Documentation">
<img src="../images/lts-icon.png" alt="logo">
</a>
<label class="md-header-nav__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-nav__title" data-md-component="header-title">
<div class="md-header-nav__ellipsis">
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LibreTechShop - Documentation
</span>
</div>
<div class="md-header-nav__topic">
<span class="md-ellipsis">
LEDC
</span>
</div>
</div>
</div>
<label class="md-header-nav__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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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" data-md-state="active" 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 0116 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 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.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>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
</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>
</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="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">
<img src="../images/lts-icon.png" alt="logo">
</a>
LibreTechShop - Documentation
</label>
<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--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" >
<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="../lc230/" class="md-nav__link">
(LC230) Overview
</a>
</li>
<li class="md-nav__item">
<a href="../lc230/user-guide/" class="md-nav__link">
(LC230) User Guide
</a>
</li>
<li class="md-nav__item">
<a href="../lc230/troubleshooting/" class="md-nav__link">
(LC230) Troubleshooting
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../le01/" class="md-nav__link">
LE01
</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">
<a href="./" class="md-nav__link md-nav__link--active">
LEDC
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content">
<article class="md-content__inner md-typeset">
<h1 id="ledc-led-lighting-controller">LEDC - LED Lighting Controller<a class="headerlink" href="#ledc-led-lighting-controller" title="Permanent link">&para;</a></h1>
<figure>
<img src="/images/both-rgb-controller.jpg" width="420" align="left" />
<figcaption>For RGB LED Strips</figcaption>
</figure>
<h1 id="documentation-coming-soon">Documentation coming soon...<a class="headerlink" href="#documentation-coming-soon" title="Permanent link">&para;</a></h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-nav">
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
<a href="../le01/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
<div class="md-footer-nav__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-nav__title">
<div class="md-ellipsis">
<span class="md-footer-nav__direction">
Previous
</span>
LE01
</div>
</div>
</a>
</nav>
</div>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
<div class="md-footer-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>
<script src="../assets/javascripts/vendor.93c04032.min.js"></script>
<script src="../assets/javascripts/bundle.83e5331e.min.js"></script><script id="__lang" type="application/json">{"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"}</script>
<script>
app = initialize({
base: "..",
features: [],
search: Object.assign({
worker: "../assets/javascripts/worker/search.8c7e0a7e.min.js"
}, typeof search !== "undefined" && search)
})
</script>
</body>
</html>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save