Логотип SoapySDR

HackRF как трансивер: Часть 1. Установка SoapySDR

Наконец появилось время писать статейки. Ну что же, поехали!

Приобретал я HackRF с прицелом использовать его как трансивер без границ, с возможностью вещать в эфире на любой частоте и любой модуляции. И вот HackRF в моих руках, принимает и передает данные с помощью блока OsmoSDR. Здорово! Ну что же, соберем граф с трансивером. Кидаем на схему блоки «osmocom Sink» и «osmocom Source», жмем кнопку «Run» и… Получаем облом и кучу ошибок при запуске! Почему? Все просто, блоки пытаются независимо открыть устройство на примем и передачу одномоментно , но HackRf, по природе своей может одномоментно работать либо на прием, либо на передачу. Проблема, однако.
Я начинаю усердно гуглить, и нахожу людей столкнувшихся с той же проблемой. Решений на тот момент не существовало. Печаль. И я отложил эту проблему, надеясь что сообщество пользователей GnuRadio и HackRF как-то решит ее в итоге.
И вот, прошой осенью я решил посмотреть что нового.
И ура, наконец нашлись смелые люди что победили ее, написав драйвер-прослойку между Oscmocom блоками и драйвером HackRF.
Перед Новым Годом меня спросили на Radioscanner.Ru, можно ли как-то заставить работать HackRF трансивером? И я решил написать эту статью с подробными инструкциями.

Решение было найдено в багтрекере HackRF: https://github.com/mossmann/hackrf/issues/195 Суть ее такова, надо воспользоваться драйвером-прослойкой от программы SoapySDR,  который возьмет на себя отслеживание режима «прием/передача»

Предварительные условия: я использую Ubuntu, и GnuRadio из репозитория, и все требуемые зависимости и библиотеки у меня установлены. Если нет, то выполните их установку командой «sudo apt-get install gnuradio hackrf gr-osmosdr libhackrf-dev libhackrf0 libusb-1.0-0 libusb-1.0-0-dev git»

Начинааем устанавливать.
1. Открываем консоль, перемещаемся в какой-нибудь каталог и получаем исходный код SoapySDR
$ cd /storage/Temp/
$ git clone https://github.com/pothosware/SoapySDR.git
Клонирование в «SoapySDR»…
remote: Counting objects: 5711, done.
remote: Total 5711 (delta 0), reused 0 (delta 0), pack-reused 5711
Получение объектов: 100% (5711/5711), 2.83 MiB | 948.00 KiB/s, готово.
Определение изменений: 100% (4463/4463), готово.
Проверка соединения… готово.
2. Переходим в каталог SoapySDR
$ cd SoapySDR/
3. Создаем каталог «build»
$ mkdir build
4. Переходим в него
$ cd build
5. Выполняем команду «cmake ../»
$ cmake ../
— The C compiler identification is GNU 5.4.0
— The CXX compiler identification is GNU 5.4.0
— Check for working C compiler: /usr/bin/cc
— Check for working C compiler: /usr/bin/cc — works
— Detecting C compiler ABI info
— Detecting C compiler ABI info — done
— Detecting C compile features
— Detecting C compile features — done
— Check for working CXX compiler: /usr/bin/c++
— Check for working CXX compiler: /usr/bin/c++ — works
— Detecting CXX compiler ABI info
— Detecting CXX compiler ABI info — done
— Detecting CXX compile features
— Detecting CXX compile features — done
— Build type not specified: defaulting to release.
— Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)

— #############################################
— ## Begin configuration for Python support…
— #############################################
— Enabling optional Python bindings if possible…
— Found SWIG: /usr/bin/swig3.0 (found version «3.0.8»)
— SWIG_FOUND: TRUE — 3.0.8
— Found PythonInterp: /usr/bin/python (found version «2.7.12»)
— PYTHONINTERP_FOUND: TRUE — 2.7.12
— PYTHON_EXECUTABLE: /usr/bin/python
— PYTHON_INSTALL_DIR: ${prefix}/lib/python2.7/dist-packages
— Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython2.7.so (found version «2.7.12»)
— PYTHONLIBS_FOUND: TRUE — 2.7.12
— PYTHON_INCLUDE_DIRS: /usr/include/python2.7
— PYTHON_LIBRARIES: /usr/lib/x86_64-linux-gnu/libpython2.7.so
— Performing Test SIZE_T_IS_UNSIGNED_INT
— Performing Test SIZE_T_IS_UNSIGNED_INT — Failed
— CMAKE_SWIG_FLAGS=-c++;-threads

— #############################################
— ## Begin configuration for Python3 support…
— #############################################
— Enabling optional Python3 bindings if possible…
— SWIG_FOUND: TRUE — 3.0.8
— Found Python3Interp: /usr/bin/python3
— Could NOT find Python3InterpDbg (missing:  PYTHON3_DBG_EXECUTABLE)
— PYTHON3INTERP_FOUND: TRUE
— PYTHON3_EXECUTABLE: /usr/bin/python3
— PYTHON3_INSTALL_DIR: ${prefix}/lib/python3/dist-packages
— Could NOT find Python3Libs (missing:  PYTHON3_LIBRARIES PYTHON3_INCLUDE_DIRS)
— PYTHON3LIBS_FOUND: FALSE
— PYTHON3_INCLUDE_DIRS: PYTHON3_INCLUDE_DIR-NOTFOUND
— PYTHON3_LIBRARIES: PYTHON3_LIBRARY-NOTFOUND

— ######################################################
— ## SoapySDR enabled features
— ######################################################

* Library , runtime library v0.6.0-g5e823fc1
* Tests , library unit tests
* Python , python bindings v2.7.12

— ######################################################
— ## SoapySDR disabled features
— ######################################################

* Docs , doxygen documentation
* Python3 , python3 bindings

— SoapySDR version: v0.6.0-g5e823fc1
— ABI/so version: v0.6-dev
— Install prefix: /usr/local
— Configuring done
— Generating done
— Build files have been written to: /storage/Temp/SoapySDR/build

6. Компилируем при помощи команды «make»

$ make
Scanning dependencies of target SoapySDR
[  3%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Device.cpp.o
[  6%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Factory.cpp.o
[  9%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Registry.cpp.o
[ 12%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Types.cpp.o
[ 15%] Building CXX object lib/CMakeFiles/SoapySDR.dir/NullDevice.cpp.o
[ 18%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Logger.cpp.o
[ 21%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Errors.cpp.o
[ 24%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Formats.cpp.o
[ 27%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Modules.cpp.o
[ 30%] Building CXX object lib/CMakeFiles/SoapySDR.dir/Version.cpp.o
[ 33%] Building CXX object lib/CMakeFiles/SoapySDR.dir/TypesC.cpp.o
[ 36%] Building CXX object lib/CMakeFiles/SoapySDR.dir/ModulesC.cpp.o
[ 39%] Building CXX object lib/CMakeFiles/SoapySDR.dir/VersionC.cpp.o
[ 42%] Building CXX object lib/CMakeFiles/SoapySDR.dir/DeviceC.cpp.o
[ 45%] Building CXX object lib/CMakeFiles/SoapySDR.dir/FactoryC.cpp.o
[ 48%] Building CXX object lib/CMakeFiles/SoapySDR.dir/LoggerC.cpp.o
[ 51%] Building CXX object lib/CMakeFiles/SoapySDR.dir/TimeC.cpp.o
[ 54%] Building CXX object lib/CMakeFiles/SoapySDR.dir/ErrorsC.cpp.o
[ 57%] Building CXX object lib/CMakeFiles/SoapySDR.dir/FormatsC.cpp.o
[ 60%] Linking CXX shared library libSoapySDR.so
[ 60%] Built target SoapySDR
Scanning dependencies of target SoapySDRUtil
[ 63%] Building CXX object apps/CMakeFiles/SoapySDRUtil.dir/SoapySDRUtil.cpp.o
[ 66%] Building CXX object apps/CMakeFiles/SoapySDRUtil.dir/SoapySDRProbe.cpp.o
[ 69%] Building CXX object apps/CMakeFiles/SoapySDRUtil.dir/SoapyRateTest.cpp.o
[ 72%] Linking CXX executable SoapySDRUtil
[ 72%] Built target SoapySDRUtil
Scanning dependencies of target TestTimeConversion
[ 75%] Building CXX object tests/CMakeFiles/TestTimeConversion.dir/TestTimeConversion.cpp.o
[ 78%] Linking CXX executable TestTimeConversion
[ 78%] Built target TestTimeConversion
Scanning dependencies of target TestFormatParser
[ 81%] Building CXX object tests/CMakeFiles/TestFormatParser.dir/TestFormatParser.cpp.o
[ 84%] Linking CXX executable TestFormatParser
[ 84%] Built target TestFormatParser
Scanning dependencies of target TestKwargsMarkup
[ 87%] Building CXX object tests/CMakeFiles/TestKwargsMarkup.dir/TestKwargsMarkup.cpp.o
[ 90%] Linking CXX executable TestKwargsMarkup
[ 90%] Built target TestKwargsMarkup
[ 93%] Swig source
Scanning dependencies of target _SoapySDR
[ 96%] Building CXX object python/CMakeFiles/_SoapySDR.dir/SoapySDRPYTHON_wrap.cxx.o
[100%] Linking CXX shared module _SoapySDR.so
[100%] Built target _SoapySDR

7. Устанавливаем собранное командой «sudo make install»
$ sudo make install
[sudo] пароль для igor:
[ 60%] Built target SoapySDR
[ 72%] Built target SoapySDRUtil
[ 78%] Built target TestTimeConversion
[ 84%] Built target TestFormatParser
[ 90%] Built target TestKwargsMarkup
[100%] Built target _SoapySDR
Install the project…
— Install configuration: «Release»
— Installing: /usr/local/share/cmake/SoapySDR/SoapySDRConfig.cmake
— Installing: /usr/local/share/cmake/SoapySDR/SoapySDRUtil.cmake
— Installing: /usr/local/share/cmake/SoapySDR/SoapySDRConfigVersion.cmake
— Up-to-date: /usr/local/include/SoapySDR
— Installing: /usr/local/include/SoapySDR/Version.h
— Installing: /usr/local/include/SoapySDR/Modules.hpp
— Installing: /usr/local/include/SoapySDR/Config.h
— Installing: /usr/local/include/SoapySDR/Time.hpp
— Installing: /usr/local/include/SoapySDR/Types.h
— Installing: /usr/local/include/SoapySDR/Types.hpp
— Installing: /usr/local/include/SoapySDR/Version.hpp
— Installing: /usr/local/include/SoapySDR/Formats.hpp
— Installing: /usr/local/include/SoapySDR/Modules.h
— Installing: /usr/local/include/SoapySDR/Formats.h
— Installing: /usr/local/include/SoapySDR/Device.hpp
— Installing: /usr/local/include/SoapySDR/Logger.h
— Installing: /usr/local/include/SoapySDR/Errors.h
— Installing: /usr/local/include/SoapySDR/Registry.hpp
— Installing: /usr/local/include/SoapySDR/Logger.hpp
— Installing: /usr/local/include/SoapySDR/Device.h
— Installing: /usr/local/include/SoapySDR/Time.h
— Installing: /usr/local/include/SoapySDR/Errors.hpp
— Installing: /usr/local/include/SoapySDR/Constants.h
— Installing: /usr/local/include/SoapySDR/Config.hpp
— Installing: /usr/local/lib/libSoapySDR.so.0.6.0
— Up-to-date: /usr/local/lib/libSoapySDR.so.0.6-dev
— Up-to-date: /usr/local/lib/libSoapySDR.so
— Installing: /usr/local/lib/pkgconfig/SoapySDR.pc
— Installing: /usr/local/bin/SoapySDRUtil
— Set runtime path of «/usr/local/bin/SoapySDRUtil» to «»
— Installing: /usr/local/share/man/man1/SoapySDRUtil.1
— Installing: /usr/local/lib/python2.7/dist-packages/_SoapySDR.so
— Set runtime path of «/usr/local/lib/python2.7/dist-packages/_SoapySDR.so» to «»
— Installing: /usr/local/lib/python2.7/dist-packages/SoapySDR.py

8. Приступаем к установке драйвера-прослойки. Переходим в начальный каталог (у меня это /storage/Temp), и получаем исходный код SoapyHackRF
$ cd /storage/Temp/
$ git clone https://github.com/pothosware/SoapyHackRF.git
Клонирование в «SoapyHackRF»…
remote: Counting objects: 257, done.
remote: Total 257 (delta 0), reused 0 (delta 0), pack-reused 257
Получение объектов: 100% (257/257), 49.82 KiB | 0 bytes/s, готово.
Определение изменений: 100% (170/170), готово.
Проверка соединения… готово.

9. Заходим в SoapyHackRF
$ cd SoapyHackRF/

10. Как и в прошлый раз, создаем каталог «build«, заходим в него, и выполняем команду «cmake ../»
$ mkdir build
$ cd build/
$ cmake ../
— The CXX compiler identification is GNU 5.4.0
— Check for working CXX compiler: /usr/bin/c++
— Check for working CXX compiler: /usr/bin/c++ — works
— Detecting CXX compiler ABI info
— Detecting CXX compiler ABI info — done
— Detecting CXX compile features
— Detecting CXX compile features — done
— Build type not specified: defaulting to release.
— Found PkgConfig: /usr/bin/pkg-config (found version «0.29.1»)
— Found LIBHACKRF: /usr/lib/x86_64-linux-gnu/libhackrf.so
— LIBHACKRF_INCLUDE_DIR — /usr/include/libhackrf
— LIBHACKRF_LIBRARIES — /usr/lib/x86_64-linux-gnu/libhackrf.so
— Performing Test HAS_STD_CXX11
— Performing Test HAS_STD_CXX11 — Success
— Configuring done
— Generating done
— Build files have been written to: /storage/Temp/SoapyHackRF/build

11. Устанавливаем драйвер
$ sudo make install
[sudo] пароль для igor:
Scanning dependencies of target HackRFSupport
[ 20%] Building CXX object CMakeFiles/HackRFSupport.dir/HackRF_Registation.cpp.o
[ 40%] Building CXX object CMakeFiles/HackRFSupport.dir/HackRF_Settings.cpp.o
[ 60%] Building CXX object CMakeFiles/HackRFSupport.dir/HackRF_Streaming.cpp.o
/storage/Temp/SoapyHackRF/HackRF_Streaming.cpp: In member function ‘virtual void SoapyHackRF::releaseReadBuffer(SoapySDR::Stream*, size_t)’:
/storage/Temp/SoapyHackRF/HackRF_Streaming.cpp:734:22: warning: unused variable ‘data’ [-Wunused-variable]
SoapyHackRFStream * data = (SoapyHackRFStream*)stream;
^
/storage/Temp/SoapyHackRF/HackRF_Streaming.cpp: In member function ‘virtual void SoapyHackRF::releaseWriteBuffer(SoapySDR::Stream*, size_t, size_t, int&, long long int)’:
/storage/Temp/SoapyHackRF/HackRF_Streaming.cpp:793:22: warning: unused variable ‘data’ [-Wunused-variable]
SoapyHackRFStream * data = (SoapyHackRFStream*)stream;
^
[ 80%] Building CXX object CMakeFiles/HackRFSupport.dir/HackRF_Session.cpp.o
[100%] Linking CXX shared module libHackRFSupport.so
[100%] Built target HackRFSupport
Install the project…
— Install configuration: «Release»
— Installing: /usr/local/lib/SoapySDR/modules0.6-dev/libHackRFSupport.so
— Set runtime path of «/usr/local/lib/SoapySDR/modules0.6-dev/libHackRFSupport.so» to «»

12. Теперь нам надо проверить работу драйвера. Подключите HackRF к компьютеру, перейдите в начальный каталог, и выполните команду «SoapySDRUtil —probe=»driver=hackrf»»

$ cd /storage/Temp/
$ SoapySDRUtil —probe=»driver=hackrf»
######################################################
## Soapy SDR — the SDR abstraction library
######################################################

Probe device driver=hackrf
[INFO] Opening HackRF device instance {device=HackRF One, driver=hackrf, part_id=a000cb3c00584f5e, serial=000000000000000015d463dc186ca825, version=2014.08.1}…

—————————————————-
— Device identification
—————————————————-
driver=HackRF
hardware=HackRF One
clock source=internal
part id=a000cb3c00584f5e
serial=000000000000000015d463dc186ca825
version=2014.08.1

—————————————————-
— Peripheral summary
—————————————————-
Channels: 1 Rx, 1 Tx
Timestamps: NO
Other Settings:
* Antenna Bias — Antenna port power control.
[key=bias_tx, default=false, type=bool]

—————————————————-
— RX Channel 0
—————————————————-
Full-duplex: NO
Supports AGC: NO
Stream formats: CS8, CS16, CF32, CF64
Native format: CS8 [full-scale=128]
Stream args:
* Buffer Count — Number of buffers per read.
[key=buffers, units=buffers, default=15, type=int]
Antennas: TX/RX
Full gain range: [0, 116] dB
LNA gain range: [0, 40] dB
VGA gain range: [0, 62] dB
AMP gain range: [0, 14] dB
Full freq range: [0, 7250] MHz
RF freq range: [0, 7250] MHz
Sample rates: [1, 20] MHz
Filter bandwidths: [1.75, 28] MHz

—————————————————-
— TX Channel 0
—————————————————-
Full-duplex: NO
Supports AGC: NO
Stream formats: CS8, CS16, CF32, CF64
Native format: CS8 [full-scale=128]
Stream args:
* Buffer Count — Number of buffers per read.
[key=buffers, units=buffers, default=15, type=int]
Antennas: TX/RX
Full gain range: [0, 61] dB
VGA gain range: [0, 47] dB
AMP gain range: [0, 14] dB
Full freq range: [0, 7250] MHz
RF freq range: [0, 7250] MHz
Sample rates: [1, 20] MHz
Filter bandwidths: [1.75, 28] MHz

Как видите, наш HackRF был успешно опознан. Значит остался последний шаг.

13. Собираем GnuRadio блоки Osmocom c поддержкой SoapySDR. Сборка выполняется так же как и описано ранее здесь, в части описывающей установку gr-osmosdr. Единственное предупреждение  — если перед установкой у вас уже был установлен gr-osmocom в системе, удалите его командой «sudo apt-get remove gr-osmosdr».
После запуска команды «cmake ../» в её выводе должно быть указано, что система сборки обнаружила библиотеки SoapyHackRf, и их поддержка будет доступна.
— ######################################################
— # Gnuradio enabled components
— ######################################################
— * Python support
— * Osmocom IQ Imbalance Correction
— * FUNcube Dongle
— * FUNcube Dongle Pro+
— * IQ File Source & Sink
— * RTLSDR TCP Client
— * HackRF & rad1o Badge
— * RFSPACE Receivers
— * SoapySDR support
— * Red Pitaya SDR

— ######################################################
— # Gnuradio disabled components
— ######################################################
— * sysmocom OsmoSDR
— * Osmocom RTLSDR
— * Ettus USRP Devices
— * Osmocom MiriSDR
— * nuand bladeRF
— * AIRSPY Receiver

Теперь у нас есть установленный драйвер SoapyHackRf, и в следующих статьях мы наладим работу в режиме трансивера с помощью GnuRadio.

HackRF как трансивер: Часть 1. Установка SoapySDR: 17 комментариев

  1. Федор

    У кого не встали дрова — не совокупляйтесь лишний раз, ставьте по инструкции разраба на Github. У меня по инструкции в статье не взлетел.

    1. Igor Автор записи

      А на каком шаге моей инструкции возникла проблема? И какая у вас система?

  2. Александр

    gggg@gggg-VirtualBox:~$ cd /storage/Temp/
    bash: cd: /storage/Temp/: Нет такого файла или каталога
    ???

    1. Igor Автор записи

      А у вас просто отсутствует каталог /storage/Temp 🙂
      Используйте вместо этого ваш домашний каталог:
      cd ~/
      И далее по инструкции

      1. Александр

        $ cd~/storage/Temp/
        bash: cd~/storage/Temp/: Нет такого файла или каталога

        не выходит

  3. Igor Автор записи

    1) Рекомендую прочесть какую-нибудь книжку начального уровня про Linux
    2) cd /storage/Temp — означает что я перемещаюсь в корневой каталог «/», затем в нем в каталог «storage», и уже затем внутри него в подкаталог «Temp»
    Обратите внимание, что я написал «cd ~/» а не «cd~/storage/Temp/».
    «cd ~» означает «переместиться в домашний каталог». В вашем случае я виджу что имя пользователя «gggg», следовательно путь для домашнего каталога будет «/home/gggg/».
    Вам надо выполнить команду «cd ~/», и вы окажетесь в каталоге «/home/gggg/», где и будете в дальнейшем выполнять все действия. И следовательно все мои «/storage/Temp» будут для вас «/home/gggg/»

  4. Александр

    понятно все
    но вот проверка 12 пункт не получатся
    gggg@gggg-VirtualBox:~$ SoapySDRUtil —probe=»driver=hackrf»
    SoapySDRUtil: error while loading shared libraries: libSoapySDR.so.0.6-dev: cannot open shared object file: No such file or directory
    gggg@gggg-VirtualBox:~$

  5. Александр

    gggg@gggg-VirtualBox:~/SoapyHackRF/build$ sudo make install
    [sudo] пароль для gggg:
    [100%] Built target HackRFSupport
    Install the project…
    — Install configuration: «Release»
    — Up-to-date: /usr/local/lib/SoapySDR/modules0.6-dev/libHackRFSupport.so
    сейчас все пошло и 11 пункт вчера не выполнялся , просто интернет отключен был??!!!
    12 тож все ок.
    gggg@gggg-VirtualBox:~$ SoapySDRUtil —probe=»driver=hackrf
    ######################################################
    ## Soapy SDR — the SDR abstraction library
    ######################################################

    Usage SoapySDRUtil [options]
    Options summary:
    —help Print this help message
    —info Print module information
    —find[=»driver=foo,type=bar»] Discover available devices
    —make[=»driver=foo,type=bar»] Create a device instance
    —probe[=»driver=foo,type=bar»] Print detailed information
    —check[=driverName] Check if driver is present

    Rate testing options:
    —args[=»driver=foo»] Arguments for testing
    —rate[=stream rate Sps] Rate in samples per second
    —channels[=»0, 1, 2″] List of channels, default 0
    —direction[=RX or TX] Specify the channel direction

    gggg@gggg-VirtualBox:~$
    спасибо буду дальше ковырять.

    1. Igor Автор записи

      К сожалениию нет. 🙁 Если смогу где-нибудь раздобыть USRP — обязательно напишу.

  6. Алексей

    Доброе время суток.
    Если кто -нибудь устанавил GNU radio на Windows (в моем случае 8-ка х64) и пользуется hackrf, откликнитесь.
    Буду признателен!

  7. Алексей

    aleksei@aleksei-Aspire-V3-571G:~/air$ SoapySDRUtil —probe=»driver=hackrf
    ######################################################
    ## Soapy SDR — the SDR abstraction library
    ######################################################

    Usage SoapySDRUtil [options]
    Options summary:
    —help Print this help message
    —info Print module information
    —find[=»driver=foo,type=bar»] Discover available devices
    —make[=»driver=foo,type=bar»] Create a device instance
    —probe[=»driver=foo,type=bar»] Print detailed information
    —check[=driverName] Check if driver is present

    Rate testing options:
    —args[=»driver=foo»] Arguments for testing
    —rate[=stream rate Sps] Rate in samples per second
    —channels[=»0, 1, 2″] List of channels, default 0
    —direction[=RX or TX] Specify the channel direction
    как я понял что-то пошло не так? До этого была проблема:
    aleksei@aleksei-Aspire-V3-571G:~/air$ SoapySDRUtil —probe=»driver=hackrf»
    SoapySDRUtil: error while loading shared libraries: libSoapySDR.so.0.6: cannot open shared object file: No such file or directory
    почитав комментарии помогло aleksei@aleksei-Aspire-V3-571G:~/air$ sudo ldconfig.
    Установлена ubuntu 17.04 64 разряд.

    1. aleksandr

      ну вы хоть читайте что машина пишет в ответ и маны, наверху в тексте в команде
      SoapySDRUtil —probe=»driver=hackrf» , перед probe — должно стоять!!!!

      1. aleksandr

        два минуса!! тут это превращается в длинную палку какуюто

        Usage SoapySDRUtil [options]
        Options summary:
        —help Print this help message
        —info Print module information
        —find[=»driver=foo,type=bar»] Discover available devices
        —make[=»driver=foo,type=bar»] Create a device instance
        —probe[=»driver=foo,type=bar»] Print detailed information

  8. Сергей

    Всё круто, но много автор о(у)пустил и поэтому ошибки, если идти по инструкции, то на некоторых этапах будут ошибки.
    К примеру

    автор пишет

    SoapySDRUtil —probe=»driver=hackrf»
    а в реале
    SoapySDRUtil —probe=»driver=hackrf»

    Это важные моменты для новичков. Если уж писать доку, то писать правильно и без ошибок!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *