Ubuntu18.04LTSへGNUradio3.7をインストールして、テスト動作させるまでの手順です。
前回の記事ではWindows10にGNUradioを入れましたが、今後記事にする予定のワンセグ受信のモジュールは、ubuntuでビルドする必要があるので、その準備対応としてUbuntuへのGNUradioインストール方法を解説します。
今回使用するUSBチューナー
使用するチューナーは、RTL2838が乗ったUSBチューナードングルです。
商品リンクに掲載したチューナーの動作確認は行っています。
同じICチップを使っているUSBチューナーの大半は動作するようです。
GNUradioのバージョンに注意
GNUradioの最新版は3.8ですが、v3.7から多くの変更がありますので、過去のソフト資産を使いたい場合は、バージョンを上げる際には細心の注意が必要です。
- python2からpython3へ変更
- GRCファイルの記録様式がXML形式からYAML形式に変更
- gr-qtguiGUIがQt4からQt5へ変更
- gr-comedi、gr-fcd、およびgr-wxguiモジュールのサポートが終了
- PyQwtベースのユーティリティはコンポジションから削除
特にGRCファイルの記録様式がYAML形式に変わっている部分は要注意で、GRCファイルをGNUradio3.8で読み込んで保存してしまうと、GNUradio3.7で読み込めない形式となってしまします。
今後、gr-isdbtというワンセグデコーダを使って、ワンセグ受信にトライしていきたいと考えておりgr-isdbtの開発環境と合わせる必要がありますので、今回はGNUradio3.7をインストールすることにします。
本記事の制約について
本記事の対象はRTL2832, RTL2838が実装されたUSBチューナー限定です。
アナログデバイセズのADLAM-Pulto等の高機能チューナーは、メーカの専用ライブラリをいれないと動作しないようですので、この要領だけではGNUradioは動作しません。
またwindows10のWSL/WSL2での仮想ubuntu環境での動作は出来ていません。GNUradioのインストールと編集作業は可能ですが、USBデバイスや音声デバイスなどのIOデバイスのアクセスがあると実行時にエラーとなります。
ADLAM-PulutoはWindows10のWSL/WSL2で動作するそうなので、RTL2832/2838はおそらくWindowsのZadigドライバーと競合していると想定されます。
Windows10でお使いの場合は、Windows版のGNUradioを使う方が良さそうです。Windows版のGNUradioではUbuntuでビルドが必要なモジュールがインストールできませんが、解決方法は探っていきたいと思います。
GNUradioの入手とインストール
GNUradioはバージョン間の互換性が乏しいので、必ずバージョンを確認してからインストールします。
apt-cacheで提供されているバージョンを確認します。ubuntu18.04の場合は、バージョン3.7.11が最終リリースでした。
$ sudo apt update $ apt-cache madison gnuradio gnuradio | 3.7.11-10 | http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages $ apt-cache policy gnuradio gnuradio: インストールされているバージョン: (なし) 候補: 3.7.11-10 バージョンテーブル: *** 3.7.11-10 500 500 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages 100 /var/lib/dpkg/status $ sudo apt install gnuradio
RTL-SDR用のIOドライバーモジュールをインストールします。GNUradioのRTL-SDR用のIOドライバーはgr-osmosdrにまとめられています。
$ apt-cache policy gr-osmosdr gr-osmosdr: インストールされているバージョン: (なし) 候補: 0.1.4-14build1 バージョンテーブル: *** 0.1.4-14build1 500 500 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu bionic/universe amd64 Packages 100 /var/lib/dpkg/status $ sudo apt install gr-osmosdr
一般ユーザーがデバイスにアクセスできるようにパーミッションを設定します。
lsusbコマンドでRTL283xのポートを表示させると次のような結果が表示されます。
$ sudo lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 04b4:120d Cypress Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-TがUSBチューナのポートになるので、/lib/udev/rules.d/60-librtlsdr0.rulesの該当する記述の権限設定を、0660→0666に書き換えます。(以下表示は適宜改行しています)
$ sudo nano /lib/udev/rules.d/60-librtlsdr0.rules # RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) e<br />tc.<br /> SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", ENV{ID_SOF<br /> TWARE_RADIO}="1", MODE="0666", GROUP="plugdev" MODEを0660→0666に変更する
これでGNUradioのインストールは完了です。
Ubuntu版のGNUradio起動方法
GNUradioの起動は、端末ウィンドウのコマンドラインから gnuradio-companionと入力します。単にgnuradioと入力しても起動しないので注意しましょう。
$ gnuradio-companion Gtk-Message: 20:00:50.802: Failed to load module "canberra-gtk-module" <<< Welcome to GNU Radio Companion 3.7.11 >>> Block paths: /usr/share/gnuradio/grc/blocks /usr/local/share/gnuradio/grc/blocks linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown >>> Done
gnuradioが起動すると次のような画面が出て、あとの使い方はWindows版とほぼ同一です。
Failed to load module "canberra-gtk-module"というメッセージが出ますが、イベントサウンドを再生させるモジュールです。インストールしなくともgnuradioは動作しますが、不具合があると困るのでインストールしておきます。
canberra-gtk-module大きなモジュールでインストールに時間がかかりますので、gnuradioの動作後に実施しましょう。
$ sudo apt install canberra-gtk*
FMラジオで動作テストする
インストールが終わったらFMラジオのモジュールをロードしてFM放送が受信できることを確かめます。
GNUradioは、信号処理を得意とするpythonでコーディングされており、GUI周りも同じQTで組まれていますので、使い方はWindows版と差がなく、同じように使えます。
なおGRCファイルはWindows版と同じものを使いましたので適宜ご利用ください。
ビルドが必要なモジュールはUbuntuで使う
UbuntuのベースとなるUnixは、もともとエンジニア用の計算機として発展してきたものですから、モジュールの追加などのビルドが容易であり、システム安定性や管理面での使い勝手に優れています。
ワンセグ受信モジュールなど、ビルド・コンパイルを必要とする場合は、作者から手順が公開されているubuntu版で動かして、その後、Windows版にモジュール移植という手順で検証を進めていきたいと考えています。
gr-isdbtを使ったワンセグ受信はubuntu上なら動作できましたので、その手順などは今後の記事にまとめていきたいと思います。