FC2カウンター FPGAの部屋
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Ultra96 で動作するPetaLinux 2018.2 へSDKリモートデバックを行ったが失敗した

Ultra96 で動作するPetaLinux 2018.2 へSDKリモートデバックを行ったが失敗した。
使用するのは、”Ultra96 のPetaLinux2018.2 でhelloworld アプリケーションを作る(ただし、rootfs を使用)”のシステムだ。

SDKリモートデバックは tcf agent が起動しているXilinx FPGA 上で動作してるLinux システムに、 elf 実行ファイルをホストパソコンから送り込んでリモートデバックを行う。

cam_dp_183 のVivado プロジェクトを示す。
PetaLinux_113_190422.png

ハードウェアをビットストリーム付きでエクスポートして、SDK を起動した。
PetaLinux_114_190422.png

File メニューからNew -> Application project を選択した。

New Project ダイアログが表示された。Project name に helloworld2 と入力した。Next > ボタンをクリックする。
PetaLinux_115_190422.png

New Project ダイアログの Templates で、Linux Hello World を選択されているのを確認して、Finish ボタンをクリックする。
PetaLinux_116_190422.png

helloworld2 プロジェクトが作成され、C ファイルも生成され、自動的にビルドされ elf ファイルもできた。
PetaLinux_117_190422.png

Ultra96 を起動して、 ifconfig を行った。 192.168.3.28 のIP が振られている。
PetaLinux_118_190422.png

helloworld2 ディレクトリを右クリックし、右クリックメニューから Debug As -> Debug Configuration... を選択した。

Debug Configurations ダイアログが表示された。
PetaLinux_119_190422.png

Xilinx C/C++ application (System Debugger) を右クリックし、右クリックメニューから New を選択した。

Xilinx C/C++ application (System Debugger) の下に、System Debugger using Debug_helloworld2.elf on Linux Agent ができた。
Connection の New ボタンをクリックする。
PetaLinux_120_190422.png

Target Connection Details の New Target Connection ダイアログが表示された。
Target Name を Ultra96 に、Set as default target にチェックを入れて、Host に現在のUltra96 上のLinux の IP アドレスを入力した。
PetaLinux_121_190422.png

Test Connection ボタンをクリックすると、Connection successful! が表示されて、成功した。
PetaLinux_122_190422.png

Target Connection Details の New Target Connection ダイアログで、OK ボタンをクリックし、終了した。
PetaLinux_123_190422.png

Debug Configurations ダイアログに戻った。
PetaLinux_124_190422.png

Application タブをクリックした。Romote File Path: を /home/root/helloworld2.elf に変更して、Apply ボタンをクリックした。
PetaLinux_125_190422.png

次にDebug ボタンをクリックした。
PetaLinux_126_190422.png

Debug パースペクティブに変更するというダイアルが出るので、OK ボタンクリックした。
PetaLinux_127_190422.png

SDK がDebug パースペクティブになるが、Disconnedted されてしまう。
PetaLinux_128_190422.png

おかしい?
Ultra96 で見てみると、helloworld2.elf がアップロードされていたのだが。。。
PetaLinux_129_190422.png

ちなみに、
TCF agent を使ってLinaro Ubuntu14.04LTSが動作してるZYBO へパソコンのSDK からリモートデバッグする1
TCF agent を使ってLinaro Ubuntu14.04LTSが動作してるZYBO へパソコンのSDK からリモートデバッグする2
ではうまく行っていたのだが、TCF Agent とSDK のバージョンが合わないのか?
PetaLinux は 2018.2 でVivado のSDK は 2018.3 が影響しているのか?
  1. 2019年04月22日 05:45 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0

ROS Japan UG #29 ROS2講習会に行ってきました

昨日は、ROS Japan UG #29 ROS2講習会に行ってきて、1日しっかりROS2 を勉強してきました。

ROS2 はRobot のOperation System の第 2 バージョンという意味です。ROS2 の説明については講師の Geoffrey BIGGS さんの資料があります。”次世代ロボット フレームワーク ROS2の紹介”です。この資料を使って説明していただきました。

ROS1 とROS2 の大きな違いはROS2 ではMaster が無くなって、各ノードがDDS というプロトコルで通信しあうことだそうです。

ROS2 講習会では、初めに”次世代ロボット フレームワーク ROS2の紹介”を使ってROS2 の説明をしてから実習に入りました。
実習のテキストは、”ROS Japan ユーザグループ 講習会 ~ ROS 2 の紹介 ~”でした。これに従って実習を行いました。

実習では、あらかじめROS2 をインストールしてくるように指示がありました。私はノートパソコンのWindows10 上にVirtualBox をインストールして、その上にUbuntu 18.04 をインストールし、ROS2 をインストールしました。

最初に、”ROS 2のワークスペース:colconとパッケージ”の章の実習をしました。ここでは、colcon という”複数の依存関係があるパッケージを正しい順番でビルドするためのツール”を使用して、パッケージをビルドしました。勉強会にやり方としては、講師の方が説明してから、テキストに従って自分でコマンドを実行する形式です。次の章とかは特にやることが多いので、実習の時間が少ないという印象でした。

次に、”OS 2のAPIの使い方”を実習しました。
ROS2 の通信方法は3 つあるそうです。送りっぱなしのメッセージ、クライアントが送ってサーバーが返答を返すサービス、通信の途中でキャンセルやアボートできるアクションです。それらの通信方法の実装方法を勉強しました。

ROS 2のツールの使い方”と”ROS 1とROS 2のつながり(ros1_bridge)”は説明だけでした。

最後に、”これからのROS 2”のプレゼントを聞いて終了となりました。

本当に、講師の方と実習サポートの方、アナログ・デバイセズ株式会社の方ありがとうございました。

ROS2 勉強会に参加して、ROS2 ってノード間の通信方法だけを規定しているので、モーター制御などのアプリケーションは自分で作るか、ネットに落ちているのを拾ってくるしかないんだな?ということが分かりました。OS (ミドルウェアだそうです)なので、基本的な基盤を作れれば、その上にどうにでもアプリケーションを構築できるんだということが分かってよかったです。
  1. 2019年04月21日 05:12 |
  2. ROS
  3. | トラックバック:0
  4. | コメント:0

Ultra96 のPetaLinux2018.2 でhelloworld アプリケーションを作る(ただし、rootfs を使用)

Ultra96 のPetaLinux2018.2 で無線LANを設定する”の続き。

前回は、無線LANを設定してネットワークを使用できるように設定を行った。今回は、PetaLinux の手順でhelloworld アプリケーションを作成してみよう。
今回、参考にさせていただくのは”ZYBO (Zynq) 初心者ガイド (11) LinuxユーザアプリケーションでLチカ”だ。だが、この記事はRAMDISK だが私のはRoot File system を使用しているので、結果が多少違うようだ?

まずは、helloworld のユーザーアプリケーションを作成しよう。
petalinux-create -t apps --template c --name helloworld --enable
PetaLinux_104_190420.png

すると、cam_dp_183/project-spec/meta-user/recipes-apps/helloworld ディレクトリが作成されて、その下の files ディレクトリの下に、helloworld.c ができた。
PetaLinux_105_190420.png

helloworld.c を示す。すでに、printf でHello World を表示するコードが書いてあるので、このまま使用することにする。
PetaLinux_106_190420.png

ZYBO (Zynq) 初心者ガイド (11) LinuxユーザアプリケーションでLチカ”によると、
LANG=en_US.UTF-8 petalinux-build -x package
を行うと、image.ubが再生成されるということだが、image.ub のファイルの日付を見ても更新されていなかった。
PetaLinux_107_190420.png

PetaLinux_108_190420.png

ZYBO (Zynq) 初心者ガイド (11) LinuxユーザアプリケーションでLチカ”はRAMDISK を使用しているけど、今回はRoot File System を使用しているからじゃないか?ということで、
LANG=en_US.UTF-8 petalinux-build -c rootfs
を実行したが、長く掛かりそうなので、途中でアポートした。
すると、helloworld アプリケーションが cam_dp_183/build/tmp/work/ultra96_zynqmp-xilinx-linux/petalinux-user-image/1.0-r0/rootfs/usr/bin ディレクトリの下にできていた。
この helloworld アプリケーションを MicroSD カードの /home/root/ ディレクトリの下に書いて、Ultra96 でブートして、実行したところ問題なく実行することができた。
PetaLinux_112_190420.png

これは、ということで、もう一度、
LANG=en_US.UTF-8 petalinux-build -c rootfs
を最後まで実行したところ、Root File Sytem のファイルが更新されている。
rootfs.tar.gz をホストコンピュータの適当なところに解凍して、まずは、udmabuf.ko を検索した。
udmabuf.ko は /lib/modules/4.14.0-xilinx-v2018.2/extra ディレクトリにあった。
PetaLinux_110_190420.png

肝心の helloworld アプリケーションは、/usr/bin ディレクトリに入っていた。
PetaLinux_111_190420.png
  1. 2019年04月20日 21:28 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0

Ultra96 のPetaLinux2018.2 で無線LANを設定する

udmabufをPetaLinux 2018.2でビルドする”の続き。

前回は、udmabuf をPetaLinux 2018.2 上でビルドしてみたところ、Ultra96 のPetaLinux で insmod することができた。今回は、無線LANを設定してネットワークを使用できるようにしてみよう。

まずは Ultra96 上のPetaLinux で ifconfig コマンドでネットワークの設定を確認した。
PetaLinux_98_190418.png

wlan0 があるので大丈夫そうだ。これを家の無線LANルーター(Buffalo-G-F220)に接続する。
wpa_passphrase Buffalo-G-F220 パスフレーズ
を実行した。すると、psk に暗号化されたパスフレーズが出力された。暗号化されたパスフレーズは隠してあります。
PetaLinux_99_190418.png

/etc/network/ ディレクトリに行って、interfaces ファイルを確認した。
cd /etc/network/
more interfaces

PetaLinux_100_190418.png

どうやら、/etc/wpa_supplicant.conf に設定を記述すれば良さそうだ。

/etc ディレクトリに行って、wpa_supplicant.conf を編集し、network の中に ssid と psk を記述した。
cd ..
vi wpa_supplicant.conf
more wpa_supplicant.conf

PetaLinux_101_190418.png

reboot をしてから、 ifconfig すると wlan0 にIP アドレス 192.168.3.28 が割り当てられているのが分かる。成功だ。
PetaLinux_102_190418.png

ホストパソコンでUltra96 のPetaLinux にリモートログインしてみよう。
ssh 192.168.3.28 -X -l root
したところ、ホストキーの関係でログインできなかった。そこで指示されたとおりにキーをアップデートするコマンドを起動した。
ssh-keygen -f "/home/masaaki/.ssh/known_hosts" -R "192.168.3.28"
もう一度リモートログインすると、ログインすることができた。
ssh 192.168.3.28 -X -l root
PetaLinux_103_190418.png

よし。。。これで成功だ。Ultra96 のPetaLinux が無線LANに接続できた。
  1. 2019年04月19日 04:19 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0

udmabufをPetaLinux 2018.2でビルドする

udmabufをPetaLinuxで使用する(ホストパソコンでudmabufをmake したが致命的エラー)”の続き。

前回は、arm64 用にホストパソコン上で make でudmabuf をビルドしようとしたが、致命的エラーになってビルドできなかった。今回は、素直にPetaLinux 2018.2 を使用して、PetaLinux 上でビルドしてみよう。

今回の環境は”Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にPLのUIOを追加した”の続きとなって、環境は全て引き継いでいる。

なお、”ZYBO (Zynq) 初心者ガイド (17) Linuxで自作IPのデバイスドライバを作る”を参考にさせていただいた。これはとても参考になったというか、真似させていただいた。感謝。

さて、”ZYBO (Zynq) 初心者ガイド (17) Linuxで自作IPのデバイスドライバを作る”のやり方に従ってやっていこう。ただし、今回ビルドするのは、PL のIP のドライバでなく、Linux 上のCMA 領域を使用するためのドライバのudmabuf をビルドするので、”components/plnx_workspace/device-tree/device-tree-generation/pl.dtsi”ファイルにデバイスツリーの記述が無いことに注意しよう。

udmabuf をカーネルモジュールとして作成しよう。
petalinux-create -t modules --name udmabuf --enable
PetaLinux_87_190417.png

すると、cam_dp_183/project-spec/meta-user/recipes-modules ディレクトリの下に udmabuf ディレクトリが作成され、その下の files ディレクトリの下に udmabuf.c が生成された。
PetaLinux_88_190417.png

LANG=en_US.UTF-8 petalinux-build -c rootfs
PetaLinux_89_190417.png

自動生成された cam_dp_183/project-spec/meta-user/recipes-module/udmabuf/files/udmabuf.c を見てみよう。
PetaLinux_90_190417.png

これに、ikwzm さんの udmabuf.c の内容をコピペして入れ替える。
PetaLinux_91_190417.png

LANG=en_US.UTF-8 petalinux-build -c udmabuf
で udmabuf をビルドしたところ成功した。
PetaLinux_92_190417.png

~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/build/tmp/sysroots-components/ultra96_zynqmp/udmabuf/lib/modules/4.14.0-xilinx-v2018.2/extra/ ディレクトリの下に udmabuf.ko が生成されていた。
PetaLinux_93_190417.png

そのディレクトリに行って、udmabuf.ko をUltra96 のMicroSD カードの /home/root の下にコピペする。
cd ~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/build/tmp/sysroots-components/ultra96_zynqmp/udmabuf/lib/modules/4.14.0-xilinx-v2018.2/extra/
sudo cp udmabuf.ko /media/masaaki/ROOT_FS/home/root/

PetaLinux_94_190417.png

Ultra96 ボードの電源をON して、Ultra96 のPetaLinux 上で udmabuf.ko をinsmod したところ成功した。
/dev/udmabuf0/ が生成されている。
insmod udmabuf.ko udmabuf0=0x1000
ls -l /dev/udmabuf0

PetaLinux_95_190417.png

petalinux-build -x package したが cam_dp_183/image/linux/ ディレクトリのファイルに変化はなかった。これは、PL のIP としてのドライバではないからだと思う。
LANG=en_US.UTF-8 petalinux-build -x package
PetaLinux_96_190417.png

PetaLinux のリファレンスマニュアルで、”選択したユーザー モジ ュールをインストールする方法”を試してみよう。”このコマンドを実行すると 、 モジュールがターゲットの rootfs ホストコ ピーにインストールされます。”とのことだ。
LANG=en_US.UTF-8 petalinux-build -c udmabuf -x do_install
PetaLinux_97_190418.png

これも、petalinux-build -x package したが cam_dp_183/image/linux/ ディレクトリのファイルに変化はなかった。

最後に、PetaLinux のリファレンスマニュアルによると、モジュールをクリーンアップする方法は以下のコマンドを使用するようだ。
petalinux-build -c udmabuf -x do_cleansstate

私の環境では、
LANG=en_US.UTF-8 petalinux-build -c udmabuf -x do_cleansstate
  1. 2019年04月18日 04:47 |
  2. Docker
  3. | トラックバック:0
  4. | コメント:0

udmabufをPetaLinuxで使用する(ホストパソコンでudmabufをmake したが致命的エラー)

udmabufをPetaLinuxで使用する(ホストパソコンでudmabufをmakeして、udmabuf.koをPetaLinuxにコピーしたが失敗)”の続き。

前回の make は X86 用のカーネルモジュールを生成してしまい、Ultra96 のPetaLinux に持っていったがinsmod でエラーになった。今回は、arm64 用に make を行ってみよう。なお、arm64 用のコンパイル環境は、source /tools/Xilinx/Vivado/2018.3/settings64.sh を起動することにより確保している。

arm64 用に make をするためには、
ARCH=arm64 make
とすれば良いようだ。
また、libelf-dev モジュールが必要のようなので、これをインストールする。
sudo apt install -y libelf-dev
ARCH=arm64 make

致命的エラーになってしまった。
PetaLinux_84_190416.png

エラー内容を示す。

masaaki@masaaki-H110M4-M01:~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf$ ARCH=arm64 make
make -C /lib/modules/4.15.0-47-generic/build ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- M=/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf modules
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-47-generic' に入ります
  CC [M]  /home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o
In file included from ./include/linux/types.h:6:0,
                 from ./include/linux/kobject.h:19,
                 from ./include/linux/cdev.h:5,
                 from /home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.c:31:
./include/uapi/linux/types.h:5:10: 致命的エラー: asm/types.h: そのようなファイルやディレクトリはありません
 #include <asm/types.h>
          ^~~~~~~~~~~~~
コンパイルを停止しました。
scripts/Makefile.build:339: recipe for target '/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o' failed
make[2]: *** [/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o] Error 1
Makefile:1552: recipe for target '_module_/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf' failed
make[1]: *** [_module_/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf] Error 2
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-47-generic' から出ます
Makefile:19: recipe for target 'all' failed
make: *** [all] Error 2


次に、念の為、ARCH=arm でもやってみよう。
make clean
ARCH=arm make

やはり致命的エラーだった。
PetaLinux_85_190416.png

ログを示す。

masaaki@masaaki-H110M4-M01:~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf$ ARCH=arm make
make -C /lib/modules/4.15.0-47-generic/build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- M=/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf modules
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-47-generic' に入ります
  CC [M]  /home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o
In file included from ./include/asm-generic/int-ll64.h:11:0,
                 from ./arch/arm/include/uapi/asm/types.h:5,
                 from ./include/uapi/linux/types.h:5,
                 from ./include/linux/types.h:6,
                 from ./include/linux/kobject.h:19,
                 from ./include/linux/cdev.h:5,
                 from /home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.c:31:
./include/uapi/asm-generic/int-ll64.h:12:10: 致命的エラー: asm/bitsperlong.h: そのようなファイルやディレクトリはありません
 #include <asm/bitsperlong.h>
          ^~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
scripts/Makefile.build:339: recipe for target '/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o' failed
make[2]: *** [/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf/udmabuf.o] Error 1
Makefile:1552: recipe for target '_module_/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf' failed
make[1]: *** [_module_/home/masaaki/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/udmabuf] Error 2
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-47-generic' から出ます
Makefile:19: recipe for target 'all' failed
make: *** [all] Error 2


試しに、udmabuf ディレクトリをMicroSD カードの第2パーティションの rootfs の /home/root/ ディレクトリにコピーして、Ultra96 のPetaLinux 上で make してみたがエラーだった。
PetaLinux_86_190416.png

エラー内容を示す。

root@xilinx-ultra96-reva-2018_2:~/udmabuf# make
make -C /lib/modules/4.14.0-xilinx-v2018.2/build ARCH=arm64 CROSS_COMPILE= M=/home/root/udmabuf modules
make[1]: *** /lib/modules/4.14.0-xilinx-v2018.2/build: No such file or directory. Stop.
make: *** [Makefile:19: all] Error 2

  1. 2019年04月16日 05:03 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0

udmabufをPetaLinuxで使用する(ホストパソコンでudmabufをmakeして、udmabuf.koをPetaLinuxにコピーしたが失敗)

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にPLのUIOを追加した”でPetaLinux にPL のIP のUIO を追加することができた。cam_dp_183 プロジェクトで作成したビットストリームを動作させるには、どうしても udmabuf が必要なので、udmabuf をインストールしよう。

今回は、udmabuf を git からクローンして、まずは、Docker コンテナ上でmake してみたが、エラーになった。次に、ホストパソコンでVivado を使用できるようにした状態で、make するとビルドできて、udmabuf.ko が生成された。この udmabuf.ko をUltra96 のMicroSD カードのRoot File System に書いて、Ultra96 のPetaLinux 上で insmod したところ失敗した。

2019/04/16:追記 今回の make は X86 用のカーネルモジュールを生成してしまったようです。 ikwzm さんから指摘を受けました。失礼しました)

まずは、udmabuf を git からクローンする。Docker コンテナ上でやってみよう。
git clone https://github.com/ikwzm/udmabuf.git
PetaLinux_79_190415.png

Docke コンテナ上で make を行って、失敗した。
PetaLinux_80_190415.png

次に、source /tools/Xilinx/Vivado/2018.3/settings64.sh を実行したホストパソコン上で make を行ったところ成功した。
PetaLinux_81_190415.png

Ultra96 のMicroSD カードをホストパソコンにマウントして、udmabuf.ko をコピーした。
sudo cp udmabuf.ko /media/masaaki/ROOT_FS/home/root/
PetaLinux_82_190415.png

MicroSD カードをUltra96 に挿入して電源ON。
insmod udmabuf.ko udmabuf0=0x1000
を実行したところ、”insmod: ERROR: could not insert module udmabuf.ko: Invalid module format”になった。
PetaLinux_83_190415.png

やはり、PetaLinux 上でビルドする必要がありそうだ。
  1. 2019年04月15日 05:07 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0
»