ASUS Chromebook C200MAを格安Linuxノートとして使う目的で約2万円で購入し、試行錯誤の結果やっとまともに使えるようになったのでその記録。
ChromebookはChromeOSというWWWブラウザChromeを利用することに特化したOSが搭載されている。
ChromeOSのカーネルはLinuxなので色々なことができる。
Linuxディストリを使うという目的であれば2つの方法がある。
Linuxディストリをchroot環境で実行する
これについては、croutonという完成度の高いツールが公開されているので、それを利用するのが良い。chroot環境でありながら、GUI環境まで提供されている。
Linuxディストリを生で起動する
chrubuntuというのがあるようなのだが、私の理解が正しければLegacy boot(普通のPCでのBIOSによる起動)ができる古い機種でしか利用できない。
C200MAでもLegacy bootを有効化する方法は存在するのだが、危険な作業をする必要がある。
http://www.matws.org/c300/
http://kazuhito-m.github.io/tech/2015/10/04/choromebook-c300ma-ubuntu-boot/
それは避けたいと色々調べた結果、これらを参考に起動することができた。
https://wiki.debian.org/InstallingDebianOn/Asus/C201
https://bbs.archlinux.org/viewtopic.php?id=185789
https://github.com/hanklords/chromebook-busybox
概要
普通のPCでOSを起動するのはHDDのMBRを読み込むLegacy bootか、EFIバイナリが格納されたパーティションを読みこんで起動するEFI方式が一般的だ。
Chromebookはそのどちらでもない、corebootというものを利用しているそうである。
これは署名済みカーネルバイナリを焼きこんだカーネルパーティションを読み込んで起動するという方式のようだ。
そのため、UbuntuのようなLinuxディストリをインストールするにはこのような機構を理解していないといけない。
試行錯誤の結果、下記の方法によってUbuntuを起動させることに成功した。
・最小構成debian環境を作成する
Grubのかわりに、この環境からkexecにより他OSを起動する。
・UbuntuインストーラUSBを作成・修正・起動する
UbuntuインストーラUSBを一般的な手順で作成したあと、kexecで起動するためのスクリプトを作成し、debianから起動する
・Ubuntuをインストールし、Ubuntuを起動するためのスクリプトを作成する
本作業では
・Chromebook上のcrouton環境(以下crouton環境と呼ぶ)
・x86_64のUbuntu PC環境(以下PC環境と呼ぶ)
・Ubuntuインストール先のSDカード
を必要とする。
手順
途中、面倒になったので書きかけです。リンク先など参考にしてみてください。
Chromebook上のcrouton環境
Googleで検索して以下等を参考に準備してください
http://qiita.com/yasuki/items/f6a8a350087517b0069b
SDカードのパーティション作成
PC環境で行うことをおすすめする。rootで行う。
DEV=/dev/mmcblk1 # GPTとしてフォーマット parted --script ${DEV} mklabel gpt # ChromeOS用のGPTにする cgpt create ${DEV} # カーネルパーティションサイズは16MB固定のよう? KERNEL_SIZE=32768 P1_SIZE="${KERNEL_SIZE}" # Debian環境パーティションセクタサイズ 1GB相当 P2_SIZE=2097152 # Ubuntu環境パーティションセクタサイズ 適当に P3_SIZE=39772093 P1_BEGIN=34 P2_BEGIN=`expr ${P1_BEGIN} + ${P1_SIZE}` P3_BEGIN=`expr ${P2_BEGIN} + ${P2_SIZE}` # Debian環境カーネルパーティション cgpt add -t kernel -l debian_kernel -b ${P1_BEGIN} -s ${P1_SIZE} ${DEV} # Debian環境パーティション作成 cgpt add -t data -l debian_root -b ${P2_BEGIN} -s ${P2_SIZE} ${DEV} # Ubuntu環境パーティション作成 cgpt add -t data -l ubuntu_root -b ${P3_BEGIN} -s ${P3_SIZE} ${DEV} blockdev --rereadpt ${DEV}
最小構成debian環境
まずはカーネルをビルドする。
https://github.com/hanklords/chromebook-busybox#kernel
この記事では、バージョンが4.0-rc7を使っているが、私は3.?をビルドした。
とくに問題は起こっていない。
ビルドしたバイナリをvbutil_kernelで署名し、カーネルパーティションに書き込む。
ルートイメージを/dev/mmcblk1p2に作成する。
Ubuntuインストーラ環境
Ubuntu14.04.3のStartup Disk CreatorでインストーラUSBを作成する。
./syslinux/txt.cfg
kexec -l /mnt/casper/vmlinuz.efi --command-line "noprompt cdrom-detect/try-usb=true file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz --" --initrd=/mnt/casper/initrd.lz
Ubuntu環境
インストール後、そのままでは起動しないので
kexec -l $(readlink -f ${MNT}/vmlinuz) --command-line "BOOT_IMAGE=/$(basename $(readlink ${MNT}/vmlinuz) ) root=UUID=659bf19e-e80a-4243-bcab-8ecfc3d84c84 ro elevator=cfq" --initrd $(readlink -f ${MNT}/initrd.img) -d
kexec -l $(readlink -f ${MNT}/vmlinuz.old) --command-line "BOOT_IMAGE=/$(basename $(readlink ${MNT}/vmlinuz.old) ) root=UUID=659bf19e-e80a-4243-bcab-8ecfc3d84c84 ro elevator=cfq" --initrd $(readlink -f ${MNT}/initrd.img.old) -d
驚くべきことに、スピーカーの認識以外はちゃんと機能している。
機種によって相性良し悪しがあるそうなので、たまたま相性が良かったのだろうと思う。
スピーカーの認識
スピーカーの認識についても試行錯誤の結果やっと認識させることができた。
http://www.matws.org/c300/
このサイトによるとカーネルは4. 以上を使う必要があるので、最新版カーネルをインストールする
apt-get update
apt-get install linux-generic-lts-wily
ChromeOS上の/lib/firmware/intel/fw_sst_0f28*をUbuntu環境の同じ場所にコピーする。
その後、fw_sst_0f28.bin-48kHz_i2s_masterをfw_sst_0f28.binへのシンボリックリンクとして作成する。
ln -s fw_sst_0f28.bin fw_sst_0f28.bin-48kHz_i2s_master
再起動後、alsamixerを起動し
・Left Speaker Mixer Left DAC
・Right Speaker Mixer Right DAC
のミュートを解除することで、音声が出力されるようになる。
https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture#Unmute_with_alsamixer
https://wiki.ubuntu.com/Audio/Alsamixer
https://wiki.debian.org/InstallingDebianOn/Asus/C201
https://bbs.archlinux.org/viewtopic.php?id=185789