この記事は、旧タイトル『DS-5 デバッガ―で U-Boot(v2019.04 以降)を起動する方法(Cyclone® V SoC/Arria® V SoC 編)』のアップデート版です。 Altera®(Intel®)SoC FPGA 向けのソフトウェア統合開発環境として標準採用される Arm 純正ツールが Arm® DS-5 for Intel® SoC FPGA Edition (DS-5) から Arm® Development Studio for Intel® SoC FPGA Edition (Arm® DS) へと変更になりました。 Arm® DS は DS-5 の後継製品となっており使い勝手は大きくは変わりません。この記事の内容も Arm® DS / DS-5 両方に適用できるものが大半ですが、違いがある箇所はその旨明記する形でアップデートしています。 |
はじめに
Altera®(Intel®)SoC FPGA では、Linux 起動時に U-Boot を使用しますが、この U-Boot には様々な機能があり、デバッグや開発時に活用できます。
この記事では、Cyclone® V SoC をターゲットに Arm® DS / DS-5 デバッガー上から、2019.04 以降の U-Boot を起動する方法について紹介します。
Arm® DS / DS-5 から U-Boot を起動することにより、処理を行った時のメモリーやレジスターの状態を Arm® DS / DS-5 上から見ることができ、Arm® DS / DS-5 上から特定の処理に関してブレークをかけることができます。
前提条件
この記事では SoC EDS(SoC FPGA エンベデッド・デベロップメント・スイート)v20.1 がセットアップ済みであることを前提として説明しています。
SoC EDS v20.1 のセットアップ方法については、次のコンテンツページをご参照ください。
SoC FPGA エンベデッド・デベロップメント・スイート(SoC EDS)のインストール方法 ver.20.1
参考:
この記事では、Cyclone® V SoC をターゲットに説明していますが、Arria® V SoC についても同様の手順で対応可能です。
参考:
この記事では U-Boot のビルド手順は扱いません。あらかじめ以下のページを参考にビルドを済ませておいてください。
SoC EDS v19.1 std / v19.3 pro 以降のブートローダー生成フロー(Cyclone® V SoC / Arria® V SoC 編)
U-Boot v2019.xx や v2020.xx など、比較的最近のバージョンの U-Boot を Arm® DS(DS-5)デバッガーに接続した状態で実行すると、JTAG 関連のエラーが表示されてデバッガーからの操作が効かない状態となってしまうケースがあります。下記の記事では発生するエラーと原因&対策について説明していますので、U-Boot をビルドする際には下記の記事も併せてご参照ください。
Arm® DS(DS-5)デバッガ―で U-Boot(v2019.04 以降)を起動する際に JTAG 関連のエラー表示が出る場合の対処方法
参考:
Arria® 10 SoC をご使用の方は、以下の記事ページをご参照ください。
Arm® DS(DS-5)デバッガ―で U-Boot(v2019.04 以降)を起動する方法(Arria® 10 SoC 編)
1. Arm® DS / DS-5 の起動
1-1. Arm® DS の場合
1-1-1. Windows PC の場合
(1) Windows のスタートメニューから、以下の Embedded Command Shell を開始します。
【図 1】Embedded Command Shell の開始(Windows)
(2) Embedded Command Shell から cmdsuite プログラム(suite_exe)を実行します(Arm® DS バージョン 2023.1 の例)。
$ /cygdrive/c/Program\ Files/Arm/Development\ Studio\ 2023.1/bin/cmdsuite.exe
(3) bash プログラムを実行します。Embedded Command Shell のプロンプト色に戻ります。
$ bash
(4) Embedded Command Shell から armds_ide & コマンドを実行します。Arm® DS Eclipse が起動します。
$ armds_ide &
【図 2】Arm® DS Eclipse の起動(Windows)
1-1-2. Linux PC の場合
(1) Linux OS 上(Ubuntu など)で作業する場合は、まず最初に端末(ターミナル)を起動します。
続けて、ターミナル上で「embedded_command_shell.sh」を実行することで SoC EDS 用の環境変数設定が行われたシェル環境が立ち上がります。
-
- SoC EDS v20.1 Pro の場合:
$ ~/intelFPGA_pro/20.1/embedded/embedded_command_shell.sh
-
- SoC EDS v20.1 Std の場合:
$ ~/intelFPGA/20.1/embedded/embedded_command_shell.sh
(2) Embedded Command Shell から cmdsuite プログラム(suite_exe)を実行します(Arm® DS バージョン 2023.1 の例)。
$ /opt/arm/developmentstudio-2023.1/bin/suite_exec bash
(3) Embedded Command Shell から armds_ide & コマンドを実行します。Arm® DS Eclipse が起動します。
$ armds_ide &
【図 3】Arm® DS Eclipse の起動(Linux)
1-2. DS-5 の場合
1-2-1. Windows PC の場合
(1) Windows のスタートメニューから、以下の Embedded Command Shell を開始します。
【図 4】Embedded Command Shell の開始(Windows)
(2) Embedded Command Shell から eclipse & コマンドを実行します。DS-5 Eclipse を起動します。
$ eclipse &
【図 5】DS-5 Eclipse の起動(Windows)
1-2-2. Linux PC の場合
(1) Linux OS 上(Ubuntu など)で作業する場合は、まず最初に端末(ターミナル)を起動します。
(2) 続けて、ターミナル上で「embedded_command_shell.sh」を実行することで、SoC EDS 用の環境変数設定が行われたシェル環境が立ち上がります。
-
- SoC EDS v20.1 Pro の場合:
$ ~/intelFPGA_pro/20.1/embedded/embedded_command_shell.sh
-
- SoC EDS v20.1 Std の場合:
$ ~/intelFPGA/20.1/embedded/embedded_command_shell.sh
(3) eclipse & コマンドを実行します。DS-5 Eclipse を起動します。
$ eclipse &
1-3. ワークスペースの選択と Arm® DS / DS-5 の起動
(1) Arm® DS / DS-5 のスプラッシュ画面が表示された後に、ワークスペース の選択画面が表示されるので、提案されたディレクトリー または、任意のディレクトリーを指定します。
(2) Arm® DS / DS-5 をはじめて起動したときに表示される「Welcome」(ようこそ)画面はすぐに閉じて構いません。はじめて指定した ワークスペースの場合は、以下のようにプロジェクトが空の状態で起動します。
2. プロジェクトの作成
(1) 次に U-Boot 用の Arm® DS / DS-5 プロジェクトを作成します。
-
Arm® DS の場合:
「File」メニューから「New」⇒「Project」を選択し、New Project ウィンドウから「C/C++」⇒「Makefile Project with Existing Code」を選択してください。 -
DS-5 の場合:
「ファイル」メニューから「新規」⇒「Makefile Project with Existing Code」を選択してください。
(2) 下図のような「新規プロジェクト」(New Project)ウィンドウが表示されるので、"プロジェクト名" (下図の例では、cv_uboot_project)を指定し、"既存のコードの場所" の項目に U-Boot を含む BSP プロジェクトの所在を指定します。所在は[参照](Brouse)ボタンをクリックして別ウィンドウで指定可能です。
下図の例では下記の別記事ページで、Cyclone® V SoC 用 SD カードブート向けの U-Boot を作成した場所(/home/<user>/cv_example.sdmmc/cv_soc_devkit_ghrd/software/bootloader)を指定しています。
SoC EDS v19.1 std / v19.3 pro 以降のブートローダー生成フロー(Cyclone® V SoC / Arria® V SoC 編)
その他の項目は編集不要です。所在の指定が終わったら[終了](Finish)ボタンをクリックします。
(3) 下図のように、プロジェクト・エクスプローラー内にプロジェクト(青枠)が追加されれば、プロジェクトの作成は成功です。但し、プロジェクト内にもともと含まれている uboot.ds デバッグスクリプト・ファイルでは、Arm® DS / DS-5 による U-Boot のデバッグを正しく行うことができません。
この記事では、v2019.04 以降の U-Boot に対応したデバッグスクリプト・ファイル uboot.ds と preloader.ds のサンプルを添付しています。
これらのデバッグスクリプト・ファイルをダウンロードしていただき、作成したプロジェクトにドラッグ&ドロップして上書きコピーしてください。
3. デバッグの構成設定
(1) デバッグ用の構成設定を行います。
-
Arm® DS の場合:
「Run」メニューから「デバッグコンフィギュレーション」を選択します。
または、Project Explorer でプロジェクトを右クリックして、表示されるメニューから「Debug As」⇒「Debug Configurations」でも選択可能です。 -
DS-5 の場合:
「実行」メニューから「デバッグの構成」を選択します。
または、プロジェクト・エクスプローラーでプロジェクトを右クリックして、表示されるメニューから「デバッグ」⇒「デバッグの構成」でも選択可能です。
(2) 下図のような「Debug Configurations」(デバッグ構成)ウィンドウが起動したら、
-
Arm® DS の場合:
「汎用 ARM C/C++ アプリケーション」を右クリックして「New Configuration」を選択してください。 -
DS-5 の場合:
「DS-5 デバッガ」を右クリックして「新規」を選択してください。
この操作により新規のデバッグ構成が生成されます。
設定項目が多数のタブメニューに分かれていますが、今回の作業で設定が必要となる項目は、「接続」タブと「デバッガ」タブの 2つのみです。
3-1. 「接続」タブの設定
“ターゲットの選択” を「Intel SoC FPGA ⇒ Cyclone V SoC (Dual Core) ⇒ Bare Metal Debug ⇒ Debug Cortex-A9_0」とします。その他、赤枠内の項目全てをデバッグ対象の環境に合わせて設定します。
注記:
“接続” の指定は[参照...]ボタンをクリックして、別ウィンドウに表示されるリストから選択しますが、事前にターゲットボードをインテル® FPGA ダウンロード・ケーブル(USB-Blaster)で接続して、電源を ON にしておく必要があります。
注記:
Linux OS 環境で インテル® FPGA ダウンロード・ケーブル(USB-Blaster)を使用する場合は、udev に USB デバイスの識別ルール(ID)を登録する必要があります。
尚、“名前”(下図の青線部分)の編集により、新規作成したコンフィグレーションに任意の名前を指定可能です(この例では、cv_uboot_debug と指定しています)。
3-2. 「デバッガ」タブの設定
下図の画面イメージ(赤枠)と同じ内容に設定してください。
“デバッガスクリプト” の指定と、“ソース検索ディレクトリ” の指定は、いずれも[ワークスペース...]ボタンから指定できます。
設定が終わったら[適用]ボタンをクリックして設定内容を保存します。コンフィグレーションの名前を変更している場合は、保存契機でウィンドウ左側の表示項目(青枠)にも変更後の名前が反映されます。
4. デバッグ開始
(1) [Debug](デバッグ)ボタンをクリックするとデバッグを開始します。
(2) デバッグ・パースペクティブ(デバッグ用の画面配置)への切替え確認メッセージが出た場合は、[はい](Yes)をクリックします。
(3) ターゲットとの接続が開始したら接続完了を待ちます。進行状況は “コマンド” ビューのログおよびプログレスバーで確認してください。
5. デバッグ接続完了
正常に接続が完了すると、関数:board_init_r の先頭付近のブレークポイントで停止します。
この時点で、UART のターミナルには以下の例のようなログが表示されるはずです。
まとめ
以上の手順で Arm® DS / DS-5 から U-Boot をロードして実行開始させることができます。あとは、デバッガーを操作してデバッグを行ってください。
Arm® DS / DS-5 デバッガー上のデバッグ制御ウィンドウの ”続行” ボタン(または、F8 キー)操作で U-Boot を最後まで実行させると、U-Boot のコンソールが有効になり、U-Boot を使用したコマンド入力による各種デバックを実行できます。
FPGA にアクセスする際には HPS と FPGA 間のブリッジの開通を忘れないようにしてください。ブリッジ開通は U-Boot の以下のコマンドでできます。
$ bridge enable
このように実は意外と簡単に Arm® DS / DS-5 から U-Boot を起動できるんです。
みなさんも是非ご活用ください!
関連記事へのリンク
ブートローダー、U-Boot に関連して、以下の記事も参考にしてください:
- SoC EDS v19.1 std / v19.3 pro 以降のブートローダー生成フロー(Cyclone® V SoC / Arria® V SoC 編)
- SoC EDS v19.1 Std / v19.3 Pro 以降のブートローダー生成フロー(Arria® 10 SoC 編)
- SoC EDS v19.1 std / v19.3 pro 以降のブートローダー生成フロー(付録:Linux バイナリーのビルド - Cyclone® V SoC / Arria® 10 SoC 編)
添付サンプル
この記事の説明で使用した、Cyclone® V SoC / Arria® V SoC 向け U-Boot デバッグスクリプトのサンプルファイルです。