ちょっとした備忘録

ThinkPad X230にcorebootをインストールする

f:id:ymdtr519:20170308202114p:plain

Thinkpad X230にcorebootをインストールしましたので、記録しておきます。
corebootlinuxベースのオープンソースbiosです。これをインストールすることで、lenovo謹製のスパイウェアホワイトリストとおさらばすることができます。

必要なもの

Ubuntu上での作業

必要なパッケージをインストールします。
※いくつかのパッケージはbuild-essentialに含まれているかと思います。build-essentialをインストールしてから、足りないものを個別にインストールした方が良いかもしれません。

sudo apt-get install gcc g++ gcc-multilib make ncurses-dev cmake iasl flex bison doxygen

corebootをcloneします。

git clone https://review.coreboot.org/coreboot.git

ディレクトリを移動し、corebootを最新にします。

cd coreboot/
git submodule update --init --checkout

gccロスコンパイラの設定です。今回使ったX230のCPUは4スレッドのi5-3320Mですので、「CPUS=4」とします。
※この処理にはかなり時間がかかります。気長に待ちましょう。

make crossgcc CPUS=4

終わったら以下のコマンドを打ちます。

make nconfig

すると、こんな感じのテキストインターフェイスの設定画面が出てきます。f:id:ymdtr519:20170308080554p:plain

enterを押すと詳細項目に移動し、escを押すと戻ります。また、項目でenterを押すとチェックを付けたり消したりできます。
以下のように設定していきます。

General setup

以下にチェックを入れます。
"Compress ramstage with LZMA (NEW)"
"Include the coreboot .config file into the ROM image (NEW)"
"Create a table of timestamps collected during boot"
"Allow use of binary-only repository"
f:id:ymdtr519:20170308081100p:plain

Mainboard

"Mainboard vendor"は"lenovo"を選択
"Mainboard model"は"ThinkPad X230"を選択
"ROM chip size"は"4096 KB (4 MB)"を選択
f:id:ymdtr519:20170308081118p:plain

Chipset

" Enable VMX for virtualization (NEW)"だけチェック
f:id:ymdtr519:20170308081136p:plain

Devices

以下にチェックを入れます。
"Use native graphics initialization"
"Enable PCIe Clock Power Management"
"Enable PCIe ASPM L1 SubState"
f:id:ymdtr519:20170308081237p:plain

Display

そのまま
f:id:ymdtr519:20170308081248p:plain

Generic Drivers

以下にチェックを入れます。
Support Intel PCI-e WiFi adapters
PS/2 keyboard init
f:id:ymdtr519:20170308081332p:plain

Console

そのまま
f:id:ymdtr519:20170308081434p:plain

System tables

そのまま
f:id:ymdtr519:20170308081455p:plain

Payload

以下にチェック
Hardware init during option ROM execution
Use LZMA compression for payloads
"Secondary Payloads"では以下にチェック
Load coreinfo as a secondary payload
Load Memtest86+ as a secondary payload
("Load tint as a secondary payload"はテトリスみたいなゲーム)
f:id:ymdtr519:20170308081511p:plain

Debugging

そのまま
f:id:ymdtr519:20170308081545p:plain

終わったらF6を押して保存します。

makeします

make

"Built lenovo/x230 (ThinkPad X230)"と表示されたら成功です。
これでUbuntu上での作業は終わりです。"./build/coreboot.rom"がbuildされたcorebootのイメージファイルですので、これをRaspberry Piに持っていきます。


Raspberry Pi上での作業

raspi-configを起動して、SPIが有効になっていることを確認してください。

sudo raspi-config

必要なパッケージをインストールします。

sudo apt-get update
sudo apt-get install build-essential pciutils usbutils libusb-1.0-0-dev libpci-dev libftdi1 libftdi-dev zlib1g-dev subversion

romを焼くためのツールである「flashrom」をダウンロードし、makeします。makeには少し時間が掛かります。

svn co https://code.coreboot.org/svn/flashrom/trunk flashrom
cd flashrom
make

makeが終わったら以下のコマンドを打ちます。

sudo modprobe spi_bcm2835
sudo modprobe spidev

Pomona 5250クリップを使って、bios chipとRaspberry Piを接続します。
以下のようにピンを繋ぎます。
bios chip -> Raspberry Pi

  • 1 -> 24
  • 2 -> 21
  • 4 -> 25
  • 5 -> 19
  • 6 -> 23
  • 8 -> 17

biosチップとRaspberry Piのピン番号は以下のようになっています。
biosチップ
f:id:ymdtr519:20170308200658p:plain
Raspberry Pi
f:id:ymdtr519:20170308200703j:plain
注意しなければならないのは、biosチップの向きです。X230では上の画像の向きから180度回転して実装されています。画像左上のポッチの位置をよく確認しましょう。

Pomona 5250クリップとジャンプワイヤーを使って、以下のように接続します。
f:id:ymdtr519:20170308201722j:plain


biosチップとRaspberry Piが正しく接続されているかチェックするために以下のコマンドを実行します。

sudo ./flashrom -p linux_spi:dev=/dev/spidev0.0

正しく接続されていれば以下のように表示されます。

Found Macronix flash chip "MX25L3205(A)" (4096 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L3205D/MX25L3208D" (4096 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L3206E/MX25L3208E" (4096 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L3273E" (4096 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L3205(A)", "MX25L3205D/MX25L3208D", "MX25L3206E/MX25L3208E", "MX25L3273E"
Please specify which chip definition to use with the -c <chipname> option.

正しく接続されていなければ以下のように表示されます。

No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.

次に、biosを読みだしてMD5の値を確認します。これを3回繰り返し、MD5の値が全て同じであれば接続が正しくできています。

sudo ./flashrom -c "MX25L3206E/MX25L3208E" -p linux_spi:dev=/dev/spidev0.0 -r test.rom
md5sum test.rom


接続の確認ができたら、以下のコマンドでcorebootをインストールします。

sudo ./flashrom -c "MX25L3206E/MX25L3208E" -p linux_spi:dev=/dev/spidev0.0 -w /home/pi/Desktop/coreboot.rom

成功であれば以下のようなメッセージが表示されます。

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L3206E/MX25L3208E" (4096 kB, SPI) on linux_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.