FC2カウンター FPGAの部屋 PetaLinux
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

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で使用する(ホストパソコンで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

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にPLのUIOを追加した

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にUIOを追加した””の続き。

前回は、Linux のブートオプションに uio_pdrv_genirq.of_id=generic-uio cpuidle.off=1 を追加して、UIOを活かした。今回は、PL のIP をUIO として設定してみよう。

参考にさせて頂くのは、”ZYBO (Zynq) 初心者ガイド (16) Linuxから自作IPをUIOで制御する”だ。とっても助かったというか、真似させていただいた。

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にUIOを追加した”のPetaLinux 2018.2 のプロジェクトを使用して、PL のIP のUIO を作成する。

最初にPL のDTS を見てみよう。PetaLProj/cam_dp_183/componets/plnx_workspace/device-tree/device-tree/pl.dtsi がそれだ。
PetaLinux_72_190413.png

PetaLinux_73_190413.png

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version:  
 * Today is: Fri Apr 12 20:17:06 2019
 */


/ {
    amba_pl: amba_pl@0 {
        #address-cells = <2>;
        #size-cells = <2>;
        compatible = "simple-bus";
        ranges ;
        axi_gpio_1: gpio@a0013000 {
            #gpio-cells = <3>;
            clock-names = "s_axi_aclk";
            clocks = <&clk 71>;
            compatible = "xlnx,xps-gpio-1.00.a";
            gpio-controller ;
            reg = <0x0 0xa0013000 0x0 0x1000>;
            xlnx,all-inputs = <0x1>;
            xlnx,all-inputs-2 = <0x0>;
            xlnx,all-outputs = <0x0>;
            xlnx,all-outputs-2 = <0x0>;
            xlnx,dout-default = <0x00000000>;
            xlnx,dout-default-2 = <0x00000000>;
            xlnx,gpio-width = <0x2>;
            xlnx,gpio2-width = <0x20>;
            xlnx,interrupt-present = <0x0>;
            xlnx,is-dual = <0x0>;
            xlnx,tri-default = <0xFFFFFFFF>;
            xlnx,tri-default-2 = <0xFFFFFFFF>;
        };
        camera_axi_iic_0: i2c@a0011000 {
            #address-cells = <1>;
            #size-cells = <0>;
            clock-names = "s_axi_aclk";
            clocks = <&clk 71>;
            compatible = "xlnx,xps-iic-2.00.a";
            reg = <0x0 0xa0011000 0x0 0x1000>;
        };
        camera_mt9d111_inf_axis_0: mt9d111_inf_axis@a0010000 {
            compatible = "xlnx,mt9d111-inf-axis-1.0";
            reg = <0x0 0xa0010000 0x0 0x1000>;
        };
        camera_vflip_dma_write2_0: vflip_dma_write2@a0020000 {
            compatible = "xlnx,vflip-dma-write2-1.0";
            reg = <0x0 0xa0020000 0x0 0x10000>;
            xlnx,s-axi-axilites-addr-width = <0x6>;
            xlnx,s-axi-axilites-data-width = <0x20>;
        };
        display_axi_gpio_0: gpio@a0012000 {
            #gpio-cells = <3>;
            clock-names = "s_axi_aclk";
            clocks = <&clk 71>;
            compatible = "xlnx,xps-gpio-1.00.a";
            gpio-controller ;
            reg = <0x0 0xa0012000 0x0 0x1000>;
            xlnx,all-inputs = <0x0>;
            xlnx,all-inputs-2 = <0x0>;
            xlnx,all-outputs = <0x1>;
            xlnx,all-outputs-2 = <0x0>;
            xlnx,dout-default = <0x00000000>;
            xlnx,dout-default-2 = <0x00000000>;
            xlnx,gpio-width = <0x1>;
            xlnx,gpio2-width = <0x20>;
            xlnx,interrupt-present = <0x0>;
            xlnx,is-dual = <0x0>;
            xlnx,tri-default = <0xFFFFFFFF>;
            xlnx,tri-default-2 = <0xFFFFFFFF>;
        };
        display_disp_dmar_axis_0: disp_dmar_axis@a0000000 {
            compatible = "xlnx,disp-dmar-axis-1.0";
            reg = <0x0 0xa0000000 0x0 0x10000>;
            xlnx,s-axi-axilites-addr-width = <0x6>;
            xlnx,s-axi-axilites-data-width = <0x20>;
        };
        psu_ctrl_ipi: PERIPHERAL@ff380000 {
            compatible = "xlnx,PERIPHERAL-1.0";
            reg = <0x0 0xff380000 0x0 0x80000>;
        };
        psu_message_buffers: PERIPHERAL@ff990000 {
            compatible = "xlnx,PERIPHERAL-1.0";
            reg = <0x0 0xff990000 0x0 0x10000>;
        };
    };
};


Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にUIOを追加した”で作成したMicroSD カードを起動すると、 /proc/device-tree/amba_pl@0/ に pl.dtsi のデバイスが表示されるのが見える。

、”ZYBO (Zynq) 初心者ガイド (16) Linuxから自作IPをUIOで制御する”によると、(多少、PetaLinux のバージョン違いによりディレクトリ名が違っているところはあるのだが) PetaLProj/cam_dp_183/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi が編集可能なDTS のファイルとのことだ。
cam_dp_183 のDevice-Tree の設定は、”カメラ画像をDisplayPortに出力する8(Ultra96 での準備)”に書いてあるので、それを参照しながら system-user.dtsi を書き換えた。
PetaLinux_72_190413.png

system-user.dtsi を示す。
PetaLinux_73_190413.png

/include/ "system-conf.dtsi"
/include/ "openamp-overlay.dtsi"
/ {
    chosen {
        bootargs = "console=ttyPS0,115200 earlyprintk earlycon clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait uio_pdrv_genirq.of_id=generic-uio cpuidle.off=1";
    };
};

&camera_mt9d111_inf_axis_0 {
    compatible = "generic-uio";
};

&camera_axi_iic_0 {
    compatible = "generic-uio";
};

&display_disp_dmar_axis_0 {
    compatible = "generic-uio";
};

&camera_vflip_dma_write2_0 {
    compatible = "generic-uio";
};

&display_axi_gpio_0 {
    compatible = "generic-uio";
};

&axi_gpio_1 {
    compatible = "generic-uio";
};


これで、petalinux-build を行った。
LANG=en_US.UTF-8 petalinux-build
PetaLinux_75_190413.png

petalinux-build で書き換えられた image.ub を MicroSD カードのそれと入れ替えた。
そしてUltra96 でブートした。

/sys/class/uio を見ると、今度は、uio0 だけでなく、uio6 までの uio があった。
uio0 は前と変わらずに axi-pmon で、 uio1 はgpio, uio2 は i2c, uio3 は mt9d111_inf_axis, uio4 は vflip_dma_write2, uio5 は gpio, uio6 は disp_dmar_axis だった。これは、pl.dtsi の順番で間違いないようだ。
PetaLinux_76_190413.png
PetaLinux_77_190413.png
PetaLinux_78_190413.png

ログを示す。

root@xilinx-ultra96-reva-2018_2:~# cd /sys/class
root@xilinx-ultra96-reva-2018_2:/sys/class# ls
ata_device  bsg       fpga_region  input     mtd           rc       scsi_host   video4linux
ata_link    devcoredump   gpio         iommu     net           regulator    sound   vtconsole
ata_port    dma       graphics     leds  pci_bus       remoteproc   spi_master  watchdog
backlight   drm       hwmon        mdio_bus  phy           rfkill       tty     xilinx_sdfec
bdi     extcon    i2c-adapter  mem   power_supply  rtc      udc     zynqmp_ipi_mbox
block       fpga_bridge   i2c-dev      misc  pps           scsi_device  uio
bluetooth   fpga_manager  ieee80211    mmc_host  ptp           scsi_disk    vc
root@xilinx-ultra96-reva-2018_2:/sys/class# cd uio
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# ls
uio0  uio1  uio2  uio3  uio4  uio5  uio6
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# cd uio1
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# ls
dev  device  event  maps  name  power  subsystem  uevent  version
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# less name
gpio
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# cd ..
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio0/name
axi-pmon
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio1/name
gpio
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio2/name
i2c
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio3/name
mt9d111_inf_axis
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio4/name
vflip_dma_write2
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio5/name
gpio
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio6/name
disp_dmar_axis
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# [  616.576476] PLL: shutdown
ls
uio0  uio1  uio2  uio3  uio4  uio5  uio6
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# cd uio1
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# ls
dev  device  event  maps  name  power  subsystem  uevent  version
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# cd maps
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps# ls
map0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps# cd map0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# ls
addr  name  offset  size
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# more addr 
0x00000000a0013000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# more name 
/amba_pl@0/gpio@a0013000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# more offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# more size 
0x0000000000001000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# cd ../..
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1# cd .. 
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio2/maps/map0/addr 
0x00000000a0011000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio2/maps/map0/name 
/amba_pl@0/i2c@a0011000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio2/maps/map0/offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio2/maps/map0/size   
0x0000000000001000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio3/maps/map0/addr 
0x00000000a0010000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio3/maps/map0/name 
/amba_pl@0/mt9d111_inf_axis@a0010000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio3/maps/map0/offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio3/maps/map0/size   
0x0000000000001000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio4/maps/map0/addr 
0x00000000a0020000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio4/maps/map0/name 
/amba_pl@0/vflip_dma_write2@a0020000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio4/maps/map0/offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio4/maps/map0/size   
0x0000000000010000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio5/maps/map0/addr 
0x00000000a0012000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio5/maps/map0/name 
/amba_pl@0/gpio@a0012000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio5/maps/map0/offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio5/maps/map0/size   
0x0000000000001000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio6/maps/map0/addr 
0x00000000a0000000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio6/maps/map0/name 
/amba_pl@0/disp_dmar_axis@a0000000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio6/maps/map0/offset 
0x0
root@xilinx-ultra96-reva-2018_2:/sys/class/uio# more uio6/maps/map0/size   
0x0000000000010000

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

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)にUIOを追加した

Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)”の続き。

前回、Linux 起動時に ls /sys/class してみたところ uio が入っていなかったと思うので、今回は、”Docker 上のUbuntu 16.04 のPetaLinux 2018.2で、Vivado 2018.3のSDKのディレクトリを使用してRootFSを使用するUltra96のPetaLinuxをビルドする(Ultra96 BSPを使用)”にUIO を追加する。ついでに、”Ultra96 のuEnv.txt のbootargs に cpuidle.off=1を追加した”に書いたようにLinux 起動時にハングアップしないように、Linux のブートオプションに cpuidle.off=1 も追加する。

petalinux-config --get-hw-description=cam_dp_183.sdk
を実行して、設定画面の DTG Settings > Kernel Bootargs を

earlycon clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait uio_pdrv_genirq.of_id=generic-uio cpuidle.off=1

に変更した。
PetaLinux_63_190411.png

PetaLinux_64_190411.png

petalinux-build を行った。
LANG=en_US.UTF-8 petalinux-build
PetaLinux_65_190411.png

成功した。

必要なファイルを生成した。
LANG=en_US.UTF-8 petalinux-package --image -c kernel --format uImage
LANG=en_US.UTF-8 petalinux-package --boot --fsbl components/plnx_workspace/fsbl/fsbl/Release/fsbl.elf --fpga components/plnx_workspace/fsbl/fsbl_hwproj/cam_dp_wrapper.bit --pmufw images/linux/pmufw.elf --u-boot

PetaLinux_66_190412.png

これで、必要なファイルが生成されたので、MicroSD カードの第1パーティションに、BOOT.BIN と image.ub を書き込み、第2パーティションには、rootfs.tar.gz を展開しながら書き込んだ。
cd /media/masaaki/ROOT_FS/
sudo rm -rf *
sync
cd ~/Docker/vivado182ub16/masaaki/PetaLProj/cam_dp_183/images/linux/
sudo tar fxz rootfs.tar.gz -C /media/masaaki/ROOT_FS/
sync


MicroSD カードをUltra96 に挿入してブートした。
cd /sys/class して ls すると、uio が見えた。
cd uio すると uio0 があるのがわかった。
PetaLinux_67_190412.png

uio0 の下の name を見ると axi-pmon ということが分かった。
PetaLinux_68_190412.png

その下の map0 と map1 をみた。
map0、map1 の下には、addr, name, offset, size の各ファイルがあった。その内容を示す。
PetaLinux_69_190412.png
  1. 2019年04月12日 05:24 |
  2. PetaLinux
  3. | トラックバック:0
  4. | コメント:0