FC2カウンター FPGAの部屋 ”Docker 上のUbuntu 16.04 のPetaLinux 2018.2でuioとudmabufの動作をテストする(DMA_pow2_testを使用)”にPLのIPのUIOを追加する
FC2ブログ

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

FPGAの部屋

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

”Docker 上のUbuntu 16.04 のPetaLinux 2018.2でuioとudmabufの動作をテストする(DMA_pow2_testを使用)”にPLのIPのUIOを追加する

Docker 上のUbuntu 16.04 のPetaLinux 2018.2でuioとudmabufの動作をテストする(DMA_pow2_testを使用)”の続き。

前回は、DMA_pow2_test のVivado 2018.2 プロジェクトを使用して uio と udmabuf のテストをすることにした。ということで、PetaLinux 2018.2 のプロジェクトを作成して、ビルドを行い、BOOT.BIN の作成まで行った。今回は、それにPL のIP のUIO を追加しよう。

今回は、
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を使用)にPLのUIOを追加した”を参考にする。

petalinux-config --get-hw-description=DMA_pow2_test.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_168_190426.png

PetaLinux_169_190426.png

PL のDTS を見てみよう。PetaLProj/DMA_pow2_test/componets/plnx_workspace/device-tree/device-tree/pl.dtsi がそれだ。
PetaLinux_170_190426.png

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version:  
 * Today is: Wed Apr 24 20:08:16 2019
 */


/ {
    amba_pl: amba_pl@0 {
        #address-cells = <2>;
        #size-cells = <2>;
        compatible = "simple-bus";
        ranges ;
        DMA_pow2_0: DMA_pow2@80000000 {
            compatible = "xlnx,DMA-pow2-1.0";
            reg = <0x0 0x80000000 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>;
        };
    };
};


DMA_pow2_0 だけがPL のIP としてエントリされている。

ZYBO (Zynq) 初心者ガイド (16) Linuxから自作IPをUIOで制御する”によると、(多少、PetaLinux のバージョン違いによりディレクトリ名が違っているところはあるのだが) PetaLProj/DMA_pow2_test/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi が編集可能なDTS のファイルとのことだ。
system-user.dtsi を以下のように書き換えて DMA_pow2_0 IP がUIO に追加されるようにした。
PetaLinux_171_190426.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";
    };
};

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


ビルドを行った。
LANG=en_US.UTF-8 petalinux-build
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/DMA_pow2_test_wrapper.bit --pmufw images/linux/pmufw.elf --u-boot

各ファイルが生成された。
PetaLinux_172_190426.png

MicroSD カードの第1パーティションに、BOOT.BIN と image.ub を書いて、第2パーティションに rootfs.tar.gz を展開した。
第2パーティションに rootfs.tar.gz を展開する様子を示す。
cd /media/masaaki/rootfs/
sudo rm -rf *
sync
cd ~/Docker/vivado182ub16/masaaki/PetaLProj/DMA_pow2_test/images/linux/
sudo tar fxz rootfs.tar.gz -C /media/masaaki/rootfs/
sync


書いたMicroSD カードをUltra96 に入れて電源ON。
PetaLinux がブートした。
/sys/class/uio を見ると、 uio0 と uio1 があった。
uio1 に入って name を見ると、DMA_pow2 だった。
その下の maps/map0 に入って、各種パラーメタを見た。
PetaLinux_173_190427.png

root@xilinx-ultra96-reva-2018_2:/sys/class/uio# ls
uio0 uio1
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# more name
DMA_pow2
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
0x0000000080000000
root@xilinx-ultra96-reva-2018_2:/sys/class/uio/uio1/maps/map0# more name
/amba_pl@0/DMA_pow2@80000000
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
0x0000000000010000

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

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/4507-4adfb2f5
この記事にトラックバックする(FC2ブログユーザー)