/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

Raspberry Pi 3を64-bitモードで扱うための現状について調べてみた

f:id:tnishinaga:20160417154950j:plain

これまでのあらすじ

2016年の2月の終わり頃,Raspberry Pi 3(以下,RasPi3)が発売されました. 日本では技適のいろいろがありまして,その1ヶ月後の3月終わり頃から秋月やマルツなどで購入できるようになりました.

RasPi3の特徴は,Raspberry Pi 2まで採用していた32-bit ARMアーキテクチャのCPUではなく,64-bit ARMアーキテクチャのCPUを採用している点です.

32-bitから64-bitになると,CPUが1度の命令で処理できるデータの長さが32から64と2倍になるので,同じ処理なら一般的に64-bit環境で実行するほうが高速*1です. しかし,2016年3月はまだ公式から64-bit版のraspbianは提供されていないどころか,そもそもファームウェアが64-bitに対応していなかったために,簡単に64-bitのOSやプログラムを動かすことができませんでした.

ここまでが私がRasPi3を購入した時点での状況です. 私は64-bit環境で利用するためにRasPi3を購入したので,64-bit 対応環境が出るまでRasPi3は放置して別のことをやることにしていましたが,最近どうやら64-bitで動作するようになったようなので,改めてその状況を調べて,まとめてみました.

64-bit対応状況

基本的には以下のフォーラムページで議論されているので,ここを読めばだいたい今どんな状況なのかわかります.

Raspberry Pi • View topic - Entering aarch64 execution state

ファームウェアの件

ご存じの方も多いと思いますが,Raspberry PiはCPUから起動が始まるのではなく,GPUが先に起動し,その上で動作するファームウェアがCPUやその他周辺機器の初期化を行い,カーネルをメモリにロードして制御を移し,起動するようになっています.

以前はこのファームウェアがCPUを64-bitモードでなく,32-bitモードにセットして起動を始めるので,そのまま64-bitのプログラムを起動できない……という問題があったのですが,4月13日のコミットで64-bitモードで起動する機能が追加され,この問題は解決したようです.

kernel: Bump to 4.4.7 · raspberrypi/firmware@efdcf16 · GitHub

カーネルの読み込まれる位置は0x00080000になるようです.

git.denx.de Git - u-boot.git/commitdiff

Kernelの件

ARM64のRasPi 3向けのdtsを追加するなどして,64-bit modeの起動に対応したカーネルを公開してくれている方がいます.

GitHub - anholt/linux

まだ試していませんが,こちらをARM64向けにビルドして,ブートローダーから起動すればよいのでしょう.

ブートローダーの件

gitのlogを見ると,U-Bootは既に対応しているようです.

git.denx.de Git - u-boot.git/summary

こちらもraspi3向けのdefconfigを読み込んでビルドすればよいのでしょう.

ビルド済みイメージ

64-bitモードで動作するRasPi3向けイメージが,有志の方から配布されています.

これらを用いることで手軽に64-bit Linux環境を試すことができます.

Debian

http://www.tom-yam.or.jp/rpi3/rpi3-arm64-debian-20160414.img.xz

rootのパスワードにraspberryといれるとログインできます.

ためしてみたところ,確かに64bitなLinux kernelが動作しました.

f:id:tnishinaga:20160417232329j:plain

Docker Engine入りイメージ

Raspberry pi 3用64bit Docker Engineを含むイメージを公開しました – 株式会社 あっとBSD

株式会社あっとBSDという,「基礎から学ぶ 組み込みAndroid」などの本を書かれている方の会社で作られたイメージです.

Dockerをすぐに試せるようです.

Gentoo

http://mirror.bytemark.co.uk/gentoo/experimental/arm64/

詳細不明ですが,Gentoo使ってる方は多分なんとかできると思います.

64-bitモードで動作するLinux イメージを作ってみる

今やってる途中なので,できたら別の記事として投稿します.

おわり

以上でおわりです.

その他情報がありましたら,コメントやTwitterで教えていただけると嬉しいです.

よろしくお願いします.

*1:暗号化処理など整数演算は確実に高速になりますが,それ以外はさほど変わりないので,すべてのプログラムが必ずしも高速になるわけではありません