Debian 10.2 on ThinkPad A275

# Debian 10.2 on ThinkPad A275

## はじめに

Debian9から10に直接アップデートするのは怖かったので、クリーンインストールを行った。その際、いくつかの問題が発生したためインストール初期設定の備忘録として対策方法を書いておく。

### 環境

- ThinkPad A275
- Debian GNU/Linux 10.2

### 発生した問題

- RTL8822BEのデバイスドライバがロードできない
- X Window Systemが立ち上がらない
- XFce4.12環境を起動するもののすぐにフリーズする
- トラックポイントが動作しない


## 手順

### バックアップ
最初にホームディレクトリのバックアップを行い、USBメモリに保存しておく。xz形式で圧縮を行うと、13GB程のデータが6GB前後になった。

```
$ cd /home
$ sudo tar -Jcvf username.tar.xz username
```

### インストールと起動
通常の手順でインストールし、いつも使っているXFceデスクトップ環境を選択した。インストールは問題なく完了するが、起動中にまずRTL8822BEデバイス周りのエラーと、Xが立ち上がらない問題が発生する。

### AMDGPUドライバの入手

今まではDebianパッケージリポジトリが提供するfirmware-amd-graphicsで問題なく動作していたのだが、今回XFce4がフリーズしてしまう現象が発生したため、AMDの公式サイトからドライバをダウンロードする。今回別PCがあったので問題なくダウンロードできたが、仮想コンソール上でwgetやcurlを使ってダウンロードしようとすると拒否されるため、パソコンが１台の場合は事前にダウンロードしておく。

[Radeon Software for Linux 19.50 Release Notes](https://www.amd.com/en/support/kb/release-notes/rn-amdgpu-unified-linux)から、「Radeon™ Software for Linux® version 19.50 for Ubuntu 18.04.3」と書かれているリンク先のファイルをダウンロードし、USBメモリに保存しておく。

参考:[Debian Wiki](https://wiki.debian.org/AMDGPUDriverOnStretchAndBuster2)

### BIOSからWiFiとBluetoothを無効化
起動時にRTL8822BE周りでエラーが発生するため、一旦BIOSからこれらを無効化しておく。BIOSメニューのSecurity→I/O PortAccess内の、WirelessLAN・WAN、BluetoothをDisableにし、保存してBIOSから抜ける。

### RTL8822BEのドライバをインストール
まだXは立ち上がらないが、デバイスを無効化することでエラーは出なくなる。ログインプロンプトも出ない状態のため、Ctrl+Alt+F1で仮想コンソール(tty1)に切り替える。仮想コンソールにrootでログインし、RTL8822BEのドライバを入れる。
日本語でインストールしているといろいろと文字化けしてしまうので、LANGの値も変更しておく。

```
# export LANG=C
# vi /etc/apt/sources.list
```

以下のように cdromはコメントアウトしておき、non-freeを追加する。

```sources.list
# deb cdrom:[Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57]/ buster contrib main

# deb cdrom:[Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57]/ buster contrib main

deb http://deb.debian.org/debian/ buster main non-free
```

RTL8822BEのドライバをインストールする。

```
# apt update
# apt install firmware-ralink
```

### AMDGPUドライバのインストール

次にUSBメモリに保存しておいたドライバをインストールするため、ファイルをホームディレクトリにコピーする。

```
# mount -t ext4 /dev/sdb1 /media/usbmem
# cp -R /media/usbmem/amdgpu-pro-19.50-967956-ubuntu-18.04.tar.xz /home/username/
# umount /media/usbmem
```

AMDGPUドライバをインストールする際、いくつかのパッケージに依存するためインストールしておく。

```
# apt install libstdc++-8 libc6-dev make linux-headers-amd64 gcc dkms binutils
```

AMDGPUドライバを展開し、中にあるふたつのDEBパッケージを入れる。これには長い時間がかかる。

```
# cd /home/username
# tar xf amdgpu-pro-19.50-967956-ubuntu-18.04.tar.xz
# cd amdgpu-pro-19.50-967956-ubuntu-18.04
# dpkg -i amdgpu-core_19.50-967956_all.deb
# dpkg -i amdgpu-dkms_19.50-967956_all.deb
```

完了すると、今まで使用していたinitrd.img-4.19.0-6-amd64は、initrd.img-4.19.0-6-amd64.old-dkmsという名前でバックアップが保存される。

これで、RTL8822BEとAMDGPUに必要なパッケージを導入できた。

```
# reboot
```

で再起動を行う。再びBIOS設定画面に入り、Wireless設定とBluetooth設定を有効化する。これで問題なく起動と、XFceデスクトップ環境が動作するようになる。

```
# dmesg | grep amdgpu
[    2.251947] [drm] amdgpu kernel modesetting enabled.
[    2.251950] [drm] amdgpu version: 5.2.0.19.50
[    2.256661] fb: switching to amdgpudrmfb from EFI VGA
[    2.269521] amdgpu 0000:00:01.0: VRAM: 512M 0x000000F400000000 - 0x000000F41FFFFFFF (512M used)
[    2.269522] amdgpu 0000:00:01.0: GART: 1024M 0x000000FF00000000 - 0x000000FF3FFFFFFF
[    2.269877] [drm] amdgpu: 512M of VRAM memory ready
[    2.269880] [drm] amdgpu: 3072M of GTT memory ready.
[    2.270064] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_pfp.bin
[    2.270087] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_me.bin
[    2.270106] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_ce.bin
[    2.270140] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_rlc.bin
[    2.270299] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_mec.bin
[    2.270412] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_mec2.bin
[    2.271751] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_sdma.bin
[    2.271812] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_sdma1.bin
[    2.272143] amdgpu: [powerplay] hwmgr_sw_init smu backed is smu8_smu
[    2.272322] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_uvd.bin
[    2.273133] amdgpu 0000:00:01.0: firmware: direct-loading firmware amdgpu/carrizo_vce.bin
[    2.299672] [drm:dm_helpers_parse_edid_caps [amdgpu]] *ERROR* Couldn't read SADs: -2
[    2.558887] fbcon: amdgpudrmfb (fb0) is primary device
[    2.570529] amdgpu 0000:00:01.0: fb0: amdgpudrmfb frame buffer device
[    2.601081] [drm] Initialized amdgpu 3.36.0 20150101 for 0000:00:01.0 on minor 

# dmesg | grep rtl
[    4.267559] r8822be: Using firmware rtlwifi/rtl8822befw.bin
[    4.272420] r8822be 0000:03:00.0: firmware: direct-loading firmware rtlwifi/rtl8822befw.bin
[    4.315140] ieee80211 phy0: Selected rate control algorithm 'rtl_rc'
[    4.315631] r8822be: rtlwifi: wireless switch is on
[    6.761697] Bluetooth: hci0: RTL: rtl: examining hci_ver=07 hci_rev=000b lmp_ver=07 lmp_subver=8822
[    6.762459] Bluetooth: hci0: RTL: rtl: loading rtl_bt/rtl8822b_fw.bin
[    6.764354] bluetooth hci0: firmware: direct-loading firmware rtl_bt/rtl8822b_fw.bin
[    6.764381] Bluetooth: hci0: RTL: rtl: loading rtl_bt/rtl8822b_config.bin
[    6.764627] bluetooth hci0: firmware: direct-loading firmware rtl_bt/rtl8822b_config.bin
```

### トラックポイントの設定
このままだとトラックポイントでドラッグ操作がうまく行えないため、以下の作業を行う。

```
# vi /etc/default/grub
```

で、GRUBの設定ファイルを開き、GRUB_CMDLINE_LINUX_DEFAULTに"i8042.reset"と"psmouse.proto=bare"の設定を追加する。

```grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8402.reset psmouse.proto=bare"
```

```
# update-grub
```

で、GRUBの設定変更を更新し、再起動する。トラックポイントでドラッグできることを確認する。