はじめに

アルテラの SoC FPGA では Linux 起動時に U-Boot を使用しますが、この U-Boot には様々な機能があり、デバックや開発時に活用できます。本記事では、SoC EDS に付属の統合開発環境である DS-5 上から U-Boot を起動する方法を紹介します。

DS-5 から U-Boot を起動することで処理を行った時のメモリやレジスタの状態を DS-5 上から見ることができ、DS-5 上から特定の処理に関してブレークをかけることができます。

実証環境

【ツール】
ターミナルソフトウェア:Tera Term
SoC EDS v15.1:DS-5 altera Edition v5.22.0

【準備するもの】
・Preloader と U-Boot どちらもコンパイル済みの Software フォルダ
 (フォルダの構成をそのまま使用します。)

<フォルダの内容で必要なもの>
/spl_bsp/
・preloader-mkpimage.bin:Preloader のバイナリ・ファイル
・preloader.ds      :Preloader の デバッカ・スクリプト・ファイル(uboot.ds 内で使用されます。) 
・uboot.ds        :U-Boot のデバッカ・スクリプト・ファイル
/spl_bsp /uboot-socfpga/
・u-boot(拡張子なし)   :U-Boot のバイナリ・ファイル
/spl_bsp /uboot-socfpga/spl/
・u-boot-spl                          : preloader.ds 内で呼ばれる Preloader ファイル

※Preloader や U-Boot の作成方法に関しては、『Preloader Generator の使用方法』をご覧ください。

1.プロジェクトのインポート

まずは基板と PC を USB-Blaster と UART とで接続します。
UART のコンソール表示のために Tera Term などのターミナル画面を起動します。

次に、基板に電源を入れます。この時、SD カードは抜いておくことをお勧めします。

Embedded Command Shell から DS-5 を起動し、workspace を任意の場所に設定します。
今回は software フォルダ下に workspace フォルダを作成し設定しました。(図1)

※FPGA にアクセスする場合は、この段階でコンフィギュレーションしておきます。

Article header 1  27

DS-5 を起動したら、まずプロジェクトを作成します。
ここでは Preloader Generator で生成したフォルダを直接プロジェクトに指定します。(図2)

・プロジェクト・エクスプローラ上で右クリックし、"インポート"を選択。
・"C" フォルダ下にある "Existing Code as Makfile Project" を選択。
・"プロジェクト名" は任意に設定し、
 既存コード場所は Preloader Generator で生成した softawre フォルダ下の spl_bsp を設定。
・終了を押すと、プロジェクト・エクスプローラ上にプロジェクトができます。

※プロジェクト内に "preloader-mkpimage.bin" がない方は、Preloader の生成を行ってください。
 また、U-Boot も生成しておく必要があります。
 詳しくは、『Preloader Generator の使用方法』をご覧ください。

Article header 2  27

2.デバックの構成設定

プロジェクトができたら、早速 U-Boot を起動するためにデバックの構成を行います。
DS-5 のメニューから "実行" ⇒ "デバックの構成" を選択します。(図3)

Article header 3  9

新規プロジェクト作成画面が開かれるので、ここは 図4 のように設定します。

・デバックの構成画面より “DS-5 デバッカ” をダブルクリック。
○接続タブ
 ・ターゲットの選択:Altera ⇒ Cyclone V SoC (Dual Core) ⇒ Bare Metal Debug ⇒ Debug Cortex-A9_0
 ・ターゲット接続:USB-Blaster
 ・Bare Metal Debug:"参照" をクリックし、接続ブラウザ上でつながっている SoC デバイスを選択

○デバッガタブ
 ・実行制御:接続のみ
 ・"ターゲット初期化デバッカスクリプト(.ds/.py) を実行します" をチェック
 ・プロジェクトで指定した software フォルダ下の spl_bsp 内にある "uboot.ds" を指定

※ファイルタブやその他のタブはデフォルトのまま使用します。

上記すべて設定後、画面下の "デバッグ" をクリックします。

Article header 4  8

3.U-Boot コンソールの有効化してデバック開始

デバッグが開始されると、DS-5 のデバック画面への切り替えウィンドウが表示されるので、
"はい" を選択してデバックパースペクティブに切り替えます。(図5)

Article header 5  7

すると、デバッガスクリプト(u-boot.ds)に沿って Preloader 実行後、U-Boot が JTAG 経由で SDRAM に展開され実行されます。実行中の様子は Tera Term で確認が可能です。
その後、ブレークポイントで自動的に一時停止状態となります。

最後に DS-5 上のデバック制御ウィンドウの ”続行” または "F8" を押すことで U-Boot のコンソールが有効になり、U-Boot を使用したコマンド入力による各種デバックを実行できます!(図6)
FPGA にアクセスする際にはブリッジの解除を忘れないようにしてくださいね!
ブリッジは以下コマンドで解除できます。

$run bridge_enable_handoff

Article header 6  7

さいごに

このように実は意外と簡単に DS-5 から U-Boot を起動できるんです!

ここでは、U-Boot でお伝えしましたが、preloader.ds を使うことでと Preloader の挙動も確認することができます。
また、この方法を利用することで U-Boot コマンドを使って様々なデバックも可能です。
これで少しはデバックが簡単になりますね♪

みなさんも是非、ご活用ください!


おすすめ記事/資料はこちら

HPS Flash Programmer より高速!U-Boot で QSPI に書き込む方法
Preloader Generator の使用方法