Архив метки: hackrf
Анонс: доклад «Технология SDR: радиоотмычка XXI века» 14 мая
14 мая я выступлю с докладом «Технология SDR: радиоотмычка XXI века» на нижегородском DEF CON. Все интересующиеся могут получить дополнительную информацию на сайте http://defcon-nn.ru/
HackRF как трансивер: Часть 4. Переключение между приемом и передачей
По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на HackRF нас отделяет лишь отсутсвие возможности переключиться с приема на передачу быстро. Давайте исправлять это упущение!
Включаем часть схемы ответственной за прием, которую мы временно выключили в прошлой части.
HackRF как трансивер: Часть 3. Передача NBFM
В прошлой статье мы успешно собрали NBFM приемник на HackRF. Теперь соберем передатчик.
Выделите все блоки на схеме кроме переменных, и нажмите кнопку «D» чтобы отключить их.
Схема передатчика еще проще чем схема приемника. Вот она:
HackRF как трансивер: Часть 2. Приём NBFM
HackRF как трансивер: Часть 1. Установка SoapySDR
Наконец появилось время писать статейки. Ну что же, поехали!
Приобретал я HackRF с прицелом использовать его как трансивер без границ, с возможностью вещать в эфире на любой частоте и любой модуляции. И вот HackRF в моих руках, принимает и передает данные с помощью блока OsmoSDR. Здорово! Ну что же, соберем граф с трансивером. Кидаем на схему блоки «osmocom Sink» и «osmocom Source», жмем кнопку «Run» и… Получаем облом и кучу ошибок при запуске! Почему? Все просто, блоки пытаются независимо открыть устройство на примем и передачу одномоментно , но HackRf, по природе своей может одномоментно работать либо на прием, либо на передачу. Проблема, однако.
Я начинаю усердно гуглить, и нахожу людей столкнувшихся с той же проблемой. Решений на тот момент не существовало. Печаль. И я отложил эту проблему, надеясь что сообщество пользователей GnuRadio и HackRF как-то решит ее в итоге.
И вот, прошой осенью я решил посмотреть что нового.
И ура, наконец нашлись смелые люди что победили ее, написав драйвер-прослойку между Oscmocom блоками и драйвером HackRF.
Перед Новым Годом меня спросили на Radioscanner.Ru, можно ли как-то заставить работать HackRF трансивером? И я решил написать эту статью с подробными инструкциями.
Читать далее
Как открыть HackRF One
Решил написать, как открыть пластмассовый корпус HackRf дабы добраться до платы. А то по незнанию я уже чуток повредил корпус. Не повторяйте моих ошибок 😉
Итак, как его открыть его аккуратно.
Нужно всего лишь открутить фиксирющие гайки на антенном входе, и входах синхронизации.
И осторожно надавливая на бока (там 3 пластиковые защелки) открыть корпус.
Обзор HackRf One: Часть 2 Настройка софта
Мы подключили HackRf к ноутбуку, и увидели что он определяется корректно. Настала пора разобраться с программной частью. Для начала нам нужно установить ПО для HackRf. К счастью все необходимое ПО уже имеется в репозитории Ubuntu. Посмотрим что там есть.
igor@ghost64:~$ apt-cache search hackrf
gqrx-sdr — Software defined radio receiver
hackrf — Software defined radio peripheral
libhackrf-dev — Software defined radio peripheral
libhackrf0 — Software defined radio peripheral
gqrx — Software defined radio receiver
gr-osmosdr — Gnuradio blocks from the OsmoSDR project
Давай разберемся кто есть кто.
hackrf — утилиты для взаимодействия с приемником
libhackrf0 — библиотека для поддержки управления HackRf сторонними приложениями
libhackrf-dev — пакет содержащий заголовочные файлы, и прочие вещи, необходимые нам, если мы сами захотим скомпилировать какую-нибудь программу с поддержкой HackRf
Нам потребуется это все. Устанавливаем ПО командой:
$ sudo apt-get install hackrf libhackrf0 libhackrf-dev
Посмотрим что за утилиты мы установили. Пакет hackrf содержит следующие программы:
hackrf_info — вывод информации о устройстве.
hackrf_spiflash — программа для обновления прошивки в контроллере
hackrf_cpldjtag — программа для обновления прошивки в CLPD микросхеме.
hackrf_transfer — многофункциональная программа для передачи/приема данных
hackrf_max2837, hackrf_rffc5071, hackrf_si5351c — насколько я понял, данные программы служат для модификаций значений регистров в микросхемах. Возможно они нужны для разработиков прошивок в отладочных целях.
Запустим уже что-нибудь? 🙂 Что попроще, к примеру hackrf_info
$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0x00584f5e 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825
Вся информация о оборудовании как на ладони. Наиболее полезное тут для нас это Firmware Version. Сейчас в HackRf прошита самая последняя версия 2014.08.1. Проверять наличие новых прошивок нужно тут http://sourceforge.net/projects/hackrf/files/
Если в результате запуска команды вы получили ошибку:
hackrf_open() failed: HACKRF_ERROR_NOT_FOUND (-5)
то причины могут быть в следующем:
1. Отсутствие прав доступа к USB устройствам у текущего пользователя.
Проверить это можно запустив утилиту hackrf_info от имени root пользователя. Если от имени рута программа успешно считывает информацию с HackRf, а от пользователя не хочет, то значит проблема с правами. Исправить это можно, написав правило для udev
Создайте файл /etc/udev/rules.d/52-hackrf.rules , и впишите в него следующие правила:
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»604b», SYMLINK+=»hackrf-jawbreaker-%k»
, MODE=»660″, GROUP=»plugdev»
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»6089″, SYMLINK+=»hackrf-one-%k», MODE=
«660», GROUP=»plugdev»
ATTR{idVendor}==»1fc9″, ATTR{idProduct}==»000c», SYMLINK+=»hackrf-dfu-%k», MODE=
«660», GROUP=»plugdev»
Сохраните файл, и либо перезагрузите компьютер, либо перезапустите демон udev командой udevadm control --reload-rules
. Как вы уже догадались, этими тремя правилами мы задаем для устройств с определенными VendorID и ProductID права доступа 660, и доступ членам группы plugdev.
2. Другая причина — устаревшая версия программ и библиотек для HackRf
HackRf One поддерживается ПО версии 2014.04.1 и новее. Может получиться так, что в репозитории окажется старая версия ПО. Проверить версию установленного ПО в Debian/Ubuntu можно при помощи команды apt-cache show hackrf
Вот небольшая иллюстрация.
Ноут с Ubuntu 14.04 LTS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION=»Ubuntu 14.04.2 LTS»
В репозитории — устаревший софт.
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 120
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2013.07.1.16.d5cebd-2 — с этой версией жизни нет!
Depends: libhackrf0 (= 2013.07.1.16.d5cebd-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2013.07.1.16.d5cebd-2_i386.deb
Size: 29708
MD5sum: e4e8542460419a3c0e577dbd6f26ffe9
SHA1: 777ef6d304f2c5606d755291dc123c7c800ab42e
SHA256: 3200d2819cf3f67614f3dd1d2b81fe7adb5443be89e577d0499ae464ab931b21
А вот другой ноут с относительно свежей системой
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION=»Ubuntu 14.10″
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 124
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2014.04.1-2 — тут в репозитории свежая версия.
Depends: libhackrf0 (= 2014.04.1-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2014.04.1-2_i386.deb
Size: 26718
MD5sum: 2658d15c2d09328049850cc41fb4e643
Выхода из этой ситуации два: либо ждать когда обновят софт в репозитории (ждать этого можно вечно 😉 ) или собрать свежий софт самому.
Собираем его так:
1. Ставим нужный для сборки софт
sudo apt-get install build-essential cmake libusb-1.0-0-dev
2. Удаляем неактуальный софт.
sudo apt-get remove hackrf libhackrf-dev libhackrf0
3. Получаем свежие версии исходников:
git clone https://github.com/mossmann/hackrf.git
4. Идем в папку host
cd hackrf/host/
5. Выполняем следующие команды
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
6. Теперь попытаемся выполнить команду hackrf_info (если у вас на эту команду bash выругался что-то вроде «команда не найдена», то просто откройте новое терминальное окно, и выполните в нем)
$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0xa000cb3c 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825
Ура! Работает!
Итак, софт мы поставили, и оборудование успешно определяется. Настала пора попробовать использовать HackRf как источник сигнала в GnuRadio.
Поддержку HackRf в GnuRadio обеспечивает OsmoSDR source (тот самый, что используется для работы с RTL донглами). Даже если у вас он уже был установлен ранее, то его надо будет пересобрать для поддержки HackRF. Сборка выполняется по инструкции из этой статьи . При сборке следует обратить внимание на вывод команды cmake. В ней он указывает какие компоненты он обнаружил и активировал. Запись о HackRF должна присутствовать в разделе «gr-osmosdr enabled components»
— ######################################################
— # gr-osmosdr enabled components
— ######################################################
— * Python support
— * FUNcube Dongle
— * IQ File Source
— * Osmocom RTLSDR
— * RTLSDR TCP Client
— * HackRF Jawbreaker
— * RFSPACE Receivers
После пересборки/установки OsmoSDR можно попробовать проверить работу HackRF с GnuRadio послушав FM станции с помощью графа приемника fm_radio_rx.grc Не забудьте поменять в этом графе частоту семплирования с 5 миллионов, до 8 (минимально поддерживаемую HackRF)
Вот как-то так оно работает. Не следует удивляться уровню сигнала, так как это принималось все квартире на антенну от Baofeng. 🙂
Обзор HackRf One: Часть 1 Распаковка и подключение.
Наступила весна. Солнышко начало пригревать, запели птички. И помимо этих чудесных вещей случилось долгожданное событие — ко мне приехал заказаный перед Новым Годом HackRf! Он попал ко мне в руки буквально пару часов назад, и мне нетерпится поиграть с ним. Пока — распаковка и обзор. Открываем волшебную коробочку!