これまでのあらすじ
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の起動に対応したカーネルを公開してくれている方がいます.
まだ試していませんが,こちらを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が動作しました.
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:暗号化処理など整数演算は確実に高速になりますが,それ以外はさほど変わりないので,すべてのプログラムが必ずしも高速になるわけではありません