软件

原文来源:【https://hackrf.readthedocs.io/en/latest/index.html】机器翻译加人工修改,不正之处,请指正!

安装 HackRF 软件

使用包管理器安装

除非为 HackRF 开发或测试新功能,否则我们强烈建议大多数用户使用为其操作系统提供的构建系统或包管理器。我们建议与 HackRF 一起使用的操作系统是 Ubuntu

FreeBSD

您可以使用二进制包:# pkg install hackrf

您还可以从端口构建和安装:

# cd /usr/ports/comms/hackrf
# make install

Linux:Arch

pacman -S hackrf

Linux:Fedora / Red Hat

sudo dnf install hackrf -y

Linux:Gentoo

emerge -a net-wireless/hackrf-tools

Linux:Ubuntu/Debian

sudo apt-get install hackrf

OS X (10.5+):Homebrew

brew install hackrf

OS X(10.5+):MacPorts

sudo port install hackrf

Windows:二进制文件

二进制文件作为 PothosSDR 项目的一部分提供,可在此处下载。


从源安装

Linux / OS X / *BSD:从源代码构建 HackRF 软件

从发布存档或 git获取 HackRF 工具的源代码:git clone https://github.com/mossmann/hackrf.git

下载源代码后,可以按如下方式构建主机工具:

cd hackrf/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

如果您有 HackRF 硬件,您可能需要更新固件以匹配host tools版本。

Windows:Cygwin、MinGW 或 Visual Studio 的预需求

Windows 构建注意事项:您应始终从 Windows 命令 shell 而不是从 Cygwin 或 MinGW shell 执行 hackrf-tools,因为在 Cygwin/MinGW 上 Ctrl+C 未正确管理,尤其是对于 hackrf_transfer,Ctrl+C(中止)将无法正确停止并且会损坏文件。

Windows:通过 Cygwin 安装 HackRF 软件

mkdir host/build
cd host/build
cmake ../ -G "Unix Makefiles" -DCMAKE_LEGACY_CYGWIN_WIN32=1 -DLIBUSB_INCLUDE_DIR=/usr/local/include/libusb-1.0/
make
make install

Windows:通过 MinGW 安装 HackRF 软件

mkdir host/build
cd host/build
cmake ../ -G "MSYS Makefiles" -DLIBUSB_INCLUDE_DIR=/usr/local/include/libusb-1.0/
make
make install

Windows:通过 Visual Studio 2015 x64 安装 HackRF 软件

为 MSVC 创建要链接到的库定义C:\fftw-3.3.5-dll64> lib /machine:x64 /def:libfftw3f-3.def

c:\hackrf\host\build> cmake ../ -G "Visual Studio 14 2015 Win64" \
-DLIBUSB_INCLUDE_DIR=c:\libusb-1.0.21\libusb \
-DLIBUSB_LIBRARIES=c:\libusb-1.0.21\MS64\dll\lib\libusb-1.0.lib \
-DTHREADS_PTHREADS_INCLUDE_DIR=c:\pthreads-w32-2-9-1-release\Pre-built.2\include \
-DTHREADS_PTHREADS_WIN32_LIBRARY=c:\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64\pthreadVC2.lib \
-DFFTW_INCLUDES=C:\fftw-3.3.5-dll64 \
-DFFTW_LIBRARIES=C:\fftw-3.3.5-dll64\libfftw3f-3.lib

CMake 将生成一个名为的解决方案文件HackRF.sln和一系列可以使用 msbuild 构建的项目文件,如下所示:c:\hackrf\host\build> msbuild HackRF.sln

HackRF 和 GNU Radio 入门

我们建议您先观看带有 HackRF 的软件无线电视频系列。本系列将向您介绍 HackRF One,包括 GNU Radio 在内的软件,并教您充分利用软件无线电 (SDR) 功能所需的数字信号处理 (DSP) 基础知识。其他有用的信息如下。

用 Pentoo Linux 试试你的 HackRF

开始使用 HackRF 并确保其正常工作的最简单方法是使用 Pentoo,这是一个完全支持 HackRF 和 GNU Radio 的 Linux 发行版。从http://pentoo.ch/downloads/列出的其中一个镜像下载最新的 Pentoo .iso 映像。然后将 .iso 刻录到 DVD 或使用UNetbootin将 .iso 安装到 USB 闪存驱动器上。使用 DVD 或 USB 闪存驱动器启动计算机以运行 Pentoo。本机执行此操作,而不是在虚拟机中执行。(不幸的是,当人们尝试从虚拟机运行 HackRF 时,高速 USB 操作总是失败。)

Pentoo 运行后,您可以立即使用它来更新HackRF 上的固件或使用其他 HackRF 命令行工具。如需演练,请观看SDR with HackRF,第 5 课:HackRF One

要验证是否检测到您的 HackRF,请hackrf_info在命令行中键入。它应该产生几行输出,包括“Found HackRF board”。3V3、1V8、RF 和 USB LED 都应该亮起,并且颜色各异。

您可以startx在命令行中键入以启动桌面环境。在第一个对话框中接受“默认配置”。桌面环境对于 GNU Radio Companion 和其他图形应用程序很有用,但对于固件更新等基本操作来说并不是必需的。

现在您可以使用 gnuradio-companion 或 gqrx 等程序开始试验您的 HackRF。试试下面的例子。如果您是 GNU Radio 新手,一个很好的起点是SDR with HackRF视频系列或GNU Radio 指导教程

备选方案:GNU Radio Live SDR 环境

GNU Radio Live SDR Environment是另一个不错的可引导 Linux .iso,它支持 HackRF,当然还有 GNU Radio。

软件设置

如上所述,开始使用 HackRF 的最佳方法是使用 Pentoo Linux。最终你可能想要安装软件以在你最喜欢的操作系统上使用 HackRF。

如果您的包管理器包含最新版本的 libhackrf 和 gr-osmosdr,那么除了 GNU Radio 之外,还可以使用它来安装这些包。否则,安装这些工具的推荐方法是使用PyBOMBS

有关在特定操作系统和 Linux 发行版上设置 HackRF 软件的信息,请参阅操作系统提示页面。

如果您遇到任何问题,请确保在引导至 Pentoo 时一切正常。这将使您能够轻松确定您的问题是由硬件还是软件引起的,并且它会让您了解软件应该如何运行。

例子

开始使用 HackRF 的一个好方法是SDR with HackRF视频系列。其他示例如下:

测试 HackRF

  1. 插入 HackRF
  2. 运行 hackrf_info 命令$ hackrf_info

如果一切正常,您应该会看到类似于以下内容的内容:

hackrf_info version: 2017.02.1
libhackrf version: 2017.02.1 (0.5)
Found HackRF
Index: 0
Serial number: 0000000000000000################
Board ID Number: 2 (HackRF One)
Firmware Version: 2017.02.1 (API:1.02)
Part ID Number: 0x######## 0x########

调频收音机示例

此示例源自以下作品:

  1. 在此处下载 FM 收音机接收器 python 文件
  2. 运行文件$ python ./fm_radio_rx.py
  3. 您可以在此处找到 GNU Radio Companion 源文件

HackRF 兼容软件

支持 HackRF 的软件

这是一份已知可与 HackRF 配合使用的软件列表。共有三个部分,基于 GNU Radio 的软件,具有直接支持的软件,以及可以使用来自 HackRF 的数据的软件。

基于 GNU Radio

GNU Radio Mode-S/ADS-B – https://github.com/bistromath/gr-air-modes

GQRX – http://gqrx.dk/

直接支持

SDR#(仅限 Windows)- https://airspy.com/download/

SDR_Radio.com V2 – http://v2.sdr-radio.com/Radios/HackRF.aspx

Universal Radio Hacker (Windows/Linux) – https://github.com/jopohl/urh

QSpectrumAnalyzer – https://github.com/xmikos/qspectrumanalyzer

适用于 Windows 的 hackrf_sweep 的频谱分析仪 GUI – https://github.com/pavsa/hackrf-spectrum-analyzer

Web-based APRS tracker https://xakcop.com/aprs-sdr

可以使用 HackRF 数据

Inspectrum https://github.com/miek/inspectrum

  • 具有高级功能的捕获分析工具

Baudline http://www.baudline.com/(可以查看/处理HackRF数据,eg hackrf_transfer)

HackRF Tools

除了支持 HackRF 的第三方工具外,我们还提供了一些命令行工具来与 HackRF 进行交互。有关如何使用每个工具的信息,请查看提供的帮助信息(例如)或手册页hackrf_transfer -h

  • hackrf_info从 HackRF 中读取设备信息,例如序列号和固件版本。
  • hackrf_transfer使用 HackRF 发送和接收信号。输入/输出文件是 8 位带符号的正交样本。
  • hackrf_sweep,一个命令行频谱分析器。
  • hackrf_clock读写时钟输入输出配置。
  • hackrf_operacake配置连接到 HackRF 的 Opera Cake 天线开关。
  • hackrf_spiflash将新固件写入 HackRF 的工具。请参阅:更新固件
  • hackrf_debug读写寄存器和其他用于调试的低级配置。

处理 HackRF 数据

Matlab

fid = open('samples.bin',  'r');
len = 1000; % 1000 samples
y = fread(fid, 2*len, 'int8');
y = y(1:2:end) + 1j*y(2:2:end);
fclose(fid)

libhackRF API

本文档描述了 libHackRF 提供的函数、数据结构和常量。它应该用作使用 libHackRF 和 HackRF 硬件的参考。

如果您正在编写一个通用的 SDR 应用程序,即不绑定到 HackRF 硬件,我们强烈建议您使用 gr-osmosdr 或 SoapySDR 来为尽可能广泛的软件定义无线电硬件提供支持。

例如,其中许多函数的用法,请参阅hackrf_transfer工具。

设置、初始化和关机

HackRF Init

初始化 libHackRF,包括全局 libUSB 上下文以支持多个 HackRF 硬件设备。

句法: int hackrf_init()

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Open

句法: int hackrf_open(hackrf_device** device)

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Device List

检索附加到系统的 HackRF 设备列表。此函数会查找所有设备,而不管硬件的权限或可用性如何。

句法: hackrf_device_list_t* hackrf_device_list()

返回:指向 hackrf_device_list_t 结构的指针,即附加到系统的 HackRF 设备列表。hackrf_device_list_t 结构的内容在下面的数据结构部分描述。

HackRF Device List Open

从 hackrf_device_list_t 结构中打开并获取设备上的句柄。

语法: int hackrf_device_list_open(hackrf_device_list_t* list, int idx, hackrf_device** device)

参数:

list– 指向由返回的 hackrf_device_list_t 的指针hackrf_device_list()

idx– 要打开的 HackRF 设备的列表索引

device– hackrf_device 指针的输出位置。仅在返回值为 HACKRF_SUCCESS 时有效。

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Device List Free

句法: void hackrf_device_list_free(hackrf_device_list_t* list)

参数:

list– 指向由返回的 hackrf_device_list_t 的指针hackrf_device_list()

HackRF Open By Serial

句法: int hackrf_open_by_serial(const char* const desired_serial_number, hackrf_device** device)

返回:

HackRF Close

句法: int hackrf_close(hackrf_device* device)

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Exit

彻底关闭 libHackRF 和底层 USB 上下文。这不会停止正在进行的传输或关闭 HackRF 硬件。hackrf_close()应该在此之前调用以干净地关闭与硬件的连接。

句法: int hackrf_exit()

返回:来自下面列出的 hackrf_error 常量的值。

使用HackRF收发

HackRF Start Rx

句法: int hackrf_start_rx(hackrf_device*, hackrf_sample_block_cb_fn, void* rx_ctx)

参数:

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Stop Rx

句法: int hackrf_stop_rx(hackrf_device*)

参数:

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Start Tx

句法: int hackrf_start_tx(hackrf_device*, hackrf_sample_block_cb_fn, void* tx_ctx)

参数:

返回:来自下面列出的 hackrf_error 常量的值。

HackRF Stop Tx

句法: int hackrf_stop_tx(hackrf_device*)

参数:

返回:来自下面列出的 hackrf_error 常量的值。

HackRF 设置基带滤波器带宽

句法: int hackrf_set_baseband_filter_bandwidth(hackrf_device*, const uint32_t bandwidth_hz)

参数:

返回:来自下面列出的 hackrf_error 常量的值。

HackRF 计算基带滤波器 BW

根据采样率计算最佳默认值(自动过滤器)。

句法: uint32_t hackrf_compute_baseband_filter_bw(const uint32_t bandwidth_hz)

参数:

返回:无线电使用的 Maxim MAX2837 前端提供的有效基带滤波器宽度。

HackRF 计算基带滤波器 BW Round Down LT

计算 bw 过滤器的最近频率(手动过滤器)

句法: uint32_t hackrf_compute_baseband_filter_bw_round_down_lt(const uint32_t bandwidth_hz)

参数:

返回:无线电使用的 Maxim MAX2837 前端提供的有效基带滤波器宽度。

读写寄存器

这些低级函数仅用于调试目的。

HackRF MAX2837 读取

从 MAX2837 基带 IC 读取寄存器值。

句法: int hackrf_max2837_read(hackrf_device* device, uint8_t register_number, uint16_t* value)

参数:

返回:

HackRF MAX2837写入

将寄存器值写入 MAX2837 基带 IC。

句法: int hackrf_max2837_write(hackrf_device* device, uint8_t register_number, uint16_t value)

参数:

返回:

HackRF Si5351C 读取

从 Si5351C 时钟发生器 IC 读取寄存器值。

句法: int hackrf_si5351c_read(hackrf_device* device, uint16_t register_number, uint16_t* value)

参数:

返回:

HackRF Si5351C 写入

将寄存器值写入 Si5351C 时钟发生器 IC。

句法: int hackrf_si5351c_write(hackrf_device* device, uint16_t register_number, uint16_t value)

参数:

返回:

HackRF RFFC5071 读取

从 RFFC5071 混频器 IC 读取寄存器值。

句法: int hackrf_rffc5071_read(hackrf_device* device, uint8_t register_number, uint16_t* value)

参数:

返回:

HackRF RFFC5071 写入

将寄存器值写入 RFFC5071 混频器 IC。

句法: int hackrf_rffc5071_write(hackrf_device* device, uint8_t register_number, uint16_t value)

参数:

返回:

更新固件

HackRF CPLD 写入

固件在正常操作期间(自 2021.03.1 版起)将比特流写入 CPLD。此函数将比特流写入 CPLD 的闪存,这对于正常使用来说不是必需的。在 hackrf_cpld_write 之后,需要通过物理按下重置按钮来重置设备。

句法: int hackrf_cpld_write(hackrf_device* device, unsigned char* const data, const unsigned int total_length)

参数:

返回:

HackRF SPI 闪存擦除

句法: int hackrf_spiflash_erase(hackrf_device* device)

参数:

返回:

HackRF SPI 闪存写入

句法: int hackrf_spiflash_write(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* const data)

参数:

返回:

HackRF SPI 闪存读取

句法: int hackrf_spiflash_read(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* data)

参数:

返回:

董事会标识符

HackRF 板 ID 读取

句法: int hackrf_board_id_read(hackrf_device* device, uint8_t* value)

参数:

返回:

HackRF 版本字符串读取

句法: int hackrf_version_string_read(hackrf_device* device, char* version, uint8_t length)

参数:

返回:

HackRF 电路板部件 ID 序列号读取

句法: int hackrf_board_partid_serialno_read(hackrf_device* device, read_partid_serialno_t* read_partid_serialno)

参数:

返回:

杂项

HackRF 错误名称

句法: const char* hackrf_error_name(enum hackrf_error errcode)

参数:

返回:

HackRF 板 ID 名称

句法: const char* hackrf_board_id_name(enum hackrf_board_id board_id)

参数:

返回:

HackRF USB 板 ID 名称

句法: const char* hackrf_usb_board_id_name(enum hackrf_usb_board_id usb_board_id)

参数:

返回:

HackRF 过滤路径名称

句法: const char* hackrf_filter_path_name(const enum rf_path_filter path)

参数:

返回:

数据结构

typedef struct hackrf_device hackrf_device

typedef struct {
        hackrf_device* device;
        uint8_t* buffer;
        int buffer_length;
        int valid_length;
        void* rx_ctx;
        void* tx_ctx;
} hackrf_transfer;
typedef struct {
        uint32_t part_id[2];
        uint32_t serial_no[4];
} read_partid_serialno_t;
typedef struct {
        char **serial_numbers;
        enum hackrf_usb_board_id *usb_board_ids;
        int *usb_device_index;
        int devicecount;

        void **usb_devices;
        int usb_devicecount;
} hackrf_device_list_t;

typedef int (*hackrf_sample_block_cb_fn)(hackrf_transfer* transfer)

枚举

支持的板版本

这些值标识所连接硬件的板类型。该值可用作能力指标,例如频率范围、带宽或天线端口供电。

Board频率范围采样率天线端口供电
HackRF One1 MHz–6 GHz20 Msps支持
Jawbreaker10 MHz–6 GHz20 Msps
rad1o50 MHz–4 GHz20 Msps
JellybeanN/A20 Msps

大多数开发板将标识为 HackRF One、Jawbreaker 或 rad1o。Jellybean 是 HackRF 的预生产版本,不再受支持。任何硬件设备都不应故意使用无法识别或未检测到的板 ID 来报告自己。

enum hackrf_board_id {
        BOARD_ID_JELLYBEAN  = 0,
        BOARD_ID_JAWBREAKER = 1,
        BOARD_ID_HACKRF1_OG = 2,
        BOARD_ID_RAD1O = 3,
        BOARD_ID_HACKRF1_R9 = 4,
        BOARD_ID_UNRECOGNIZED = 0xFE,
        BOARD_ID_UNDETECTED = 0xFF,
};

USB 产品 ID

enum hackrf_usb_board_id {
        USB_BOARD_ID_JAWBREAKER = 0x604B,
        USB_BOARD_ID_HACKRF_ONE = 0x6089,
        USB_BOARD_ID_RAD1O = 0xCC15,
        USB_BOARD_ID_INVALID = 0xFFFF,
};

收发模式

HackRF 可以在四种主要的收发器模式下运行:接收、传输、信号源和扫描。还有一种 CPLD 更新模式,用于将固件映像写入 CPLD 闪存。

hackrf_set_transceiver_mode收发器模式可以通过将值参数设置为以下之一来更改:

enum transceiver_mode_t {
        HACKRF_TRANSCEIVER_MODE_OFF = 0,
        HACKRF_TRANSCEIVER_MODE_RECEIVE = 1,
        HACKRF_TRANSCEIVER_MODE_TRANSMIT = 2,
        HACKRF_TRANSCEIVER_MODE_SS = 3,
        TRANSCEIVER_MODE_CPLD_UPDATE = 4,
        TRANSCEIVER_MODE_RX_SWEEP = 5,
};

接收模式 (TRANSCEIVER_MODE_RX) 用于将样本从无线电传输到主机系统。用于hackrf_set_freq设置接收机的中心频率和hackrf_set_sample_rate设置采样率(有效带宽)。

传输模式 (TRANSCEIVER_MODE_TX) 用于将样本从主机流式传输到无线电。

有关设置传输和接收模式以及通过 USB 传输数据的示例,请参见hackrf_transfer 。

函数返回值

射频滤波器路径

enum rf_path_filter {
        RF_PATH_FILTER_BYPASS = 0,
        RF_PATH_FILTER_LOW_PASS = 1,
        RF_PATH_FILTER_HIGH_PASS = 2,
};

hackrf_sweep

用法

[-h] # this help
[-d serial_number] # Serial number of desired HackRF
[-a amp_enable] # RX RF amplifier 1=Enable, 0=Disable
[-f freq_min:freq_max] # minimum and maximum frequencies in MHz
[-p antenna_enable] # Antenna port power, 1=Enable, 0=Disable
[-l gain_db] # RX LNA (IF) gain, 0-40dB, 8dB steps
[-g gain_db] # RX VGA (baseband) gain, 0-62dB, 2dB steps
[-w bin_width] # FFT bin width (frequency resolution) in Hz, 2445-5000000
[-1] # one shot mode
[-N num_sweeps] # Number of sweeps to perform
[-B] # binary output
[-I] # binary inverse FFT output
-r filename # output file

输出字段

date, time, hz_low, hz_high, hz_bin_width, num_samples, dB, dB, ...

运行给出以下示例结果:hackrf_sweep -f 2400:2490

日期时间赫兹低赫兹高赫兹区间宽度样本数D bD bD bD bD b
2019-01-0311:57:34.967805240亿24050000001000000.0020-64.72-63.36-60.91-61.74-58.58
2019-01-0311:57:34.967805241亿24150000001000000.0020-69.22-60.67-59.50-61.81-58.16
2019-01-0311:57:34.9678052405000000241亿1000000.0020-61.19-70.14-60.10-57.91-61.97
2019-01-0311:57:34.967805241500000024200000001000000.0020-72.93-79.14-68.79-70.71-82.78
2019-01-0311:57:34.967805242000000024250000001000000.0020-67.57-61.61-57.29-61.90-70.19
2019-01-0311:57:34.967805243亿24350000001000000.0020-56.04-59.58-66.24-66.02-62.12

整个指定频率范围内的每次扫描都被赋予一个时间戳。

第五列告诉您每个频率bin的宽度(以 Hz 为单位)(在本例中为 1 MHz),您可以使用 进行设置-w。第六列是为生成该行数据而分析的样本数。

剩余的每一列都显示了在几个频率仓中的每一个中检测到的功率。在这种情况下,有五个频段,第一个从 2400 到 2401 MHz,第二个从 2401 到 2402 MHz,依此类推。

发表回复 0

Your email address will not be published. Required fields are marked *