2017年6月25日日曜日

GPD Pocket で Arch Linux を起動する (追記あり)



Indiegogo で一躍話題となった超小型ラップトップ、GPD Pocket がいよいよ日本向けにも発送開始されました。私の所にも先日届いたばかりで、高まるテンションを抑えきれず開封からセットアップまでをすぐに済ませました。せっかくの Windows 10 が搭載されたモデルですが、使い慣れた OS がよいので早速 Arch Linux をインストールしました。

こういった特殊なハードには微妙なつまづきポイントが多いため、ちゃんとしたレビュー記事は他の方に任せてインストール時の作業をメモとして残しておきます。

※現状 内蔵無線LAN、輝度調節、音量調節、電源管理が機能しません。
パッチの当たったカーネルの導入により可能になります。



回復ディスクの作成


何が起きてもよいように、Windows 10 の回復ディスクを先に作っておきます。16GB 程度の USB メモリが必要です。GPD Pocket の復旧用パーティションから作った回復ディスクで本当にちゃんと Windows 10 が復元できるかは知りません。

Arch用にディスク領域を開ける


eMMC のパーティションのうち、Windows 10 の C: として使用されているパーティションの半分を Arch Linux 用として確保しておきます。半分にすると、Windows 10 と Arch がそれぞれおよそ 55GB 程度のサイズになります。このサイズの PC で内蔵 eMMC が 128GB も用意されているのは中々の感動ポイントです。

ArchLinux USB メディアからブート


GPD Pocket に USB メディアを挿入し、電源を入れます。GPD のロゴが表示されている時に Esc キーを連打すると UEFI に入ることが出来ますので、「Save & Exit」タブの「Boot Override」メニューから USB メディアを選択すると、Arch インストールメディアを起動することが出来ます。

ところが、通常どおり「Arch Linux archiso x86_64 UEFI CD」を選択しても、途中で画面が消えてフリーズしてしまいます。起動する OS の選択画面が表示されたら e キーを押し、ブートパラメータの末尾に以下の文字列を追加します。

i915.fastboot=1 fbcon=rotate:1

Enter を押すと、ArchISO がブートし、いつもの

root@archiso ~ #

まで辿り着くと思います。

Arch Linux のインストール


lsblk コマンドを確認すると、

  • mmcblk0p1: 100M : UEFI パーティション
  • mmcblk0p2: 16M : ?
  • mmcblk0p3: 55GB : Windows 10
  • mmcblk0p4: 800M : 回復パーティション

となっていますので、パーティション mmcblk0p5 を作成し、ext4 でフォーマットしておきます。


UEFI にブートローダーを設定するために、

  • mmcblk0p5 : /mnt
  • mmcblk0p1 : /mnt/boot

の順番でマウントします。

また、現状 GPD Pocket の内蔵無線 LAN はドライバの問題なのか正しく使用できないため、Linux で認識する USB 有線 LAN が必要になります。

私は Buffalo の LUA3-U2-ATX を使用しました。規格上 100BASE-TX なので遅いですが、凝った機能のないベーシックなアダプタですので問題なく認識します。



あとは インストールガイド - ArchWiki に従って Arch Linux のインストールを行います。

ブートローダーのインストール


GPD Pocket は UEFI 構成ですので、systemd-boot を利用してインストールします。

bootctl --path=/boot install

先ほど ArchISO を起動する際に使用したブートオプションを永続化するために、systemd-boot のブートエントリは以下のように記述します。

/boot/loader/entries/arch.conf

title          Arch Linux
linux          /vmlinuz-linux
initrd         /initramfs-linux.img
options        root=PARTUUID=(調べたPARTUUID) rw i915.fastboot=1 fbcon=rotate:1


説明中の PARTUUID は、以下のコマンドで調べる事が出来ます。

ls -la /dev/disk/by-partuuid

再起動を行なうと、上手くインストールが出来ていれば Arch Linux が起動します。ここから一般ユーザーを作成したり、Xorg とウィンドウマネージャをインストールしたりといった作業を行います。

ウィンドウマネージャを使用するための設定


Intel ドライバをインストールします。

sudo pacman -S mesa xf86-video-intel

Xorg 使用時でも画面を横向きにする為に、以下の設定を追加します。

/etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "AccelMethod" "sna"
    Option      "TearFree" "true"
EndSection

/etc/X11/xorg.conf.d/90-display.conf
Section "Monitor"
    Identifier "DSI1"
    Option     "Rotate" "right"
EndSection

また、タッチパネルの座標も回転させるために、以下の設定を追加します。

~/.xprofile
xinput set-prop "pointer:Goodix Capacitive TouchScreen" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
xinput は xorg-apps をインストールすると使用可能になります。

コマンド中の行列の意味は X/InputCoordinateTransformation - Ubuntu Wiki が詳しいです。


インストールはしたけど…


現状 内蔵無線 LAN が使用できないのを始めとして、音は出ず、液晶の輝度も下がらず、バッテリーの残量も出ず、と特殊ハードウェアに Linux を入れた時にありがちなドライバ不足感が目立っている状況です。常用しようとすると中々厳しい気もしますが、ポケットサイズで RAM が 8GB も搭載された Linux コンソールというのはかなり夢がありますから、今後も地道にセットアップを続けていこうと思います。

調査にあたって


GPD Pocket は、ハードウェア的には GPD Win と似たような構成ですので、GPD Win における Linux インストールの事例を調べると役立つと思います。




- 2017/06/30追記 -

パッチの当たったカーネルをビルドする


参考文献:


Hans de Goede 氏が GPD Win 向けにパッチを適用したカーネルを導入することで、GPD Pocket でも以下の機能が使用可能になります。

  • 内蔵無線LAN
  • 音声出力
  • 液晶の輝度変更
  • バッテリ残量表示

こちらも合わせて参照してください。


まずカーネルビルド用の Linux コンピュータを用意し、GitHub のリポジトリ jwrdegoede/linux-sunxi を clone します。過去の差分全てを clone すると大変な事になるので、depth オプションで最新の commit だけを取得します。
git clone --depth 1 https://github.com/jwrdegoede/linux-sunxi.git

clone 直後の状態で既に clean な環境なので、いきなり
make -j8

を走らせます。2017/06/29 時点では Linux 4.12.0-rc7+ がビルドされます。Intel Core i5 3320M でおよそ 45 分程度掛かります。

カーネルのビルドが終わったら、リポジトリのディレクトリごと tar で固めて GPD Pocket 上の Arch Linux に転送、展開します。

展開した linux-sunxi ディレクトリに入り、
sudo make modules_install
でカーネルモジュールを GPD Pocket へとインストールします。

続いて Linux カーネルをインストールするのですが、GPD Pocket の EFI パーティション (/boot) は 100MB しかなく、安定版と自前カーネルを両方入れるだけのスペースが無いため、現在のカーネルを削除します。
sudo pacman -Rs linux-headers linux

vmlinuz をインストールします。
sudo cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-linux-412

initramfs を生成します。
sudo mkinitcpio -k 4.12.0-rc7+ -g /boot/initramfs-linux-412.img

最後に systemd-boot のブートエントリを修正し、新しいカーネルを使用して起動するようにします。


 /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux-412
initrd /initramfs-linux-412.img
options root=PARTUUID=(調べたPARTUUID) rw i915.fastboot=1 fbcon=rotate:1 dmi_product_name=GPD-WINI55



WiFi


WiFi を動作させるためには、上記のカーネル導入をした上で、https://fedorapeople.org/~jwrdegoede/brcmfmac4356-pcie.txt から brcmfmac4356-pcie.txt をダウンロードし、以下のコマンドを実行します。
sudo cp brcmfmac4356-pcie.txt /lib/firmware/brcm

これで再起動後に wifi-menu コマンドから WiFi に接続する事が可能になります。

NetworkManager を利用する場合は
sudo pacman -S gnome-keyring
が必要です。


サウンド


pulseaudio をインストールします。
sudo pacman -S alsa-utils pulseaudio pulseaudio-alsa

HDMI オーディオ出力に対する修正を行います。

/etc/pulse/daemon.conf を開き、
realtime-scheduling = no
を追記します。

続いて、本体オーディオから音を出すように修正します。https://github.com/plbossart/UCM/tree/master/chtrt5645 から conf ファイルを2つダウンロードし、以下のコマンドを実行します。
cd /usr/share/alsa/ucm/chtrt5645
sudo mv HiFi.conf HiFi.conf.bak
sudo mv chtrt5645.conf chtrt5645.conf.bak

cd (ダウンロードディレクトリ)
sudo cp HiFi.conf /usr/share/alsa/ucm/chtrt5645
sudo cp chtrt5645.conf /usr/share/alsa/ucm/chtrt5645

再起動後、
alsamixer
コマンドからミキサーを起動します。もし
MM
と表示されていた場合は、M キーを押してミュートを解除します。続いて、方向キーを使用してボリュームを上げます。


CPUファン


root ユーザーで
echo 397 > /sys/class/gpio/export
echo 398 > /sys/class/gpio/export
を実行すると GPIO 制御が現れるので、
echo 1 > /sys/class/gpio/gpio397/value
を実行するとファンが回ります。さらに
echo 1 > /sys/class/gpio/gpio398/value
を実行すると高速でファンが回ります。

efluffy/gpdfand を導入すると、温度センサーに応じてファンが回るそうです(未確認)


Thanks


Hans de Goede 氏とコントリビューターに感謝!

1 件のコメント: