第1部 第 2章 ご購入はこちら なるほどそうやって動くのか! リセット直後から丸はだか! 知って た ハナタ ら カ! 完全理解! ラズベリー・パイの 32/64ビットLinux 起動シーケンス 原山 みや 表 1 ラズベリー・パイ・シリーズの CPU コア 表 2 リセット解除後最初に動くプログラム「ブート・スタブ」は 名 称 プロセッサ コア名 コア 数 コアの クロック 周波数 ラズベリー・ パイ BCM2835 ARM1176JZF-S 1 700MHz ラズベリー・ パイ 2 BCM2836 Cortex-A7 4 900MHz ラズベリー・ パイ 3 BCM2837 Cortex-A53 4 1.2GHz ラズベリー・パイ 3 では,CPU コアが 64 ビット対 応 ARM Cortex-A53 になりました(表 1).当然,搭載 される Linux も 64 ビットだと思っていましたが,な んと,32 ビット Linux のままでした. ラ ズ ベ リ ー・ パ イ の エ コ シ ス テ ム を 考 え る と, Linux を 64 ビットにする必要はなく,Cortex-A53 コ アをクロック周波数が 900MHz から 1.2GHz になった 高速な 32 ビット ARMv7 コアとして動作させた方が よいと判断したのでしょう.そうすることで,クロッ ク周波数が速くなった恩恵を受けて,33%程度の性能 向上が見込めるのですから. しかし,Cortex-A53 コアを 64 ビットで動かせれば 32 ビットのときよりも Dhrystone 値で 20%程度速く なります(1).ということは,ラズベリー・パイ 3 で 64 ビット Linux が動けば,ラズベリー・パイ 2(32 ビッ ト Linux)に対して,60%(= 1.2/0.9 × 1.2)も速くな ります.ラズベリー・パイ 3 でもっと速くプログラム を動かすには,64 ビット Linux を動かせればよいので す. 32 ビット /64 ビット Linux を 使い分ける前に ● リセット後最初に実行されるプログラム 「ブート・スタブ」とは ラズベリー・パイ /2/3 と各ブート・スタブの対応 を表 2 に示します.CPU コアのアーキテクチャごとに ブート・スタブがあります. ここでいうブート・スタブとは,CPU コアのリセッ 2016 年 11 月号 CPU コアのアーキテクチャごとに用意されている 名称 CPU コアの アーキテクチャ ビット幅 ソースコード名 ラズベリー・パイ ARMv6 32 ビット armstub.S ラズベリー・パイ 2 ARMv7 32 ビット armstub7.S ラズベリー・パイ 3 ARMv8 32 ビット armstub7.S 64 ビット armstub8.S トが解除された後に実行される最初のプログラムのテ ンプレートを考えてよいと思います.テンプレートな のでこのブート・スタブにコードを追加したり,既に あるコードを修正したりすることで独自のブート部を 作れるということを意味しています. Cortex-A53(ARMv8)ですが,32 ビットのときはラ ズベリー・パイ 2 と同じブート・スタブ(armstub7. S)を,64 ビットのときは別の新しいブート・スタブ (armstub8.S)を使います. ラズベリー・パイ・シリーズの CPU コアのブート 部は,ソースコードが公開されていないブート・プロ グラムの一部に含まれていて,ユーザがその部分を変 更することができませんでした.しかしラズベリー・ パイの公式ツールの一部としてスタブ・コードが公開 されたことで,ユーザが独自のブート部を作れるよう になりました.また,最新のブート・プログラムで は,ラズベリー・パイ /2/3 にあったデフォルトのブー ト部が組み込まれているようです. ● 32 ビットに 64 ビット…使いたいモード用の ブート・スタブで起動する どうすれば,64 ビット Linux が動くかという問いに 対 し て は,armstub8.S を 使 う こ と で,64 ビ ッ ト Linux を起動することができるようになりました. 「は い, これで目的は達成できました.よかったですね?」 Linux 上でアプリケーションを動作させるだけであ れば,ここまでで終わりです.ブート・スタブの詳細 を知る必要はありません. しかし,組み込みソフトウェアに本格的に取り組み 37
© Copyright 2024 ExpyDoc