FC2カウンター FPGAの部屋 udmabufをPetaLinux 2018.2でビルドする
FC2ブログ

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

FPGAの部屋

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

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

コメント

コメントの投稿


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

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