(*1)低解像度で再生した場合、動画内の文字が見えづらくなることがあります。
(*2)今回は、アプリのデバッグを行うために、JTAGコネクタを搭載したボードを使用する必要がありましたので、Cyclone V SoC Develoment Boardを使用しております。ボードのRivisionによっては、ジャンパ設定の変更や半田付けの作業が必要なものもあります。
デバッガとは
CPUが持つデバッグ機能を使って高度なデバッグをしたり、ターゲット上でデバッガを動かすリソースがないシステムでデバッグを行うためのツールです。
組み込みシステムの開発で一般的なクロス コンパイル環境では、コンパイル~実行~コード修正~コンパイルのTATを短くすることが効率化の第一歩です。PRINT文デバッグとデバッガを使ったデバッグではこの差が顕著に現れるのでデバッガの使い方はぜひ覚えてください。
Lauterbach TRACE32とは
組み込みシステムの開発で世界で最も使われているデバッガです。Lauterbach社について詳しく知りたい人は、Wikiを見てね!(デバッガ専業ベンダーでWikipediaがあるって凄いよね)
組み込みLinuxの開発で大きなメリットになるポイントは3つあります。
- 統合開発環境ではなく、デバッガである!
- コンパイルはGNU toolchainで行うことが多いので、統合開発環境ではなくデバッガであることが使い勝手や調達コストの点でメリットです。
- さらに、GCCのバージョンやLinuxディストリビューションにも依存しないため、すぐに使うことができます。
- Linux PCでデバッガが動作する!
- Linux PCでコンパイルするので、PC 1台でコンパイルからデバッグまで出来、デバッグに必要なソースやオブジェクトのコピーが不要な点がメリットです。
- SoCの周辺レジスタが簡単に確認できる!
- Cyclone V SoCの周辺レジスタがGUIで簡単に確認できて、SoCのリファレンス マニュアルと関数電卓を駆使しながらビットを読む必要がないため、デバッグの時間を大きく短縮できます。
開発環境のセットアップ
カーネルのビルド
TRACE32はターゲットのコードへデバッグのためのパッチが不要でオブジェクトのデバッグ シンボルとカーネルからデバッグに必要な情報を取得します。
そのため、まずはカーネルをビルドします。※カーネルのビルドについては、次回詳しく説明します。
カーネル ソースのダウンロード $ git clone https://github.com/altera-opensource/linux-socfpga.git Yoctoの環境変数の設定 $ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi ビルド $ cd linux-socfpga $ make socfpga_defconfig $ make zImage dtbs ビルドしたイメージをSDカードへコピー $ cp arch/arm/boot/zImage SDカードのFATパーティションのマウントポイント $ cp arch/arm/boot/dts/socfpga_cyclone5_socdk.dtb SDカードのFATパーティションのマウントポイント
TRACE32のセットアップ
インストレーション メディアのinstallation.pdfの通りにインストールしてください。Linuxについては、PC_LINUXの項に記載されています。デバッガ ハードウェアがUSB接続の場合は、Install Drivers (USB)の項も読んでください。
Cyclone V SoC用、Linux用の設定ファイルを.cmmファイルに保存してください。
Cyclone V SoC用の設定 aps_cyclone5_socdk.cmm SYStem.RESet SYStem.CPU CYCLONEVSOC SYStem.JtagClock 1MHz SYStem.Option IMASKASM ON SYStem.Option IMASKHLL ON SYStem.Option TRST OFF TRACE.DISable
Linuxデバッグ用の設定 aps_linux.cmm SYStem.Option DACR ON ; give Debugger global write permissions ; add hardware specific options here TrOnchip.Set DABORT OFF ; used by Linux for page miss! TrOnchip.Set PABORT OFF ; used by Linux for page miss! TrOnchip.Set UNDEF OFF ; may be used by Linux for FPU detection SYStem.Option MMUSPACES ON ; enable space ids to virtual addresses Data.LOAD.Elf ~/work/linux-socfpga.git/vmlinux /GNU /NoCODE TRANSlation.RESet MMU.FORMAT LINUXSWAP3 swapper_pg_dir 0xc0000000--0xdfffffff 0x0 TRANSlation.COMMON 0xbf000000--0xffffffff TRANSlation.TableWalk ON TRANSlation.ON TASK.CONFIG ~~/demo/arm/kernel/linux/linux-3.x/linux3.t32 MENU.ReProgram ~~/demo/arm/kernel/linux/linux-3.x/linux.men TERM.Mode VT100 TERM.METHOD COM /dev/ttyUSB0 115200. 8 NONE 1STOP NONE TERM.SIZE 100. 1000. TERM.SCROLL ON
準備が整いました。TRACE32を起動してみましょう!
$ cd /opt/t32 $ ./bin/pc_linux64/t32marm-qt
Linuxアプリのデバッグ
詳しくは冒頭のビデオで見てね!
補足
今回使用したLEDのサンプル アプリは、Altera SoC DKのソフトウェアです。このページの「Kit installation (ZIP) (Linux)」からダウンロードできます。
今回はHPSのLEDを点滅させたので、ソースを下記のように変更します。
// blink.cを変更 sprintf(dir, "/sys/class/leds/fpga_led%d/trigger", ledno); // ↓ sprintf(dir, "/sys/class/leds/hps_led%d/trigger", ledno);
または、Linuxならコマンドで一発変換できます。
$ sed -e 's/fpga_/hps_/g' blink.c > blink_hps.c
コンパイルは下記の通り行います。
$ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi $ $CC -g -O0 -Werror -Wall –lpthread –o blink_hps blink_hps.c
アルテラ社製 Cyclone V SoC搭載ボード
アルテラ SoCは、プロセッサ、ペリフェラル、およびメモリ・インタフェースで構成される Armベースのハード・プロセッサ・システム (HPS) と、カスタマイズ可能なFPGA ファブリックを広帯域幅インタコネクタ・バックボーンで統合した製品です。ハードIPには、PCI Express Gen2やマルチメモリポート、ECC、メモリ保護、高速シリアルトランシーバを搭載し、性能および消費電力の低減とプログラマブル・ロジックの柔軟性という特長を兼ね備えました。これまでCPUとFPGAで構成されたシステムボードサイズを大幅に削減することができます。今回の講座では、テラシック社製「DE0-Nano-SoC Kit/Atlas-SoC Kit」を使用します。
日本アルテラ株式会社
ローターバッハ社製 TRACE32
世界中で最も使われているハードウェアアシストデバッガTRACE32。ArmだけでなくNios IIはもちろん、70以上のプロセッサアーキテクチャをサポートしているのが、TRACE32。SMPシステムのマルチコア対応では、複数のコアを同時に制御し、参照コアを切り替えながらシームレスにデバッグを進めることができます。また、Linux等のSMP対応OSのデバッグをサポートする「OS認識機能」が標準装備されていることも特徴です。これにより、デバッグ対象のタスクが何れのコアに割り当てられているかを気にすることなく、ユーザ空間で動作しているプログラムのデバッグをスムーズに進めることができます。
日本ローターバッハ株式会社
組み込みLinux導入/開発支援サービス
組込みLinuxによりお客様の装置開発に新たな価値を提供します。
富士通コンピュータテクノロジーズ
こちらも是非
“もっと見る” 組み込みLinux|Cyclone編
Cyclone V SoCをLinuxでコンフィグしてみよう!
Cyclone V SoCの最大の特徴であるFPGAは、Linux動作中に動的にコンフィグレーションすることができます。カーネルのコンフィグとビルドをして、FPGAのコンフィグレーションをしてみましょう!
Linuxカーネルのコンフィグレーションを変えてみよう!
Cyclone V SoCのカーネルは、すぐにPreempt RTが利用できるようになっているので、動かしてみましょう!まずは、カーネルのコンフィグレーションとビルドを行います。Linuxカーネル ソースをPreempt RTのブランチに切り替えて、コンフィグレーションを有効にして、再ビルドします。
Linuxでプロファイルしてみよう!
Linuxはperfやftrace等、プロファイルやトレースを採取するツールが揃っています。TRACE32を使ったプロファイルやトレースはArmコアの機能を使って本番に近い環境で実施することができるので、Linuxで精度の高い情報を得ることができます。