Linux版 LabVIEWでSDR開発を試して見る (4) NI-USRPドライバをインストールする

こんにちはドルフィンシステム福島です。

LimeSDR Mini」というUSB接続のソフトウェア無線機が数年前から販売されていますが、先週2.0が受注開始する、ということで早速見てみました。よく読んでみるとハードの中身は一緒で部品を変更したものでした。部品の入手難で製造が困難になったので、設計変更し入手可能なパーツで製造を続行できるようにしたもののようです。

この間無線関連の展示会Wireless JAPAN 2022に行って色々な方とお話ししたところ、やはり部品の入手難でハードウェアが製造できない事が多く、部品の納期が数ヶ月や1年かかる事もあるそうです。

ソフトウェア無線機の場合一度購入してしまえば色々な用途に使い回しが出来るので、ハードウェアが速やかに入手出来なくても購入済のUSRPをかき集めて実験を続行する、ということも可能です。

事業継続性の観点からもSDRやソフトウェア無線機は有用ですので、まだ活用していらっしゃらない方は是非ご検討ください。


さてLinux版 LabVIEWでSDR開発を試すシリーズの第4弾です。

前回はUSB 3.0デバイスが使用できる仮想PCソフトウェア VirtualBoxのUbuntu Linux 22.04にLabVIEW 2020をインストールしました。

今回は、Ubuntu LinuxにLinux版 NI-USRP ドライバインストールしてみます。

【前回】Linux版 LabVIEWでSDR開発を試して見る (3) Ubuntu LinuxにLabVIEWをインストールする
http://mikioblog.dolphinsystem.jp/2022/05/linux-labviewsdr-3-ubuntu-linuxlabview.html


NI-USRPドライバをインストールする

ダウンロードしたzipファイルについて

まず第1回でダウンロードしたNI-USRPのzipファイルはNI-USRPドライバ本体ではなく、NI-USRPドライバをaptでインストールするためのリポジトリ情報が記載されている設定ファイルです。この設定ファイルをインストールしてから、NIのリポジトリからNI-USRPドライバをインストールするという流れになります。

ちなみに設定ファイルをインストール前は、以下の様にapt listコマンドで取得可能なパッケージ一覧に"usrp"はもちろんないですね。

$ apt list|grep usrp WARNING: apt does not have a stable CLI interface. Use with caution in scripts. $

ダウンロードしたzipファイルを転送しインストールする

では前回ダウンロードしたNI-USRPをLinuxに転送します。

ファイル転送にはsshdがインストールされ動作している事が必要です(この手順通りに実行していたらインストールされ動作しているはず)

ファイル転送にはFileZillaがおすすめです。


File Zillaの設定


適当なディレクトリにアップロードします。

アップロードしたzipファイルを展開しインストールします。


$ unzip NILinux2021Q4DeviceDrivers.zip Archive:  NILinux2021Q4DeviceDrivers.zip    creating: NILinux2021Q4DeviceDrivers/   inflating: NILinux2021Q4DeviceDrivers/ni-opensuse151-drivers-2021Q4.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-opensuse151-drivers-stream.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-opensuse152-drivers-2021Q4.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-opensuse152-drivers-stream.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-rhel7centos7-drivers-2021Q4.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-rhel7centos7-drivers-stream.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-rhel8centos8-drivers-2021Q4.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-rhel8centos8-drivers-stream.rpm   inflating: NILinux2021Q4DeviceDrivers/ni-ubuntu1804firstlook-drivers-2021Q4.deb   inflating: NILinux2021Q4DeviceDrivers/ni-ubuntu1804firstlook-drivers-stream.deb   inflating: NILinux2021Q4DeviceDrivers/ni-ubuntu2004firstlook-drivers-2021Q4.deb   inflating: NILinux2021Q4DeviceDrivers/ni-ubuntu2004firstlook-drivers-stream.deb $ cd NILinux2021Q4DeviceDrivers/ $ sudo dpkg -i ni-ubuntu2004firstlook-drivers-* 以前に未選択のパッケージ ni-software-2021-focal を選択しています。 (データベースを読み込んでいます ... 現在 237863 個のファイルとディレクトリがインストールされています。) ni-ubuntu2004firstlook-drivers-2021Q4.deb を展開する準備をしています ... ni-software-2021-focal (21.3.0.49688-0+f536) を展開しています... 以前に未選択のパッケージ ni-software-stream-focal を選択しています。 ni-ubuntu2004firstlook-drivers-stream.deb を展開する準備をしています ... ni-software-stream-focal (21.3.0.49688-0+f536) を展開しています... ni-software-2021-focal (21.3.0.49688-0+f536) を設定しています ... ni-software-stream-focal (21.3.0.49688-0+f536) を設定しています ... $ sudo apt update $ apt list|grep usrp WARNING: apt does not have a stable CLI interface. Use with caution in scripts. ni-usrp-rio-dkms/不明,不明 21.0.0.49152-0+f0 amd64 ni-usrp-rio-libs/不明,不明 21.0.0.49152-0+f0 amd64 ni-usrp-rio/不明,不明,不明,不明 21.0.0.49152-0+f0 all

これでインストールの準備が出来ました。


NI-USRPドライバをインストールする

ではドライバをインストールします。


$ sudo apt install ni-usrp-rio


エラーが発生しましたので、表示されているメッセージに従ってログを見てみます。

$ cat  /var/lib/dkms/niusrpriok/21.0/build/make.log

エラーメッセージ中にログを見てみるとヘッダファイルが無いようです。


調べてみるとカーネル再構築中に必要なファイルが無いことが原因だそうです。NIから回避方法が公開されていますので、実行します。

NI-USRP 21.0.2 Known Issues

https://www.ni.com/ja-jp/support/documentation/bugs/22/ni-usrp-21-0-2-known-issues.html


$ sudo touch /usr/src/linux-headers-$(uname -r)/include/config/modversions.h $ sudo apt install ni-usrp-rio


これで出来ました。


インストールされたパッケージを確認します。

$ dpkg -l |grep usrp


USRP-RIO関連のファイルがインストールされたようです。

$ find / 2>/dev/null|grep usrp /run/systemd/generator.late/niusrpriorpc.service /run/systemd/generator.late/graphical.target.wants/niusrpriorpc.service /run/systemd/generator.late/multi-user.target.wants/niusrpriorpc.service /usr/sbin/niusrpriorpc /usr/lib/modules/5.13.0-41-generic/updates/dkms/niusrpriok.ko /usr/lib/x86_64-linux-gnu/libniusrprio.so /usr/lib/x86_64-linux-gnu/libniusrprio.so.1 /usr/lib/x86_64-linux-gnu/libniusrprio.so.21.0.0 /usr/src/niusrpriok-21.0 /usr/src/niusrpriok-21.0/niusrpriok-bin.o_shipped /usr/src/niusrpriok-21.0/niusrpriok.resyms /usr/src/niusrpriok-21.0/Makefile /usr/src/niusrpriok-21.0/niusrpriok-interface.c /usr/src/niusrpriok-21.0/Kbuild /usr/src/niusrpriok-21.0/dkms.conf /usr/src/niusrpriok-21.0/nikal.h /usr/src/niusrpriok-21.0/niusrpriok.deps /var/cache/apt/archives/ni-usrp-rio-dkms_21.0.0.49152-0+f0_amd64.deb /var/cache/apt/archives/ni-usrp-rio_21.0.0.49152-0+f0_all.deb /var/cache/apt/archives/ni-usrp-rio-libs_21.0.0.49152-0+f0_amd64.deb /var/lib/nikal/5.13.0-41-generic/symvers/niusrpriok.symvers /var/lib/dkms/niusrpriok /var/lib/dkms/niusrpriok/21.0 /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic/x86_64 /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic/x86_64/module /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic/x86_64/module/niusrpriok.ko /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic/x86_64/log /var/lib/dkms/niusrpriok/21.0/5.13.0-41-generic/x86_64/log/make.log /var/lib/dkms/niusrpriok/21.0/source /var/lib/dkms/niusrpriok/kernel-5.13.0-41-generic-x86_64 /var/lib/dpkg/info/ni-usrp-rio.md5sums /var/lib/dpkg/info/ni-usrp-rio-libs.list /var/lib/dpkg/info/ni-usrp-rio-dkms.prerm /var/lib/dpkg/info/ni-usrp-rio-libs.prerm /var/lib/dpkg/info/ni-usrp-rio-libs.md5sums /var/lib/dpkg/info/ni-usrp-rio.list /var/lib/dpkg/info/ni-usrp-rio-dkms.md5sums /var/lib/dpkg/info/ni-usrp-rio-dkms.list /var/lib/dpkg/info/ni-usrp-rio-libs.postinst /var/lib/dpkg/info/ni-usrp-rio-dkms.postinst /var/crash/ni-usrp-rio-dkms.0.crash /etc/rc1.d/K01niusrpriorpc /etc/rc3.d/S01niusrpriorpc /etc/rc6.d/K01niusrpriorpc /etc/rc0.d/K01niusrpriorpc /etc/init.d/niusrpriorpc /etc/rc5.d/S01niusrpriorpc /etc/rc2.d/S01niusrpriorpc


NI-USRPをLabVIEWで使ってみる?

ではNI-USRPドライバがインストール出来たので、LabVIEWを起動しUSRPの関数を確認してみます。


・・・USRP関連の関数がないです。


どこにも無いです。プロジェクトテンプレートにもないです。

あれ?なんだろう?


色々と調べてみると、以下のページにNIのLinux デバイスドライバーの情報がまとまっています。
このページの"Driver Info"からたどったページを見ていくと・・・


NI Linux Device Drivers 2022 Q2 Readme
https://www.ni.com/pdf/manuals/378353g.html


Linux NI RIO Installation and Usage
https://files.ettus.com/manual/page_ni_rio_kernel.html




あれ?


This does not include NI-USRP API support on Linux.


なんと!NI-USRP Linux版は、Linux版 LabVIEWでNI-USRPのプログラミングAPIではなく、Linux PCでPCI Express 接続のデバイスドライバだけでした。

Linux上でのUSRPプログラミングには、相変わらずC++かPythonGNU RadioでUHD経由のアクセスが必要なようです。


まとめ

  • NI-USRPドライバのLinux版とは、NI-USRP APIをLinux上のLabVIEW 環境で使える物ではありませんでした。
  • Linux PCにPCI Express接続されたUSRP-RIO (X310)をUHDで使用するためのデバイスドライバでした。

よく調べなかった私も悪いのですが、できればNIのダウンロードページに"This does not include NI-USRP API support on Linux."の一文を書いておいて欲しかったですね。

このままでは引き下がれないので、次回はセットアップしたデバイスドライバでPCI Express経由でX310を認識させてみたいと思います。

以上、ドルフィンシステム福島でした。


コメント