U-Boot はセカ ン ダ リ ブー ト ロ ーダー と し て機能 し ます。FSBL のハン ド オ フ後、U-Boot は Arm A53 の APU に Linux を ロ ー ド し ます。FSBL の後、U-Boot はボー ド 構成に基づいてプ ロ セ ッ シ ン グシ ス テ ムの残 り のペ リ フ ェ ラ ルの設 定を実行 し ます。U-Boot は、eMMC、SATA、TFTP、SD、QSPI な ど の さ ま ざ ま な メ モ リ ソ ース か ら イ メ ージ を取得 で き ます。 こ の例では、U-Boot と その他すべての イ メ ージが SD カー ド か ら ロ ー ド さ れます。 し たがっ て、 こ こ で はボー ド は SD ブー ト モー ド に設定 さ れます。
U-Boot は、PetaLinux ツール フ ロ ーを使用 し て設定お よ びビル ド で き ます。 こ の例では、第3章で作成 さ れた、 ま た は こ の資料に付属のデザ イ ン フ ァ イ ルか ら 作成 さ れた U-Boot イ メ ージ を使用で き ます。 こ のチ ュ ー ト リ アルのデザ イ ン フ ァ イ ルのダ ウ ン ロ ー ド については、158ページの 「 こ のチ ュ ー ト リ アルのデザ イ ン フ ァ イ ル」 を参照 し て く だ さ い。
Arm ト ラ ス テ ッ ド フ ァ ームウ ェ ア
Arm ト ラ ス テ ッ ド フ ァ ーム ウ ェ ア (ATF) は、APU の EL3 (例外レベル 3) で実行 さ れ る 透過的なベア メ タ ル アプ リ ケーシ ョ ンレ イ ヤーです。ATF には、 セキ ュ ア ワール ド と 非セキ ュ アワ ール ド を切 り 替え る ためのセキ ュ アモニ タ ー レ イ ヤーが含まれます。 セキ ュ ア モニ タ ーの呼び出 し と TBBR (Trusted Board Boot Requirements) の実装に よ り 、 Zynq UltraScale+ の APU に Linux を ロ ー ド す る には ATF レ イ ヤーが必須です。
FSBL は APU で実行 さ れ る ATF を ロ ー ド し ます。ATF は EL3 で動作 し 続けてサービ ス要求を待ち ます。ATF は 0xFFFEA000 ス テー ト で開始 し ます。FSBL は APU で実行 さ れ る U-Boot を DDR に ロ ー ド し ます。U-Boot は SMP モー ド で Linux OS を APU に ロ ー ド し ます。 こ こ で重要なのは、PL ビ ッ ト ス ト リ ームは ATF が ロ ー ド さ れ る 前に ロ ー ド す る 必要があ る と い う こ と です。 こ れは、 ビ ッ ト ス ト リ ームが .BIN フ ァ イ ルに存在す る 場合に一時バ ッ フ ァ ーを保持す る ため、ATF 用に予約 さ れてい る OCM 領域が FSBL で使用 さ れ る か ら です。 そのため、 ビ ッ ト ス ト
リ ーム を ATF の後に ロ ー ド す る と 、FSBL で ATF イ メ ージ と その一時バ ッ フ ァ ーが上書 き さ れ、ATF イ メ ージが破 損 し ます。 こ の理由か ら 、 ビ ッ ト ス ト リ ームは ATF の前、 理想的には FSBL と PMUFW の直後に .BIF に配置す る 必要があ り ます。
ATF (bl31.elf) はデフ ォ ル ト で PetaLinux に含 ま れてお り 、PetaLinux プ ロ ジ ェ ク ト の image デ ィ レ ク ト リ にあ り ま す。
ATF の詳細は、 『Zynq UltraScale+ MPSoC ソ フ ト ウ ェ ア開発者向けガ イ ド 』 (UG1137) [参照6] の 「セキ ュ リ テ ィ 」 の章 の 「Arm ト ラ ス テ ッ ド フ ァ ーム ウ ェ ア」 を参照 し て く だ さ い。
APU の Linux と RPU のベア メ タ ル
シ ス テ ム ソ フ ト ウ ェ アが設定 さ れた ら 、PetaLinux ツールフ ロ ーを使用 し て Linux イ メ ージ を作成 し ます。PetaLinux イ メ ージは第3章で既に作成 さ れてい ます。 こ の例では、PetaLinux は SD ブー ト 用の イ メ ージ を ビル ド す る よ う に 設定 さ れてい ます。 こ れは PetaLinux のデフ ォ ル ト のブー ト 設定です。
イ メ ージは $<PetaLinux_Project>/images/linux/ デ ィ レ ク ト リ にあ り ます。
APU に Linux を ロ ー ド す る ために、PetaLinux か ら 次の イ メ ージが使用 さ れます。
• ATF - bl31.elf
• U-Boot - u-boot.elf
• 次を含む Linux イ メ ージ - Image.ub:
° カーネルイ メ ージ
° デバ イ スツ リ ー System.dtb
° フ ァ イ ルシ ス テ ム - rootfs.cpio.gz.u-boot
こ の例では、APU の Linux に加え、 ベア メ タ ルアプ リ ケーシ ョ ン を ロ ッ ク ス テ ッ プモー ド で RPU R5 に ロー ド し ます。
こ の例では、41ページの 「Arm Cortex-R5 ベース の RPU 用ベア メ タ ルアプ リ ケーシ ョ ンの作成」 で作成 し た testapp_r5 アプ リ ケーシ ョ ン を参考に し て く だ さ い。
ま た、 こ のチ ュ ー ト リ アルに付属のデザ イ ン フ ァ イ ルに testapp_r5.elf 実行フ ァ イ ルがあ り ます。 こ のチ ュ ー ト リ アルのデザ イ ンフ ァ イ ルのダ ウ ン ロ ー ド については、158ページの 「 こ のチ ュ ー ト リ アルのデザ イ ンフ ァ イ ル」
を参照 し て く だ さ い。
SD ブー ト のブー ト シーケ ン ス
各 イ メ ージの準備が完了 し たので、 ブー ト イ メ ージ を作成 し て Zynq UltraScale+ に こ れ ら の コ ン ポーネ ン ト をすべて ロ ー ド し ます。 こ れには、 次の手順に従っ て SDK の Create Boot Image ウ ィ ザー ド を使用 し ます。
1. SDK で [Xilinx] → [Create Boot Image] を ク リ ッ ク し ます。
2. こ の章の前のセ ク シ ョ ンで説明 し たすべてのパーテ ィ シ ョ ン を選択 し 、 次の図に示す よ う に設定 し ます。
FSBL パーテ ィ シ ョ ン を追加 し ます。
1. Create Boot Image ウ ィ ザー ド で、[Add] を ク リ ッ ク し て [Add partition] ダ イ ア ロ グ ボ ッ ク ス を開 き ます。
2. [Add partition] ダ イ ア ロ グ ボ ッ ク ス で、[Browse] を ク リ ッ ク し て FSBL 実行フ ァ イ ルを選択 し ます。
3. [Partition type] に [bootloader] が選択 さ れ、[Destination CPU] が正 し く 選択 さ れてい る こ と を確認 し ます。 こ
れは、FSBL 実行フ ァ イ ルに基づいて設定 さ れます。
注記:FSBL はデフ ォ ル ト で EL3 に設定 さ れてい る ため、[Exception Level] の ド ロ ッ プダ ウ ン リ ス ト は無視 し て く だ さ い。 ま た、 こ の例では [Enable Trust Zone] をオ フ の ま ま に し て く だ さ い。
X-Ref Target - Figure 5-1
図 5-1: SD ブー ト モー ド の Create Boot Image ウ ィ ザー ド
4. [OK] を ク リ ッ ク し て FSBL を選択 し 、Create Boot Image ウ ィ ザー ド に戻 り ます。
PMU お よ び ATF フ ァ ーム ウ ェ ア パーテ ィ シ ョ ン を追加 し ます。
1. [Add] を ク リ ッ ク し て、 次の図に示す [Add partition] ダ イ ア ロ グ ボ ッ ク ス を開 き ます。
X-Ref Target - Figure 5-2
図 5-2: [Add new boot image partition] ページ
X-Ref Target - Figure 5-3
2. PMU フ ァ ーム ウ ェ アパーテ ィ シ ョ ン を追加 し ます。
a. [Browse] を ク リ ッ ク し て、PMU フ ァ ーム ウ ェ ア実行フ ァ イ ルを選択 し ます。
b. [Partision type] で [pmu] を選択 し ます。
注記:pmu パーテ ィ シ ョ ン タ イ プでは実行フ ァ イ ルが PMU を タ ーゲ ッ ト と す る ので、[Destination Device] と [Destination CPU] は淡色表示 さ れます。
3. [Exception Level] ド ロ ッ プダ ウ ン リ ス ト は無視 し 、[Enable Trust Zone] はオ フ の ま ま に し ます。
4. [OK] を ク リ ッ ク し ます。
5. [Add] を ク リ ッ ク し て、[Add partition] ダ イ ア ロ グボ ッ ク ス を開 き ます。
6. ATF フ ァ ーム ウ ェ アbl31.elfパーテ ィ シ ョ ン を追加 し ます。
注記:ATF フ ァ ーム ウ ェ ア (bl31.elf) は <PetaLinux Project>/image/linux/ にあ り ます。 ま たは、「 こ のチ ュ ー ト リ アルのデザ イ ンフ ァ イ ル」 の bl31.elf を使用す る こ と も で き ます。
a. [Partision type] で [datafile] を選択 し ます。
b. [Destination Device] を [PS] に設定 し ます。
c. [Destination CPU] を [A53 0] に設定 し ます。
d. [Exception Level] で [EL3] を選択 し 、[Enable Trust Zone] をオンに し ます。
7. [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 5-4
図 5-4: ATF パーテ ィ シ ョ ンの追加
R5 実行フ ァ イ ルを追加 し 、 こ れを ロ ッ ク ス テ ッ プモー ド で有効に し ます。
1. [Add] を ク リ ッ ク し て R5 ベア メ タ ル実行フ ァ イ ルを追加 し ます。
2. [Destination Device] を [PS] に設定 し ます。
3. [Destination CPU] を [R5 Lockstep] に設定 し ます。
こ れに よ り 、RPU R5 コ アが ロ ッ ク ス テ ッ プモー ド で実行 さ れ る よ う に設定 さ れます。
4. [Exception Level] ド ロ ッ プダ ウ ン リ ス ト は無視 し 、[Enable Trust Zone] はオ フ の ま ま に し ます。
5. [OK] を ク リ ッ ク し ます。
U-Boot パーテ ィ シ ョ ン を追加 し ます。sd_boot モー ド の u-boot.elf は、
<PetaLinux_project>/images/linux/sd_boot にあ り ます。
1. [Add] を ク リ ッ ク し て u-boot.elf パーテ ィ シ ョ ン を追加 し ます。
2. [Destination Device] で [PS] を選択 し ます。
3. [Destination CPU] で [A53 0] を選択 し ます。
X-Ref Target - Figure 5-5
図 5-5: RPU イ メ ージパーテ ィ シ ョ ンの追加
4. [Exception Level] を [EL2] に設定 し ます。
5. [OK] を ク リ ッ ク し て、Create Boot Image ウ ィ ザー ド に戻 り ます。
6. [Create Image] を ク リ ッ ク し ます。 ウ ィ ザー ド が閉 じ 、 ブー ト イ メ ージが作成 さ れます。
BIF 属性 と Bootgen コ マ ン ド を使用 し て BOOT.bin イ メ ージ を作成す る こ と も で き ます。
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、BIF フ ァ イ ルには次の属性が含まれます。
the_ROM_image:
{
[bootloader, destination_cpu=a53-0]
[bootloader]C:\edt\edt_zcu102\edt_zcu102.sdk\fsbl_a53\Debug\fsbl_a53.elf [pmufw_image]C:\edt\edt_zcu102\edt_zcu102.sdk\pmu_fw\Debug\pmu_fw.elf [destination_cpu = a53-0, exception_level=el-3,
trustzone]C:\edt\design_files\bl31.elf [destination_cpu =
r5-lockstep]C:\edt\edt_zcu102\edt_zcu102.sdk\testapp_r5\Debug\testapp_r5.elf [destination_cpu = a53-0,
exception_level=el-2]C:\edt\design_files\sd_boot\u-boot.elf }
SDK は次の Bootgen コ マ ン ド を呼び出 し て、 こ の コ ン フ ィ ギ ュ レーシ ョ ンの BOOT.bin イ メ ージ を生成 し ます。
bootgen -image sd_boot.bif -arch zynqmp -o C:\edt\BOOT.bin
X-Ref Target - Figure 5-6
図 5-6: U-Boot パーテ ィ シ ョ ンの追加
ZCU102 ボー ド でのイ メ ージの実行
1. BOOT.bin お よ び image.ub イ メ ージ を SD カー ド に コ ピー し ます。
2. SD カー ド を ZCU102 ボー ド の J100 コ ネ ク タ に挿入 し ます。
3. マ イ ク ロ USB ケーブルで ZCU102 ボー ド の USB UART ポー ト (J83) と ホ ス ト マシ ンの USB ポー ト を接続 し ます。
4. ス イ ッ チ SW6 を次の図に示す よ う に 1 をオン、2 をオ フ、3 を オ フ、4 をオ フ に し て、 ボー ド を SD ブー ト モー ド に設定 し ます。
5. 12V 電源を ZCU102 の 6 ピ ン Molex コ ネ ク タ に接続 し ます。
6. 使用 し てい る ホ ス ト マシ ンに応 じ て Tera Term ま たは Minicom を使用 し 、 タ ー ミ ナル セ ッ シ ョ ン を開始 し ます。
シ ス テ ムの COM ポー ト と ボーレー ト を次の図に示す よ う に設定 し ます。
7. ポー ト 設定では、 デバ イ スマネージ ャ ーで COM ポー ト を検証 し ます。
ZCU102 ボー ド には、4 つの USB UART イ ン タ ーフ ェ イ ス があ り ます。
8. 最 も 小 さ い番号の イ ン タ ーフ ェ イ ス に関連付け ら れた COM ポー ト を選択 し ます。 こ こ では、UART-0 に対 し て Interface-0 の COM ポー ト を選択 し ます。
9. 同様に、UART-1 に Interface-1 の COM ポー ト を選択 し ます。
R5 BSP は UART-1 を使用す る よ う に設定 さ れてい る ため、R5 アプ リ ケーシ ョ ン メ ッ セージは UART-1 タ ー ミ ナ
ルの COM ポー ト に表示 さ れます。
X-Ref Target - Figure 5-7
図 5-7: SD ブー ト モー ド の SW6 ス イ ッ チ設定
X-Ref Target - Figure 5-8
図 5-8: COM ポー ト のセ ッ ト ア ッ プ
10. SW1 を使用 し て ZCU102 ボー ド に電源を投入 し 、Linux がボー ド に ロ ー ド さ れ る ま で待ち ます。
UART-0 用の タ ー ミ ナル画面に初期ブー ト シーケ ン ス メ ッ セージが表示 さ れます。
UART-1 用に設定 さ れた タ ー ミ ナル画面に も メ ッ セージが表示 さ れます。 こ れは、RPU で実行 さ れてい る
UART-1 イ ン タ ーフ ェ イ ス を使用す る よ う に設定 さ れた R5 ベア メ タ ル アプ リ ケーシ ョ ンか ら の メ ッ セージで す。 こ のアプ リ ケーシ ョ ンは、FSBL に よ っ て RPU に ロ ー ド さ れます。
ベア メ タ ルアプ リ ケーシ ョ ンは、UART 割 り 込みサンプルを含む よ う に変更 さ れてい ます。 こ のアプ リ ケー シ ョ ンは、UART-1 タ ー ミ ナルのキーボー ド か ら ユーザーが入力す る ま で、WFI (Waiting For Interrupt) 状態で待 機 し ます。
X-Ref Target - Figure 5-9
図 5-9: UART-1 に表示 さ れる R5-0 で実行する Hello World
一方、 ブー ト シーケ ン ス は APU で継続 さ れ、 ロ ー ド さ れた イ メ ージは UART-0 タ ー ミ ナルに表示 さ れ る メ ッ セージか ら わか り ます。 次の図に、 メ ッ セージ を強調表示 し ます。
X-Ref Target - Figure 5-10
図 5-10: Zynq UltraScale+ ブー ト シーケ ン ス時の APU から の メ ッ セージ
U-Boot は、SMP モー ド で Linux カーネル と その他の イ メ ージ を Arm Cortex®-A53 の APU に ロ ー ド し ます。 タ ー ミ ナル メ ッ セージに U-Boot がカーネル イ メ ージ を ロ ー ド し て カーネルを起動 し た こ と が示 さ れ、 タ ーゲ ッ ト Linux OS にユーザー イ ン タ ーフ ェ イ スプ ロ ンプ ト が表示 さ れます。 カーネルの ロ ー ド お よ びス タ ー ト シーケ ン ス は、 次の図の よ う にな り ます。
X-Ref Target - Figure 5-11
図 5-11:カ ーネルのロー ド およびス タ ー ト シーケ ン ス