ARMv8ベースのファームウェアシステムのアーキテクチャ
2011年のリリース以来、ARMv8プロセッサアーキテクチャはモバイルデバイス市場で非常に普及しています。 ARM Limited CEOの予測によると、この世代のプロセッサは2020年までに最大25%の世界市場シェアを獲得するでしょう。ソフトウェアサポートが確立され、機能と一般を継承することでさらに発展しているのは当然です。歴史的に形成されたインフラストラクチャの原則。
市場のサーバーセグメントでは、根本的に異なる状況が見られます。 X86ベースのサーバーは長い間この分野を支配してきましたが、ARMv8はその道を歩み始めたばかりです(そして特定のビジネスセグメントにのみ)。 ARMのこの市場の目新しさと、受け入れられている標準と仕様(主にACPIとUEFI)のほとんどがARMシステムに適合していないという事実は、最近までソフトウェアインフラストラクチャの開発にその痕跡を残しています。
この記事では、ARMベースのサーバーシステムとプロセッサの機能の概要に焦点を当てており、網羅的な説明であるとは主張していません。著者はまた、提供されたデータがすぐに時代遅れになる可能性があるという事実に読者の注意を向けたいと考えています。まもなく、新しいプロセッサには、ソフトウェアインフラストラクチャの実装に異なるアプローチが必要になる可能性のある新しい技術ソリューションが付属します。
まず、ARMv8サーバーシステムのファームウェアの現在の実装は、いくつかの比較的独立したコンポーネントで構成されていることを指摘しておく必要があります。これにより、サーバーと組み込みシステムのファームウェアの両方で同じコンポーネントを使用できることや、導入された変更が比較的独立していることなど、多くの利点が得られます。
では、これらのシステムで使用されているモジュールとコンポーネント、およびそれらの機能は何ですか?モジュールのロードと相互作用の全体的なチャートを図1に示します。プロセスは、RAMやプロセッサ間インターフェイスなどのサブシステムの初期化から始まります。現在の実装では、これはメインCPU電源をオンにした直後にEL3Sモードの別のモジュールによって実行されます。したがって、システムのこのコンポーネントには、可能な限り最大の特権があります。通常、OSと直接対話することはありません。
図1.モジュールのロードと相互作用。 (出典:Auriga)
その後、制御は次のコンポーネントに移されます。ほとんどの場合、同じモードで実行されるARM Trusted Firmware(ATF)モジュールです。 ATF制御は、前の段落で説明したレベル0ローダーから直接転送することも、PEI(PreEFI初期化)を実装する特別なUEFIモジュールを介して間接的に転送することもできます。 ATFは、さまざまな時間に制御を受け取るいくつかのモジュールで構成されています。
BL1スタートモジュールは、セキュアプロセッサモードに割り当てられたプラットフォームパーツの初期化を実行します。 ARMv8ベースのシステムは、RAMを含む信頼できるリソースと信頼できないリソースにハードウェア分離を使用するため、BL1モジュールは、信頼できるコードを実行できる環境を準備します。特に、このタイプの初期化には、メモリ/キャッシュコントローラーの構成(信頼できるゾーンと信頼できないゾーンは、これらのデバイスのレジスターのプログラミングによってマークされます)とオンチップデバイス(エネルギーに依存しないメモリコントローラー)のマーク付けが含まれます。このマークアップでは、デバイスタイプ(信頼できる/信頼できない)に基づいたDMAトランザクションのフィルタリングも導入されています。これらすべてを考慮すると、メモリの書き込み/読み取りは、セキュリティ設定がデバイスのセキュリティ設定と一致する領域との間でのみ可能です。信頼できる環境の実装は非常に複雑になる可能性があります。たとえば、個別のOSを含めることができます。ただし、そのような実装の説明はこの記事の範囲を超えています。
BL1モジュールは、MMUアドレス変換テーブルと例外ハンドラテーブルを構成します。最も重要な要素は、Secure Monitor Call(SMC)命令の例外ハンドラです。この時点で、ハンドラーは最小限であり、実際にはRAMにロードされたイメージにのみ制御を移すことができます。実行中、BL1モジュールは次のステージ(BL2)をRAMにロードし、それに制御を移します。 BL2モジュールは、特権が制限されたEL1Sモードで動作します。したがって、このモジュールへの制御の転送は、「ERET」命令を使用して実行されます。
BL2モジュールの目的は、残りのファームウェアモジュール(BL3パーツ)をロードし、それらに制御を移すことです。削減された特権レベルは、すでにメモリにあるコードとEL3Sデータへの損傷を回避するために使用されます。これらのパーツのコードは、SMC命令を使用してBL1ステージにあるEL3Sコードを呼び出すことによって実行されます。
ATFのロードと初期化の第3段階は、3つの段階で構成できますが、通常、第2段階は省略されます。したがって、実際には2つしか残っていません。 BL3-1モジュールは、実行時に汎用ソフトウェア(OSなど)にアクセスできる信頼できるコードの一部です。このモジュールの重要な部分は、「SMC」命令によって呼び出される例外ハンドラーです。モジュール自体には、標準のSMC呼び出しを実装するための機能があります。標準のPSCIインターフェイス(プロセッサコアの有効化/無効化、プラットフォーム全体の電源管理、再起動など、プラットフォーム全体を制御するように設計されています)を実装し、ベンダーも処理するコードです。 -特定の呼び出し(プラットフォームに関する情報の提供、組み込みデバイスの管理など)。
上記のように、BL3-2モジュールの存在はオプションです。そのコード(モジュールの場合)はEL1Sモードで実行されます。通常、プラットフォームの動作中に発生するイベント(特定のタイマー、デバイスなどからの割り込み)の専用サービス/モニターとして機能します
実際、BL3-3はATFモジュールではなく、非セキュアモードで実行されたファームウェアのイメージです。通常、EL2モードで制御を取得し、広く知られているU-Bootに類似したブートローダーのイメージ、またはサーバーシステムの標準であるUEFI環境のイメージを表します。
ATFモジュールの初期化の全体的なチャートを図2に示します。
図。 2.ATFモジュールの初期化。 (出典:Auriga)
埋め込み