この記事では、インテル® SoC FPGA の HPS(ハード・プロセッサー・システム)側のブートに使用する SD カードイメージの作成方法について紹介します。
もくじ
- はじめに
- 1. ブート用 SD カードイメージの要件
- 2. SD カードイメージの作り方
- 2-1. Linux OS 環境での対応
- 2-2. Windows OS 環境での対応
- 3. シンプル SD カードイメージ
- まとめ
はじめに
HPS のブート用 SD カードイメージの作り方は、Rocketboards.org の Golden System Reference Design (GSRD) User Manuals に説明用のページが用意されていますが、記載されている手順は Linux OS 環境下で作業することを前提とした内容になっています(以下にリンクを記載)。
参考: Creating and Updating SD Card | Rocketboards.org
この記事では、上記のページと同等の内容を日本語で紹介するとともに、開発マシンに Windows OS を使用しているユーザー向けに Windows 環境下で SD カードイメージを編集する方法についても紹介します。
1. ブート用 SD カードイメージの要件
以下に GSRD(Linux リファレンス)に適用されている SD カードイメージの構造を示しますが、ブート用 SD カードイメージには下記と同様のパーティション構造を持たせる必要があります。
【図 1】ブート用 SD カードイメージの構造( SoC EDS v18.1 以前 )
ポイント: リファレンスのイメージでは、Partition 2 に EXT FS を適用したパーティションを用意していますが、Linux 以外の OS を使用する場合や Baremetal(OS レス)の場合には不要です。
要件としては、以下の条件を満たしたイメージを用意すればブート用に利用できます。
- プライマリー・パーティション(Partition 1)に FAT FS を適用。
- ブートローダー格納用のカスタム・パーティション(Type=A2)を含む。配置は Partition 2 以降であれば OK(パーティション番号は不問)。
ポイント: ブートに必要なファイルの構成はブートローダーや起動するターゲット OS の実装にも依存します。最近のツールバージョンに対応した GSRD では U-Boot のバージョンが新しくなっているため、SD カードイメージに含まれるファイルの構成が変わっています。
最新のファイル構成を【図 2】に示します。赤字で記載している部分が従来との差分です。
【図 2】ブート用 SD カードイメージの構造( SoC EDS 20.1 以降 )
SD カードイメージに含めるファイルの作り方に関する最新情報は以下のページを参照してください。
参考資料: Building Bootloader | Documentation | RocketBoards.org
メモ: ブート用 SD カードの要件に関する詳細は、詳細は各デバイスファミリーの HPS Technical Reference Manual を参照ください。「Appendix A : Booting and Configuration」の項目に記載されています。
2. SD カードイメージの作り方
開発マシンの OS 環境別に SD カードイメージの編集方法を紹介します。
2-1. Linux OS 環境での対応
Linux OS 環境であれば、SD カードイメージの作成と更新の両方の作業が行えます。Linux OS 専用マシンを用意することが難しい場合は、Windows ホスト OS 環境下に Linux ゲスト OS がインストールされた仮想環境を使用しても同じ方法で対応できます。
2-1-1. SD カードイメージの作成
SD カードイメージ作成用に make_sdimage.py もしくは make_sdimage_p3.py という Python スクリプトが用意されています。このスクリプトは、冒頭に紹介した Creating and Updating SD Card | Rocketboards.org に入手方法が掲載されていますので、まず最初にこのスクリプトファイルを入手してください。
念のため、同じファイルをこの記事にも添付しておきます(ページ末尾のリンクよりダウンロード)。
ポイント: make_sdimage.py と make_sdimage_p3.py は作業する Linux 環境で利用可能な Python バージョンに応じて選択します。文中 make_sdimage.py と記載している部分は適宜 make_sdimage_p3.py に読み替えてください。
注記:
make_sdimage.py の実行には、Python 2.x(argparse が利用可能なバージョン (2.7 以降))が必要です。事前にインストールされている事を確認してください。
注記:
最新版は make_sdimage_p3.py です。こちらは Python 3.x 環境でのみ使用可能です。
以下、make_sdimage.py のヘルプ表示です。イメージに含めるファイル類は事前に用意が必要ですが、基本的には make_sdimage.py を実行するのみで SD カードイメージが作成できます。
usage: make_sdimage.py [-h] [-P PART_ARGS] [-s SIZE] [-n IMAGE_NAME] [-f]
Creates an SD card image for Altera's SoCFPGA SoC's
optional arguments:
-h, --help show this help message and exit
-P PART_ARGS specifies a partition. May be used multiple times. file[,file
,...],num=<part_num>,format=<vfat|fat32|ext[2-4]|xfs|raw>,
size=<num[K|M|G]>[,type=ID]
-s SIZE specifies the size of the image. Units K|M|G can be used.
-n IMAGE_NAME specifies the name of the image.
-f deletes the image file if exists
Usage: PROG [-h] -P <partition info> [-P ...] -P
例として、GSRD(Linux リファレンス)用のイメージを作成する際には、以下のようなコマンドラインでオプション指定を行います(-P オプション 3 個で、3 つのパーティションを構築)。
$ sudo ~/make_sdimage.py \
-f \
-P preloader-mkpimage.bin,u-boot.img,num=3,format=raw,size=10M,type=A2 \
-P rootfs/*,num=2,format=ext3,size=3400M \
-P zImage,u-boot.scr,soc_system.rbf,socfpga.dtb,num=1,format=vfat,size=256M \
-s 3700M \
-n sd_card_image_cyclone5.bin
※ sudo に続くファイルパスは、make_sdimage.py の置き場所に応じて指定の変更が必要です(上記はホームディレクトリー直下(~/)に make_sdimage.py を格納した例)。
※ イメージのサイズ(-s オプション)を決める際には、SD カードの製品に記載される容量と実際に使用できるサイズに違いがある事に注意が必要です。例えば 4GB の SD カードを使用することを想定する場合には、上の例のように 3700MB くらいのサイズにしておかないと書き込む事ができません。
2-1-2. SD カードイメージの書き込み / 更新
Linux OS 環境では、dd コマンドで SD カードへの書き込みが行えます。
$ sudo dd if=<入力ファイル名> of=<出力先デバイスファイル> [bs=<ブロックサイズ>] [seek=<ブロック>]
注記:
<出力先デバイスファイル> には SD カード用のデバイスファイルを指定しますが、Linxu ディストリビューションや PC 環境によってファイル名が変わる点に注意が必要です。
デバイスファイルの指定を誤ると重要なデータを壊す危険があり、最悪は Linux が起動できない状況になる可能性もあります。SD カード挿抜前後の /dev 以下のファイルリストを確認することで、書き込み対象の SD カード用のデバイスファイルを正確に指定するようにしてください。
■ SD カードイメージ全体を書き込む(※ of=/dev/sd* は * の部分が環境によって異なる点に注意)
$ sudo dd if=simple_sdimage_512MB.img of=/dev/sde bs=1M
■ ブート用 SD カードのブートローダーを更新(※ of=/dev/sd*3 の 3 はパーティション番号)
Cyclone® V SoC / Arria® V SoC の場合:
$ sudo dd if=preloader-mkpimage.bin of=/dev/sde3 bs=64k seek=0
$ sudo dd if=u-boot.img of=/dev/sde3 bs=64k seek=4
Arria® 10 SoC の場合:
$ sudo dd if=uboot_w_dtb-mkpimage.bin of=/dev/sde3 bs=64k seek=0
■ その他のパーティションの更新(FAT FS, EXT FS)
カスタム・パーティション(Type=A2)以外は、通常の SD カードと同様に Linux OS がファイルシステムを認識可能です。最近の Linux ディストリビューション環境であれば SD カードの挿入を契機に、各パーティションが自動マウントされるので、そのままターミナルやファイル操作用のアプリケーション(Windows エクスプローラーに類似のソフトウェア)から編集することができます。
2-2. Windows OS 環境での対応
Windows ホスト OS 環境下では SD カードイメージを一から作成する手順には対応していません。ベースとして既存のイメージファイルを SD カードへ書き込みした後に必要なカスタマイズを行うことで対応可能です。
注記:
Linux ファイルシステム(EXT FS)の編集には対応できません。EXT FS を編集したい場合には Linux OS 環境での対応が必要となります。
以下の手順を参考に対応ください。
2-2-1. ベース SD カードイメージの入手
メーカー純正の Development Kit 用 SD カードイメージは Rocketboards.org に掲載されているリファレンス・デザイン(GSRD)のリリースノートのページからダウンロードできます。その他の SoC FPGA 搭載ボード向けのリファレンス・デザイン用イメージでも構いません。
参考: GSRD 18.1 Release Notes - Release Contents | Rocketboards.org
リファレンス・デザインのイメージは、Linux 用のファイルシステムを含む関係でファイルサイズが大きくなっており、ダウンロードや書き込みには非常に時間が掛かります。ターゲット OS が Linux 以外の場合は、この記事に添付のシンプル SD カードイメージがお勧めです。
2-2-2. ベース SD カードイメージの書き込み
Windows 環境下でのイメージ書き込みには Win32 Disk Imager を使用します。下記の画像を参考に Image File を指定した上で Write を実行します。
【図 3】Win32 Disk Imager ツールの使い方(イメージの書き込み)
注記:
SD カード用のドライブレターはご使用の PC 環境によって異なります。
Write Successful のポップアップが表示されたら作成完了です。OK ボタンをクリックして終了します。
以下の記事にて、より詳細な手順やトラブル・シューティングについて紹介しています。参考: Windows® 10 で SD カードイメージの書き込みに失敗する場合の対処法
2-2-3. A2 パーティションの編集(ブートローダーの書き換え)
インテル® SoC FPGA エンベデッド開発スイート(SoC EDS)に付属する SD Card Boot Utility
(alt-boot-disk-util.exe)を使用することで、カスタム・パーティション(type=0xA2)上のブートローダー・イメージの書き換えが可能です。
Embedded Command Shell 上で以下のコマンドを実行し、使用するターゲットボード向けのブートローダー・イメージを SD カードへ書き込みます。
注記:
SD Card Boot Utility を使用するためには SoC EDS v18.1 以前のバージョンが必要です。
SoC EDS v18.1 よりも新しいバージョンをご使用の場合は以下の記事も参照ください。
参考: Windows 環境でブート用 SD カードの U-Boot を書き換える(SoC EDS v20.1~)
■ Arria® 10 SoC 用ブートローダーの書き換え
$ alt-boot-disk-util.exe -B <U-Bootイメージ> -a write -d <SD Card ドライブレター>
実行例:
■ Cyclone® V SoC / Arria® V SoC 用ブートローダーの書き換え
$ alt-boot-disk-util.exe -p <Preloaderイメージ> -b <U-Bootイメージ> -a write -d <SD Card ドライブレター>
実行例:
詳細情報はヘルプ「alt-boot-disk-util.exe --help」および SoC EDS User Guide で確認ください。
参考: Intel® SoC FPGA Embedded Development Suite (SoC EDS) User Guide
2-2-4. FAT パーティションの編集(U-Boot スクリプト /OS/ ユーザーアプリの書き換え)
FAT パーティションの内容は Windows のエクスプローラーから編集可能です。
リファレンス・デザインのイメージをベースにしている場合は、以下のようなファイルが格納されているので必要に応じてファイルの差し替えを行ってください。
-
- U-Boot スクリプト(u-boot.scr)
- Linux カーネルイメージ(zImage)
- Linux デバイスツリー(.dtb)
- FPGA コンフィグレーション・バイナリー(.rbf)/ FIT イメージ(.itb)
- Linux 起動オプション・ファイル(extlinux/extlinux.conf)
注記:
Linux デバイスツリー と FPGA コンフィグレーション・バイナリー / FIT イメージは、ボード依存のデータとなるので差し替え必須となります。
U-Boot スクリプトの編集については以下のコンテンツをご参照ください。
2-2-5. SD カードイメージの作成
Win32 Disk Imager の Read 機能を使用することで、編集後の SD カードの内容をイメージファイルに保存することも可能です。下記の画像を参考に Image File を指定した上で Read を実行します。
【図 4】Win32 Disk Imager ツールの使い方(イメージの読み出し)
注記:
SD カード用のドライブレターはご使用の PC 環境によって異なります。
Read Successful のポップアップが表示されたら作成完了です。OK ボタンをクリックして終了します。
3. シンプル SD カードイメージ
ターゲット OS が Linux 以外のユーザー向けに EXT FS を使用しない SD カードイメージを用意してみました。このイメージをベースにした場合は、Windows OS 環境で全てのパーティションが編集可能です。
添付ファイル:simple_sdimage_512MB.tgz をダウンロードしてご利用いただけます。
シンプル SD カードイメージは以下の構造で作成しています。オリジナルの SD カードイメージを作成する際のベースイメージとしてご使用ください。
【図 5】シンプル SD カードイメージの構造
注記:
このイメージを Arria® 10 SoC 搭載ボードのブートに使用する場合は、FAT パーティションに予め格納されている u-boot.scr を削除してください(スクリプトに含まれるコマンドが Cyclone® V SoC / Arria® V SoC 用に記述されている為)。
まとめ
評価ボード用には各ボードベンダーから SD カードイメージが提供されているので困る事は少ないですが、オリジナルのボードを作成した途端にブートイメージの作り方で困るケースが多くなってきます。また、評価段階でもオリジナルのイメージを作成したいケースは多くあると思います。
オリジナルイメージの作成で困った時にこの記事の情報が役に立ってくれると幸いです。
最後に、今回はブート用 SD カードの作り方を紹介しましたが、 QSPI Flash からのブートについても紹介記事を用意しています。 QSPI Flash ブートの場合は以下の記事を参照してください。
参考: SoC FPGA の QSPI ベアメタルアプリ・ブート (Cyclone® V SoC / Arria® V SoC 編)
参考: SoC FPGA の QSPI ベアメタルアプリ・ブート (インテル® Arria® 10 SoC FPGA 編)
コメント
0件のコメント
記事コメントは受け付けていません。