はじめに
この記事では、Arria® 10 SoC をターゲットに Arm® Development Studio 5 Intel® SoC FPGA Edition(以後 DS-5)デバッガーから U-Boot を起動する方法について解説します。
参考:
Cyclone® V SoC をご使用の方は以下の Web ページを参照してください。
(Arria® V SoC も以下のページの手順を参照ください)
簡易デバックに最適!DS-5 で U-Boot を起動する方法
基本的には、Cyclone® V SoC 向けの Web ページ(上記)に掲載されている手順と同じ流れとなりますが、Arria® 10 SoC 向けには以下の点にご注意ください。
注記 1:
Arria® 10 SoC 用 U-Boot のビルド作業は Linux OS のみ対応となっているため、デバッグ作業も Linux OS 環境下で実施頂くのが無難です(Windows® ホスト OS 上で Linux の Virtual マシンを立ち上げる方法でも構いません)。
注記 2:
U-Boot の実行には、FPGA 側回路をコンフィグレーションする必要があります。特に Hard Processor System(HPS)用のブートデバイス(SDカード, QSPI Flash, NAND Flash)へのアクセスが上手くいっていない場合には、デバッグ対象の U-Boot を生成する際に、BSP Editor のオプションの External FPGA Configuration を有効にしてご確認ください。
-
External FPGA Configuration 有効の場合:
デバッグ開始前に .sof でFPGA側をコンフィグレーションしてください。
-
External FPGA Configuration 無効の場合:
あらかじめブートデバイス上に適切な配置で .rbf を書き込んでおいてください。
以下、手順の説明に入ります。
1.DS-5 の起動
Linux OS 上で作業する場合は、まず最初に端末(ターミナル)を起動します。
続けて、ターミナル上で「embedded_command_shell.sh」を実行することで インテル® SoC FPGA エンベデッド開発スイート(SoC EDS)用の環境変数設定が行われたシェル環境が立ち上がるので、そのまま「eclipse &」と入力した上で Enter キーを入力します。
DS-5 のスプラッシュ画面が表示された後に Workspace の選択画面が表示されるので、BSP Editor で生成された BSP プロジェクトが含まれるディレクトリーを指定します。
SoC EDS 付属のサンプルデザインで試す場合は、以下のディレクトリーを指定します。
(例:/home/<user>/intelFPGA/18.1/embedded/examples/hardware/a10_soc_devkit_ghrd/software)
DS-5 起動後、最初に表示される画面「ようこそ画面」はすぐに閉じて構いません。
はじめて指定した Workspace の場合は、以下のようにプロジェクトが空の状態で起動します。
2.プロジェクトの作成
次に U-Boot 用の DS-5 プロジェクトを作成します。
ウィンドウ・メニューから「File -> New -> Makefile Project with Existing Code」を選択してください。
New Project ウィンドウが表示されるので、"Existing Code Location" の項目に U-Boot を含む BSP プロジェクトの所在を指定します。所在は[Browse...]ボタンをクリックして別ウィンドウで指定可能です。(例:/home/<user>/intelFPGA/18.1/embedded/examples/hardware/a10_soc_devkit_ghrd/software/bootloader_ext_cfg)
その他の項目は編集不要です。所在の指定が終わったら[Finish]ボタンをクリックします。
以下のように、プロジェクト・エクスプローラー内にプロジェクト(青枠)が追加されれば成功です。
3.U-Boot のビルド(必要に応じて)
DS-5 上で U-Boot のビルドを実行することも可能です。プロジェクト・エクスプローラー上の右クリック・メニュー「Build Project」もしくは、ウィンドウ・メニューの「Project ⇒ Build Project」よりビルドを実行します。
注記 3:
SoC EDS 付属のサンプルデザインに含まれる BSP プロジェクトを初めて使用する場合は、ビルドを実行してください。ツールインストール後の状態では U-Boot のソースツリーが含まれていません。BSP プロジェクトをビルドする際にソースツリーがプロジェクト内に展開されます。
以下、ビルド実行中の画面イメージです。
Console ビュー内にビルド完了のメッセージが表示されれば終了です。
4.デバッグのコンフィグレーション
デバッグ用の設定を行うために、ウィンドウ・メニュー「Run ⇒ Debug Configurations...」を選択してください(プロジェクト・エクスプローラーの右クリックメニューからも選択可能です)。
Debug Configurations ウィンドウが起動したら、ウィンドウ左側のメニューにある「DS-5 Debuggrer」をダブルクリックしてください。この操作により新規のコンフィグレーション(New_configuration)が生成されます(画面イメージ赤枠内の項目をダブルクリック)。
設定項目が多数のタブ・メニューに分かれていますが、今回の作業で設定が必要となる項目は、Connection(接続)タブと Debugger(デバッガ)タブの2つのみです。
以下、各タブの設定内容を示します。
4-1.Connection(接続)タブの設定
Select target(ターゲットの選択)を「Intel SoC FPGA ⇒ Arria 10 SoC ⇒ Bare Metal Debug ⇒ Debug Cortex-A9_0」とします。その他、赤枠内の項目全てをデバッグ対象の環境に合わせて設定します。
注記 4:
Connection の指定は[Browse...]ボタンをクリックして、別ウィンドウに表示されるリストから選択しますが、事前にターゲットボードの電源を ON する必要があります。
注記 5:
Linux OS 環境で インテル® FPGA ダウンロード・ケーブル(USB-Blaster)を使用する場合は udev に USB デバイスの識別ルール(ID)を登録する必要があります。
参照:USB-Blaster Driver for Linux(Driver Setup on RedHat Linux Enterprise 5 and Above)
尚、Name(青枠)の編集により、新規作成したコンフィグレーションに任意の名前を指定可能です。
4-2.Debugger(デバッガ)タブの設定
下記の画面イメージ(赤枠)と同じ内容に設定してください。debugger script の指定と、Source search directory の指定は、いずれも[Workspace...]ボタンから指定できます。
設定が終わったら[Apply]ボタンをクリックして設定内容を保存します。コンフィグレーションの名前を変更している場合は、保存契機でウィンドウ左側の表示項目(青枠)にも変更後の名前が反映されます。
5.デバッグ開始
注記 6:
“External FPGA Configuration 有効の場合は、この時点で .sof の書き込みを行って FPGA 側のコンフィグレーションを完了させてください。”(External FPGA Configuration 無効の場合も、事前にブートデバイスに .rbf を書き込んでおくことを忘れないように注意してください)。
[Debug]ボタンをクリックするとデバッグを開始します。
デバッグ・パースペクティブ(デバッグ用の画面配置)への切替え確認メッセージが出るので[Yes]をクリックします。
デバッグ・パースペクティブに切り替わり、ターゲットとの接続が開始したら接続完了を待ちます。
進行状況は、Commands ビューのログおよびプログレスバーで確認してください。
6.デバッグ接続完了
正常に接続が完了すると、関数:board_init の先頭付近のブレークポイントで停止します。
この時点で、UART のターミナルには以下のようなログが表示されます。
まとめ
以上の手順で DS-5 から U-Boot をロードして実行開始させることができます。あとは、デバッガを操作してデバッグを行ってください。Running(F8)操作で U-Boot を最後まで実行させると、U-Boot に実装される各種確認用コマンドを使用することも可能です。
最後に U-Boot コマンドの一覧(HELP 表示)を掲載しておきます。利用可能なコマンド操作の参考にしてください。
SOCFPGA_ARRIA10 # help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
bootm - boot application image from memory
bootp - boot image via network using BOOTP/TFTP protocol
bootz - boot Linux zImage image from memory
clocks - display clocks
cmp - memory compare
cp - memory copy
crc32 - checksum calculation
dcache - enable or disable data cache
ddrcal - run ddr calibration sequence
dhcp - boot image via network using DHCP/TFTP protocol
echo - echo args to console
editenv - edit environment variable
env - environment handling commands
erase - erase FLASH memory
exit - exit script
false - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
fatsize - determine a file's size
fatwrite- write file into a dos filesystem
fdt - flattened device tree utility commands
flinfo - print FLASH memory information
fpga - loadable FPGA image support
fpgabr - fpgabr [0|1]
go - start application at address 'addr'
help - print command description/usage
i2c - I2C sub-system
icache - enable or disable instruction cache
iminfo - print header information for application image
loop - infinite loop on address range
md - memory display
mdio - MDIO utility commands
mii - MII utility commands
mm - memory modify (auto-incrementing address)
mmc - MMC sub system
mmcinfo - display MMC info
mtest - simple RAM read/write test
mw - memory write (fill)
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
showvar - print local hushshell variables
sleep - delay execution for some time
source - run script from memory
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true - do nothing, successfully
txloop - blast a packet!
version - print monitor, compiler and linker version