ThinkPad X230にcorebootをインストールする
Thinkpad X230にcorebootをインストールしましたので、記録しておきます。
corebootはlinuxベースのオープンソースなbiosです。これをインストールすることで、lenovo謹製のスパイウェアやホワイトリストとおさらばすることができます。
必要なもの
- Raspberry Pi
- Pomona 5250クリップ
- ジャンプワイヤ
- Ubuntu(又は他のlinux)が動作する環境
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
cd coreboot/ git submodule update --init --checkout
gccクロスコンパイラの設定です。今回使ったX230のCPUは4スレッドのi5-3320Mですので、「CPUS=4」とします。
※この処理にはかなり時間がかかります。気長に待ちましょう。
make crossgcc CPUS=4
終わったら以下のコマンドを打ちます。
make nconfig
すると、こんな感じのテキストインターフェイスの設定画面が出てきます。
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"
Mainboard
"Mainboard vendor"は"lenovo"を選択
"Mainboard model"は"ThinkPad X230"を選択
"ROM chip size"は"4096 KB (4 MB)"を選択
Chipset
" Enable VMX for virtualization (NEW)"だけチェック
Devices
以下にチェックを入れます。
"Use native graphics initialization"
"Enable PCIe Clock Power Management"
"Enable PCIe ASPM L1 SubState"
Display
そのまま
Console
そのまま
System tables
そのまま
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"はテトリスみたいなゲーム)
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チップ
↓Raspberry Pi
注意しなければならないのは、biosチップの向きです。X230では上の画像の向きから180度回転して実装されています。画像左上のポッチの位置をよく確認しましょう。
Pomona 5250クリップとジャンプワイヤーを使って、以下のように接続します。
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.