Raspberry Pi 4B 64bit kernel を試す

## 【前文】
64bit kernel に差し替えるとなると、ソースを取得しビルドして……と、初学者には少々敷居が高いイメージがある。
しかし現在、テスター向け最新 64bit kernel は簡単に導入できるよう設定されているとのことで試してみた。

###### 2022/03/09 追記
念の為追記。現在 64bit版Raspberry Pi OS は正式公開されています。
[Operating system images – Raspberry Pi](https://www.raspberrypi.com/software/operating-systems/ "Operating system images – Raspberry Pi")

## 【環境】
| Pi | OS | microSDカード |
| ---- | ---- | ---- |
| 4B 4G | Raspbian Buster with desktop<BR>September 2019 | M203(TOSHIBA 32G) |

自分の場合、既存の microSDカードのイメージバックアップを取り、それを新しい microSDカードに書き戻し（つまりクローンし）、それに対して 64bitカーネル化することにした。

## 【お約束】
kernel を差し替えたら、起動さえしなくなったということもあるのでバックアップ必須。kernel を元に戻す手段は用意されていない。（最新の安定板kernel を再インストールすることはできるが、それが以前のものと同じ保証はどこにもないから）

## 【手順】
### 1. 現在のカーネルのバージョン等を確認
```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
```

`armv7l` つまり 32bit kernel であることが分かる。

### 2. 最新のテスト版kernel にアップデート
`rpi-update`コマンドを実行する。

```shell-session
pi@raspberrypi4:~ $ sudo rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.19.75-v7l+
#############################################################
WARNING: 'rpi-update' updates to pre-releases of the linux
kernel tree and Videocore firmware.

'rpi-update' should only be used if there is a specific
reason to do so - for example, a request by a Raspberry Pi
engineer.

DO NOT use 'rpi-update' as part of a regular update process.

##############################################################
Would you like to proceed? (y/N)
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    323      0 --:--:-- --:--:-- --:--:--   322
100  115M  100  115M    0     0  3878k      0  0:00:30  0:00:30 --:--:-- 3895k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.19.86-v7l+
 *** depmod 4.19.86-v8+
 *** depmod 4.19.86-v7+
 *** depmod 4.19.86+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to fcf277b30e7c69d90df0f067074771e995e467d8
 *** A reboot is needed to activate the new firmware
```

無事更新された模様。
通常のアップデート作業でこのコマンドを使ってはいけない、といった文言も見えますね。取扱注意。

### 3. config.txt 編集
`arm_64bit=1` を一行追記。

```shell-session
pi@raspberrypi4:~ $ sudo vi /boot/config.txt
(中略)
#
arm_64bit=1

"/boot/config.txt" 71 lines, 898964 characters written
```

`echo "arm_64bit=1" >> /boot/config.txt` とかの方が Linux っぽいかな？

### 4. 再起動
```shell-session
pi@raspberrypi4:~ $ sudo reboot
```
無事起動したら kernel のバージョン確認。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.86-v8+ #1283 SMP PREEMPT Fri Nov 29 18:43:33 GMT 2019 aarch64 GNU/Linux
```
`aarch64` とあるので 64bit kernel であることが確認できる。

## 【雑感】
kodi ぐらいしか動かしていないけど、ライトな使用なら問題は無さそう。
少し驚いたのが、動画を連続で再生する際の、動画の切れ目の待ち時間（タイムラグ）が体感で分かる程、短くなったこと。この箇所の待ち時間はネットワークの問題（Wi-Fi接続だから遅い）と思っていたので驚いた。速くなるんだね。

但し、1～2日連続で起動していると、視聴していない間は動画を一時停止、停止していても、 kodi がフリーズする。長時間の稼働にはまだまだ不安定な要素があるみたい。
公式フォーラムにも kodi の問題はちょくちょくアップされているので、改善されていくことでしょう。

今まで気に留めたことも無かったけど、`/boot` 配下を確認。

```shell-session
pi@raspberrypi4:~ $ ls -la /boot
合計 52915
drwxr-xr-x  4 root root     3584  1月  1  1970  .
drwxr-xr-x 22 root root     4096 12月 11 21:54  ..
-rwxr-xr-x  1 root root       41 12月 11 21:55  .firmware_revision
-rwxr-xr-x  1 root root    18693 11月 28 22:20  COPYING.linux
-rwxr-xr-x  1 root root     1494 11月 28 22:21  LICENCE.broadcom
drwxr-xr-x  2 root root      512 11月 29 06:31 'System Volume Information'
(中略)
-rwxr-xr-x  1 root root  5140112 12月 11 21:55  kernel.img
-rwxr-xr-x  1 root root  5418584 12月 11 21:55  kernel7.img
-rwxr-xr-x  1 root root  5751680 12月 11 21:55  kernel7l.img
-rwxr-xr-x  1 root root 13521408 12月 11 21:55  kernel8.img
(中略)
pi@raspberrypi4:~ $
```
カーネルのイメージファイルが確認できる。
これのバックアップを取っておけばアップデート前の状態に戻せるんじゃないの？　そんな簡単な話ではないのかな。
とはいえ、kernel の不具合で壊れたり失われるファイルが出てくる可能性もあるから、全体のバックアップは必須なんでしょう。

## 【公式】
詳しくは公式を参照。
[Pi4 64-bit raspbian kernel for testing - Focus on Pi4](https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=250730&hilit=kernel+64+testing "Pi4 64-bit raspbian kernel for testing - Focus on Pi4 - Raspberry Pi Forums")
> PI4 64ビットraspbian カーネル用のテスト - PI4に焦点
> 2019年9月3日（火）午後11時56分
> 
> 64ビットカーネルより機能的になっている、私は `rpi-update` の一部としてそれを構築することを決めましカーネルより多くのユーザーがraspbianの下でそれをテストできるようにします。
これは最先端のテスター向けです。物事が機能しない場合があります。バックアップするか、新しいSDカードを使用することをお勧めします。

[Updating the kernel](https://www.raspberrypi.org/documentation/linux/kernel/updating.md "Updating the kernel - Raspberry Pi Documentation")
> rpi-updateを使用した手動更新
`rpi-update` Raspberry Piエンジニアから推奨されていない限り、使用しないでください。これは、LinuxカーネルとRaspberry Piファームウェアを現在テスト中の最新バージョンに更新するためです。したがって、Piが不安定になるか、ランダムに破損する可能性があります。

[Boot options in config.txt](https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md "Boot options in config.txt - Raspberry Pi Documentation.html")
> arm_64bit
ゼロ以外に設定すると、カーネルロードシステムが64ビットカーネルを想定し、プロセッサを64ビットモードで起動し、kernel8.img明示的なkernelオプションが定義されていない限り、ロードされたカーネルイメージに設定します。代わりに使用されます。すべてのプラットフォームでデフォルトは0です。注：64ビットカーネルは、圧縮されていないイメージファイルである必要があります。
> 
> 64ビットカーネルは、最新のファームウェアを搭載したPi4、Pi3、およびPi2B rev1.2ボードでのみ動作することに注意してください。

###### 2019/12/20 追記
`4.19.88` に上げる。引き続き様子見。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.88-v8+ #1284 SMP PREEMPT Wed Dec 11 13:57:50 GMT 2019 aarch64 GNU/Linux
```

###### 2020/01/11 追記
`4.19.93` に上げる。引き続き様子見。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.93-v8+ #1290 SMP PREEMPT Fri Jan 10 16:51:04 GMT 2020 aarch64 GNU/Linux
```

###### 2020/01/25 追記
気のせいかもしれないけど、前回のアップデートの辺りから kodi が安定してきたような。
`4.19.97` に上げる。引き続き様子見。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.97-v8+ #1293 SMP PREEMPT Wed Jan 22 17:22:12 GMT 2020 aarch64 GNU/Linux
```

###### 2020/03/21 追記
かなり時間が空いてしまったけど久しぶりにアップデート。
まだ `4.19`系なんだね。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 4.19.108-v8+ #1298 SMP PREEMPT Fri Mar 6 18:15:51 GMT 2020 aarch64 GNU/Linux
```

###### 2020/05/05 追記
すっかり放置気味だったけど GWだしで久しぶりにアップデート。
かなりバージョンが上がっているね。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.4.35-v8+ #1314 SMP PREEMPT Fri May 1 17:54:25 BST 2020 aarch64 GNU/Linux
```

ところが、kodi で音が再生されない、kodi 終了時にフリーズする現象が発生。
kodi を再インストールしても症状は改善されず。
システム起動時の syslog を確認するとエラーが発生しているっぽい。

```shell-session
May  5 10:55:54 raspberrypi4 kernel: [    4.809008] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.txt failed with error -2
```

ぐぐったところ、以下と同じ問題か？
[[RPi3B+] brcmfmac driver doesn't load properly on Raspbian initrd, missing firmware files - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=225906 "[RPi3B+] brcmfmac driver doesn't load properly on Raspbian initrd, missing firmware files - Raspberry Pi Forums")

自力で解決する気力が湧かなかったので、以前のバックアップを書き戻した（弱）。

###### 2020/05/06 追記
公式フォーラムで質問したところ、[[RPi3B+] brcmfmac driver doesn't load properly on Raspbian initrd, missing firmware files - Raspberry Pi Forums](https://www.raspberrypi.org/forums/viewtopic.php?t=225906 "[RPi3B+] brcmfmac driver doesn't load properly on Raspbian initrd, missing firmware files - Raspberry Pi Forums") とは別問題らしく、Wi-Fi に繋がるなら対策の必要はないらしい。
しかし、kodi の関連性は不明。うーむ。

###### 2020/06/07 追記
Raspbian が Raspberry Pi OS になってカーネルのバージョンが 4.19 だったりして、そちらはまだ試していないけど、引き続き `sudo rpi-update`。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.4.44-v8+ #1320 SMP PREEMPT Wed Jun 3 16:20:05 BST 2020 aarch64 GNU/Linux
```
今度は kodi に問題は無さそう。何だったんだろう一体。

###### 2020/08/16 追記
多忙でメモが残せなかったけど、前回の 5.4.44 は kodi で問題があった。
動画再生で画像が正常に表示されなかった。仕方なくイメージバックアップから以前のバージョンに戻した。

そして久しぶりに更新。今度は大丈夫っぽい。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.4.58-v8+ #1335 SMP PREEMPT Thu Aug 13 22:29:57 BST 2020 aarch64 GNU/Linux
```

###### 2020/10/25 追記
```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.4.72-v8+ #1356 SMP PREEMPT Thu Oct 22 13:58:52 BST 2020 aarch64 GNU/Linux
```
OS起動が遅くなったような。カーネルの影響であるかは不明。

いつからそうなっていたのか不明だけど、`sudo rpi-update` 実行時のメッセージで公式フォーラムの URL が表示されていることに今更気付く。
そっちも見ろよと。

```shell-session
WARNING: This update bumps to rpi-5.4.y linux tree
See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=269769
```

それと kodi で再生できない（エラーを吐く）Youtube動画が出てきた。
数日前は再生できたものが突然できなくなった。
再生できない動画は決まっているが法則性は不明。
Youtube API って頻繁に更新されるからその影響か。 
ネットで見つかる対応方法は一通り試し、kodi を再インストールしても解決しないので。

###### 2020/10/27 追記
4ヶ月ほど前のイメージバックアップから書き戻したら、Youtube動画でエラーを吐く問題が直った。
kernel をアップデートしても問題なし。
考えてみれば、数日前に `sudo apt-get upgrade` をかけていて、それからエラーが発生するようになった。これが原因っぽい。
何だかなぁ。

###### 2020/11/23 追記
```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.4.77-v8+ #1371 SMP PREEMPT Tue Nov 17 13:39:18 GMT 2020 aarch64 GNU/Linux
```
少しバージョンアップ。何が変わったのかは不明。

###### 2021/02/15 追記
また kodi で再生できない（エラーを吐く）Youtube動画が出てきた。
最近カーネルを含め何もアップデートをかけていない。
それが原因かと思い、まずはカーネルから。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.10.14-v8+ #1401 SMP PREEMPT Mon Feb 8 14:31:24 GMT 2021 aarch64 GNU/Linux
```
結構上がったね。
誘導されるフォーラムも変わっているし。詳細はそっちを見てねってことで。

```shell-session
WARNING: This update bumps to rpi-5.10.y linux tree
See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=288234
```

kodi の話はまた別の問題だったので別投稿でアップした。
[kodi で Youtube動画再生時に失敗する問題 - Qiita](https://qiita.com/god19/items/d7273493e4d4c9fdffae "kodi で Youtube動画再生時に失敗する問題 - Qiita")

###### 2021/08/01 追記
久しぶりにアップデート。

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.10.52-v8+ #1440 SMP PREEMPT Tue Jul 27 09:56:40 BST 2021 aarch64 GNU/Linux
```
しかしあかんやつやった。kodi でリモコン（CEC）が利かなくなる。公式にも報告が挙がっていた。
[Re: Moving Linux Kernel to 5.10](https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=288234&sid=efe8e50b9e336d416c0b77087488e0a7&start=600#p1895082 "Moving Linux Kernel to 5.10 - Page 25 - Raspberry Pi Forums")
> 今日、ラズベリーパイ4でバージョン5.10.52に更新されたカーネルを入手し、テレビが機能しなくなったCECコマンド..私のテレビは実際にはラズベリーから認識されません...カーネルを更新する前と同じケーブル..
> ヘルプまたはアイデア？ありがとう

デュアルスクリーンにも問題が発生しているようで、ぐだぐだな感じ。現時点ではまだどちらも解決に至っていない模様。

次期 11（bullseye）では 64bit に対応するようだけど、大丈夫かね。
思えば 10 Buster ではグラフィックドライバが差し変わった関係で動かないアプリが続出して、kodi も暫くはまともに動かなかったし。
まだまだ様子見ですな。

###### 2021/08/08 追記
[落語の河豚鍋](https://ja.wikipedia.org/wiki/%E6%B2%B3%E8%B1%9A%E9%8D%8B "河豚鍋 - Wikipedia") みたいになっているけど、公式フォーラムでバグフィックスの報告が挙がっていた。
[Re: Moving Linux Kernel to 5.10](https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=288234&sid=c11cbbc9ce48d93aea794186ac8ec373&start=625#p1897156 "Moving Linux Kernel to 5.10 - Page 26 - Raspberry Pi Forums")
> rpi-updateでファームウェアを受信した後、cecが再び正常に動作していることを確認できます。お疲れ様でした！

```shell-session
pi@raspberrypi4:~ $ uname -a
Linux raspberrypi4 5.10.52-v8+ #1441 SMP PREEMPT Tue Aug 3 18:14:03 BST 2021 aarch64 GNU/Linux
pi@raspberrypi4:~ $ 
```

アップデートしたところ、`#1440`から`#1441`に。
確かに CEC問題が直っていた。結局何が悪かったんだろう。git のソース差分を確認するもよく分からず。
https://github.com/Hexxeh/rpi-firmware/commit/ce56fb43ea36888b94026edd1f08aea78cf32262

###### 2022/02/07 追記
Hallo.
何故かこのページがドイツ語圏のサイトからリンクされていることに最近気が付いた。
しかし今となっては古い情報であり、公式 64bit版Pi OS を試して欲しい。
[Raspberry Pi OS with desktop(64bit)2022-01-28](https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-01-28/ "Index of _raspios_arm64_images_raspios_arm64-2022-01-28")
[Raspberry Pi OS Lite(64bit)2022-01-28](https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2022-01-28/ "Index of _raspios_lite_arm64_images_raspios_lite_arm64-2022-01-28")

###### 2022/03/09 追記
念の為追記。現在 64bit版Raspberry Pi OS は正式公開されています。
[Operating system images – Raspberry Pi](https://www.raspberrypi.com/software/operating-systems/ "Operating system images – Raspberry Pi")