Запустите блок-схему GNU Radio из Docker с Ettus B200 USRP с UHD

Я пытаюсь запустить потоковые графы GNU Radio (без графического интерфейса) из контейнера Docker. ОС как на хосте, так и на образе докера — Ubuntu 18.04. Я использую GNU Radio v3.7.13.4 и UHD v3.14.0.0.

На хосте я могу запустить grcc -e flowgraph.grc, и он выполняется, как и ожидалось. Когда я пытаюсь запустить его в контейнере Docker, он сообщает

Validation failed:

Block - blocks_tagged_stream_multiply_length_0 - Tagged Stream Multiply Length Tag(blocks_tagged_stream_multiply_length):
        Source - out(0):
                Port is not connected.
Error during file compilation.

И на хосте, и в контейнере Docker uhd_find_devices возвращает:

[INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501; UHD_3.14.0.HEAD-0-g6875d061
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    serial: 30CF9B7
    name: MyB210
    product: B210
    type: b200

Итак, похоже, что я правильно делю USB-устройства между хостом и контейнером (хотя я подозреваю, что проблема связана с некоторыми более мелкими деталями).

Я запускаю контейнер с: docker run -it -v /dev/bus/usb:/dev/bus/usb --privileged csradio:latest

Кто-нибудь знает, в чем может быть проблема?

Редактировать 1: добавлены сведения о версии ОС, GNU и UHD.


person Steven Gillies    schedule 13.06.2020    source источник
comment
Используете ли вы блоки OOT в своем блок-схеме? Если это так, убедитесь, что все блоки OOT установлены в контейнере. Можете ли вы поделиться своей блок-схемой или ее скриншотом? Используете ли вы Ubuntu 18.04 как на хосте, так и на контейнере, и какую версию gnuradio вы установили как на хосте, так и в контейнере?   -  person Vasil Velichkov    schedule 13.06.2020
comment
Да, в блок-схеме есть блоки OOT, все они установлены. Блок, вызывающий проблему, относится к исходному блоку USRP. Я могу воссоздать приведенное выше сообщение об ошибке, попытавшись запустить команду, когда USRP не подключен, поэтому я вполне уверен, что это какая-то проблема с разрешениями/доступностью между контейнером и USB USRP. Я не могу предоставить скриншот блок-схемы внутри контейнера, так как мне не удалось перенаправить отображение, поэтому GNU Radio выдает ошибку при запуске. Я добавил версии радио GNU и UHD, а также сведения об ОС к исходному вопросу.   -  person Steven Gillies    schedule 13.06.2020
comment
Я сомневаюсь, что это проблема разрешения, поскольку я могу компилировать потоковые графы (как в контейнере, так и на хосте) без подключения устройства USRP. Команда grcc просто генерирует скрипт Python и не выполняет его. Мой совет: попробуйте скомпилировать две простые блок-схемы: одну с одним исходным блоком USRP, подключенным к нулевому приемнику, и вторую с одним источником сигнала, подключенным к нулевому приемнику. Также вы можете использовать x11docker для запуска Gnuradio Companion внутри вашего контейнера.   -  person Vasil Velichkov    schedule 13.06.2020
comment
Я только что увидел, что вы используете опцию -e для выполнения блок-схемы. Можете ли вы попробовать сделать это в два этапа: сначала соберите его с помощью grcc -d . flowgraph.grc, а затем, в случае успеха, запустите его с помощью ./flowgraph.py.   -  person Vasil Velichkov    schedule 13.06.2020
comment
попробовал это с флагом -d, та же ошибка, поэтому я подозреваю, что это как-то связано с установкой сейчас, а не с разрешениями USB. Дополнительным доказательством этого является то, что я могу запустить uhd_usrp_probe, и он работает нормально. Я перешел к изучению установки. Разница между контейнером и хост-компьютером заключается в том, что контейнер установлен как root. Я перепишу его, чтобы создать пользователя и использовать тот же сценарий установки, что и хост, и посмотреть, работает ли он. Спасибо за вашу помощь.   -  person Steven Gillies    schedule 14.06.2020
comment
Можете ли вы поделиться своим файлом докеров и установить скрипт? Кстати, как вы установили gnuradio v3.7.13.4? Я спрашиваю, потому что версия в репозитории 18.04 — 3.7.11, а версия в gnuradio-releases-3.7 PPA-репозиторий равен 3.7.13.5. Я сомневаюсь, что это из-за пользователя root. Вы пробовали построить две простые блок-схемы?   -  person Vasil Velichkov    schedule 14.06.2020
comment
Сегодня я попытался построить простые блок-схемы, но, похоже, в библиотеке сейчас нет блоков USRP. Должно быть, я подправил сценарии установки, так как я установил на хост и не заметил. Откуда берутся эти блоки? Я не могу найти каких-либо различий, которые могли бы вызвать это. Я загрузил скрипт установки на bitbucket.org/machinator/gnuradio/src/master. Скрипт собран по инструкции на сайте Ettus от 18.04. Спасибо.   -  person Steven Gillies    schedule 15.06.2020
comment
О, я также хотел добавить, что Dockerfile использует тот же метод, но эта проблема возникает в традиционной виртуальной машине, которую я создал сегодня, поэтому я думаю, что Docker не имеет отношения (во всяком случае, к проблеме с отсутствующим блоком).   -  person Steven Gillies    schedule 15.06.2020
comment
Я переключился с установки GNU Radio по источнику на PPA, и, похоже, это сработало; Блоки UHD вернулись в мою радиобиблиотеку GNU, и я могу GRCC на хосте и образе докера. Спасибо за помощь. Если вы хотите написать ответ, я приму его, когда закончу тестирование.   -  person Steven Gillies    schedule 15.06.2020


Ответы (1)


Глядя на ваш Dockerfile, наиболее вероятной причиной вышеуказанной ошибки является то, что UHD блокирует отсутствуют, поскольку вы установили uhd после установки gnuradio.

Решение состоит в том, чтобы сначала собрать и установить uhd, а затем собрать gnuradio.

person Vasil Velichkov    schedule 15.06.2020