FC2カウンター FPGAの部屋 2018年10月24日
FC2ブログ

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

FPGAの部屋

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

Ultra96 ボードでデバイスツリー・オーバーレイをテストする2

Ultra96 ボードでデバイスツリー・オーバーレイをテストする1”の続き。

前回は、ikwzm さんの”UltraZed 向け Debian GNU/Linux で AXI HPC port を使う (実践編1)”を参照しながら、デバイスツリー・オーバーレイをやってみたが、fclkcfg をロードした時点で失敗してしまった。今回は、ikwzm さんが Ultra96 ボードのSDカードのイメージを含んだ”kwzm/ZynqMP-FPGA-Linux”を公開してくれたので、SDカードのブート・パーティションのdtb だけをそれと入れ替えてやってみよう。

まずは、”kwzm/ZynqMP-FPGA-Linux”の”Ultra96”ページを見ながら git clone した。
git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
cd ZynqMP-FPGA-Linux
git checkout v2018.2.1-rc1
git lfs pull


ZynqMP-FPGA-Linux/target/Ultra96/boot ディレクトリのdevicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dtb をMicroSD カードの第1パーティションのULTRA96_BOO に system.dtb と名前を変更してコピーした。
Ultra96_ikwzm_72_181024.png

Ultra96 ボードのMicroSD スロットに入れて電源ON。
ブートは成功し、問題無かった。
fpga ユーザーでログインした。
cd examples/DMA_pow2
sudo mkdir /config/device-tree/overlays/fpga
sudo cp fpga-load.dtb /config/device-tree/overlays/fpga/dtbo
sudo mkdir /config/device-tree/overlays/fclk0
sudo cp fclk0-zynqmp.dtb /config/device-tree/overlays/fclk0/dtbo

Ultra96_ikwzm_73_181024.png

シリアル・コンソールにデバイスツリー・オーバーレイのメッセージが表示された。

[  105.706727] fpga_manager fpga0: writing DMA_pow2_test_wrapper.bin to Xilinx ZynqMP FPGA Manager
[  135.918071] fclkcfg: loading out-of-tree module taints kernel.
[  135.925556] fclkcfg amba:fclk0: driver installed.
[  135.930291] fclkcfg amba:fclk0: device name    : fclk0
[  135.935415] fclkcfg amba:fclk0: clock  name    : pl0_ref
[  135.940705] fclkcfg amba:fclk0: clock  rate    : 99999999
[  135.946108] fclkcfg amba:fclk0: clock  enabled : 1
[  135.950869] fclkcfg amba:fclk0: remove rate    : 1000000
[  135.956164] fclkcfg amba:fclk0: remove enable  : 0


Ultra96_ikwzm_74_181024.png

うまく行ったみたいだ。

次に、uio と udmabuf のロードを行う。
UltraZed 向け Debian GNU/Linux で AXI HPC port を使う (実践編1)のUio とUdmabuf の準備”を参考に DMA_pow2_test.dts を書いた。
Ultra96_ikwzm_75_181024.png

/dts-v1/;/plugin/;
/ {
    fragment@0 {
        target-path = "/amba_pl@0";
        #address-cells = <2>;
        #size-cells = <2>;

        __overlay__ {
            #address-cells = <2>;
            #size-cells = <2>;

            dma_pow2-uio {
                compatible = "generic-uio";
                reg = <0x0 0x00A0000000 0x0 0x10000>;
            };

            dma_pow2-udmabuf4 {
                compatible  = "ikwzm,udmabuf-0.10.a";
                device-name = "udmabuf4";
                size = <0x00001000>;
            };
        };
    };
};


dtc で DMA_pow2_test.dts をコンパイルして、dtb に変換してから、ロードした。
dtc -I dts -O dtb -o DMA_pow2_test.dtb DMA_pow2_test.dts
sudo mkdir /config/device-tree/overlays/DMA_pow2_test
sudo cp DMA_pow2_test.dtb /config/device-tree/overlays/DMA_pow2_test/dtbo

Ultra96_ikwzm_76_181024.png

シリアル・コンソールを見ると、 udmabuf がロードされているのが分かる。
Ultra96_ikwzm_77_181025.png

ls -la で uio と udmabuf を見たところ、両方共ロードされていた。
更に、fpga ユーザーでも uio と udmabuf を扱えるようにファイルのパーミッションを 666 にしておく。
ls -la /dev/uio*
ls -la /dev/udmabuf*
sudo chmod 666 /dev/uio*
sudo chmod 666 /dev/udmabuf*

Ultra96_ikwzm_78_181025.png

なお、現在の”kwzm/ZynqMP-FPGA-Linux”の”build-v2018.2”の”ZynqMP-FPGA-Linux/target/Ultra96/boot ディレクトリのdevicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dtb” では uio と udmabuf のロードがうまく行かなかった。その代わりに、”ikwzm/devicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dtb”を使用している。この dtb だとうまく uio と udmabuf がロード出来た。この dtb と dts は近日中に”kwzm/ZynqMP-FPGA-Linux”の v2018.2.1-rc2 として ikwzm さんがリリースされるとのことだ。

(追記)
ZynqMP-FPGA-Linux/doc/install/ultra96.md”を見ると、v2018.2.1-rc2 がリリースされたようだ。
  1. 2018年10月24日 06:54 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0