☰
Ubuntu下HackRF One环境搭建:GNU Radio与Gqrx完整配置指南
2026/10/6 13:20:20 网站建设 项目流程

把一块HackRF One插到Ubuntu上,再装好GNU Radio和Gqrx,听起来就是几条命令的事,实际操作起来却有不少小坑:udev权限、软件源版本、驱动工具链、固件匹配、USB口供电,任何一个环节没处理好,都会让人卡在“看起来很简单”的门口。我最近刚帮人装了两台机器,一台22.04、一台24.04,把整套流程完整走了一遍,今天把过程整理出来,给想入坑软件无线电(SDR)的朋友当个路线图。

HackRF One 是性价比很高的开源SDR硬件,覆盖1MHz到6GHz,既能接收也能发射,配合 Ubuntu 上的 GNU Radio 做信号处理、Gqrx 做图形化接收,基本覆盖了从“看频谱”到“解调FM广播”到“写自定义信号处理流图”的完整链路。这篇文章适合三类人:刚拿到HackRF One不知道怎么动手的新手、准备从Windows切换到Linux的老玩家,以及想系统搭建一套可复用的SDR开发环境的嵌入式工程师。

1. 先理清需求:这套环境到底是干什么的

1.1 HackRF One 的核心参数与定位

HackRF One 是 Great Scott Gadgets 推出的开源硬件SDR,很多人叫它“半双工小钢炮”。它的核心参数是频率范围1MHz到6GHz、瞬时带宽20MHz,ADC/DAC精度8bit,USB 2.0高速接口,整体架构是 LPC43xx 主控 + MAX2837 射频基带 + RFFC5072 混频器。因为全部参数和原理图都开源,所以社区资料非常丰富,几乎你能想到的无线电应用都有现成案例。

这里要特别说明一下“半双工”的含义:HackRF One 在同一时刻只能接收或者发射,不能像对讲机全双工那样边收边发。所以很多入门教材会把它和 RTL-SDR 对比,RTL-SDR 只能接收而且频率上限低一些,HackRF One 的优势是频率范围宽、能发射,调试信号处理和协议分析更方便。对于绝大多数信号接收实验,比如听航空波段、看广播频谱、解调寻呼信号、抓遥控器信号,这个硬件足够用了。

1.2 软件栈构成:Ubuntu、GNU Radio、Gqrx 各管什么

整套环境的软件层是分层协作的关系。最底层是操作系统 Ubuntu,主要负责USB驱动、设备权限和基础运行库;中间一层是硬件访问库 libhackrf 和 gr-osmosdr,libhackrf 负责直接和HackRF One通信,gr-osmosdr 则是 GNU Radio 与各种SDR硬件之间的适配桥;再往上是 GNU Radio 框架本身,它是一个开源信号处理开发平台,用图形化的 GNU Radio Companion(GRC)拖拽模块就能搭出信号处理链路;最上层就是 Gqrx,一个基于 Qt 的图形化SDR接收机,打开就能看频谱、调频率、解调广播。

理解这层关系非常关键,因为你会发现,很多报错其实发生在“适配层”。有时候 Gqrx 打不开设备,不是 Gqrx 坏了,而是 libhackrf 版本太老;有时候 GNU Radio 找不到硬件模块,不是硬件有问题,而是缺 gr-osmosdr 这个桥接层。

1.3 为什么选 Ubuntu 而不是 Windows 或 macOS

我个人折腾过 Windows 版本,也用过 macOS 装 HackRF 工具,最后还是固定在 Ubuntu 上。原因有三点:第一,开源社区的主战场就在 Linux,几乎所有的 SDR 工具和教程都默认你用的是 Ubuntu 系,遇到报错最容易搜到答案;第二,Linux 下的权限模型让USB设备管理很直观,一条 udev 规则就能搞定权限,Windows 要装 Zadig 替换驱动,稍不注意就蓝屏;第三,GNU Radio 在 Linux 上的安装和维护成本明显更低,apt 源里直接有编译好的包,不需要自己折腾 Visual Studio 和大量 DLL 依赖。

当然,如果你只是偶尔玩一下接收,Windows 也不是不行,但如果你想认真做信号分析,或者自己写解调算法,Ubuntu 几乎是必经之路。本文以 Ubuntu 22.04 LTS 为例,24.04 基本通用,只有个别软件包版本号略有差异。

2. 先把 Ubuntu 基础环境收拾干净

2.1 系统安装与软件源优化

如果你还没有装 Ubuntu,建议直接选择 22.04 LTS,因为 apt 软件源里自带的 GNU Radio 已经是 3.10 版本,功能完整、坑少。装好后第一件事是更新系统,老规矩:

sudo apt update sudo apt upgrade -y

如果网络条件一般,可以顺手把软件源替换成镜像源。这一步不是必须的,但实测对于 apt 安装那些动辄几百MB的开发包,速度差异非常明显。替换源之后记得再次执行 sudo apt update,让系统刷新包索引。

更新完系统,顺便确认一下用户名。这里有个坑:很多人默认用了安装系统时创建的用户,但后来切到了 root 或新建了别的用户,结果设备权限配置半天不对。后面的所有操作我都建议老老实实用一个有 sudo 权限的普通用户,不要全程 root,权限方面会省很多麻烦。

2.2 安装编译工具链与核心依赖库

即使你打算全程用 apt 安装软件,我也强烈建议先把编译工具链装好。因为后面不管是升级 HackRF 固件、手动编译某个 GNU Radio 模块,还是编译 gr-osmosdr,都需要这些基础依赖:

sudo apt install -y build-essential cmake git pkg-config sudo apt install -y libusb-1.0-0-dev libfftw3-dev sudo apt install -y libboost-all-dev python3-dev swig

libusb 是 HackRF 工具链直接依赖的USB访问库,libfftw3 是快速傅里叶变换库,GNU Radio 和 Gqrx 的频谱显示都要用到。boost 和 swig 是以后源码编译 GNU Radio 模块时经常碰到的依赖,提前装好能避免各种“fatal error: boost/xxx.hpp not found”的尴尬。

这一步看起来不起眼,但它决定了后面所有安装是否顺利。我自己遇到过一台干净系统直接 apt install gnuradio 看着是成功了,但一编译外部模块就缺 boost,最后只能回头补装。

2.3 用户组与 udev 规则:设备权限的关键

Linux 默认不允许普通用户直接访问 USB 设备,HackRF One 插入后,你需要一条 udev 规则把设备的访问权限开放给普通用户。否则你会遇到很典型的报错:hackrf_info 提示 "usb_claim_interface failed",或者 Gqrx 里根本看不到设备。

先看设备是否被识别,插上 HackRF One 后执行:

lsusb

正常会看到一行ID 1d50:6089 OpenMoko, Inc. hackrf_one。看到这行说明USB枚举没问题,剩下就是权限问题。

添加 udev 规则:

sudo tee /etc/udev/rules.d/53-hackrf.rules <<'EOF' SUBSYSTEM=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="6089", MODE="0664", GROUP="plugdev" EOF sudo udevadm control --reload-rules sudo udevadm trigger

另外,确保当前用户加入了 plugdev 组:

sudo usermod -aG plugdev $USER

改完组之后要重新登录一次才生效。执行完这些,重新插拔一下 HackRF One,再运行 hackrf_info 就不会有权限报错了。这段规则一定不要跳过,它是后面所有工作的基础。

3. HackRF One 驱动与宿主工具安装

3.1 最省心的 apt 安装方式

Ubuntu 软件源里有打包好的 hackrf 工具,安装非常简单:

sudo apt install -y hackrf libhackrf-dev

执行完就会有一个完整的 hackrf 工具集:hackrf_info(查看设备信息)、hackrf_transfer(收发样本)、hackrf_sweep(频率扫描)、hackrf_spiflash(固件读写)等。apt 方式安装时通常会自动安装 udev 规则,所以如果是第一次装系统,用 apt 最省心。

验证是否装好,命令行插入设备后执行:

hackrf_info

如果输出里有Board ID Number: 2 (HackRF One)和Firmware Version: ...,说明驱动完全正常。这一步成功,后面的 GNU Radio 才算有底子。

3.2 源码编译方式:什么时候需要

大部分用户用 apt 就够了,但有一种情况必须走源码编译:你想用最新版 hackrf 工具,比如官方刚修复了一个 USB 传输 bug,而你手里这台 Ubuntu 的旧版本 apt 包还没更新。另一种情况是你打算开发自己的 hackrf 工具,需要引用最新的 libhackrf 头文件。

源码编译流程:

git clone https://github.com/greatscottgadgets/hackrf.git cd hackrf/host mkdir build && cd build cmake .. make -j$(nproc) sudo make install sudo ldconfig

编译前确认上一章节的基础依赖都齐了。源码编译完成后,udev 规则不会自动装,需要手动复制。在 hackrf/host 目录下或安装文档里找 .rules 文件,复制到 /etc/udev/rules.d/ 并重载,规则内容和前面写的手动规则一致。

3.3 固件查看与升级:注意事项

HackRF One 出厂自带固件,但版本可能偏老。如果你遇到“设备能识别但收发不稳定”的情况,可以优先考虑更新固件。先查版本:

hackrf_info

输出里 Firmware Version 如果明显低于官方最新版本,可以到 HackRF 官方 GitHub Release 页面下载固件 bin 文件。升级前务必先备份当前固件:

hackrf_spiflash -r backup.bin

备份好之后再写入:

hackrf_spiflash -w hackrf_one_usb.bin

写完后重新插拔设备,用 hackrf_info 确认版本。需要提醒的是,固件升级有一定风险,如果中途断电或者USB线松动,可能把板子刷成砖。虽然可以用 MCU 的 DFU 模式救回来,但对新手来说折腾成本很高。我的建议是:只要当前固件能正常工作,就别乱升级,不是越新越好。

4. GNU Radio 安装与第一个接收流图

4.1 三种安装方式怎么选

GNU Radio 有三种常见安装方式,分别是 apt、源码编译和 PyBOMBS。

apt 安装最简单,Ubuntu 22.04 源里默认就是 3.10 版本,功能完整,缺点是比较固定,想自定义某个 OOT 模块需要自己处理源码。源码编译最灵活,能按需裁剪模块,但耗时长,全量编译一次全平台要个把小时,而且依赖处理复杂,不推荐新手。PyBOMBS 是老牌装机工具,理论上能管理多个版本的 GNU Radio,但实际操作中经常碰到 Python 环境冲突,现在已经不是主流。

我的建议非常明确:先 apt 装,装完跑通基础流程。等你确认自己真的需要定制模块了,再上源码编译。

4.2 apt 安装 GNU Radio 和 gr-osmosdr

执行:

sudo apt install -y gnuradio gr-osmosdr

gr-osmosdr 是不得不提的关键模块,它就是 GNU Radio 和 HackRF One 之间的“翻译官”。没有它,你在 GRC 里根本找不到支持 HackRF 的 Source 模块。安装完成后验证版本:

gnuradio-config-info --version python3 -c "from gnuradio import gr; print(gr.version())"

同时确认 osmosdr 模块能被找到:

gnuradio-companion

打开 GRC 后,在模块库右侧搜索 osmosdr,能看到 “osmocom Source” 和 “osmocom Sink”,说明环境已经通了。

4.3 GRC 流图实战:HackRF 频谱显示

第一个实验我建议不要直接解调广播,先看频谱。GRC 里拖出三个模块:

  • osmocom Source:设备参数填hackrf=0,Ch0 频率根据你想看的频段填写,比如 98.5M,Ch0 RF Gain 填 20,Ch0 IF Gain 填 30,采样率 samp_rate 填 8M。
  • QT GUI Frequency Sink:用来显示频谱,FFT Size 填 1024 或 2048。
  • 连接线把 Source 输出连接到 Frequency Sink 输入。

点击运行,如果一切正常,你会看到一个实时跳动的频谱曲线。听FM广播应该在 88M-108M 之间看到明显的强信号峰。如果曲线是一根平线,可能增益太低或者天线没接好。如果程序直接报错说找不到设备,回头检查第三章的权限和驱动。

这一步的意义很大:它说明你的整个信号链已经跑通,HackRF One 的硬件数据经过 libhackrf、gr-osmosdr 进入 GNU Radio,最后被可视化出来。后续不管做解调、解码还是发射实验,都是在图里加模块的问题。

5. Gqrx 安装与 FM 接收实测

5.1 Gqrx 的安装方式

Gqrx 是一个非常友好的图形化SDR接收机,特别适合不想每次都用 GRC 拉模块的人。安装同样走 apt:

sudo apt install -y gqrx-sdr

启动直接在终端输入 gqrx 就行。也可以从 Flathub 装 flatpak 版本,但我更推荐 apt,因为 flatpak 的沙箱权限偶尔会挡掉 USB 设备访问,折腾起来太烦。

5.2 首次启动的硬件配置

第一次打开 Gqrx 会弹出设备配置窗口。在 Device 下拉框里选择 HackRF One,Input Rate 填 8M(也就是8MHz采样率)。这个采样率不是越高越好,采样率越高,数据传输量就越大,电脑CPU占用也越高,8M 是接收FM广播和短波的均衡值。

LNA Gain 是低噪声放大器增益,可以先填 20 到 30,VGA Gain 填 10 左右。这两个值不是越大越好,增益太高会把底噪也放大,反而看不清信号,具体等能看到频谱后再微调。

配置完点 OK,Gqrx 会进入主界面,中间是瀑布图和频谱图,左侧是频率、增益、解调模式控制面板。

5.3 实测:听FM广播

在 Frequency 一栏输入你当地一个已知的广播频率,比如 98.7M,解调模式选择 WBFM(宽带调频),然后把耳机插上。这一步如果没声音,先看频谱上有没有明显信号峰,有峰但没声音,多半是解调带宽设置不对;频谱都是一条平线,那就得检查天线和增益了。

Gqrx 里还有一个很实用的功能——RF Gain 和 IF Gain 分开调节。FM 广播信号强,增益过高会导致音频失真,听到“嗡嗡”声。实测下来,FM 广播场景 LNA 大概 20dB、VGA 10dB 就够,信号强的城市甚至可以更低。接收机玩到后面,你会慢慢体会到增益调节是控制信噪比的核心技巧。

6. 实战验收与问题排查记录

6.1 三分钟快速验收流程

环境搭完后,我习惯用一套“三连”快速确认整套系统可用:

第一步,命令行验证设备连接:

hackrf_info

能读到固件版本就是好。

第二步,用 hackrf_sweep 扫描本地频段,看硬件的 RF 前端是否正常:

hackrf_sweep -f 88:108 -a 20

这个命令会扫描88到108MHz,也就是FM广播频段,输出每个频点的功率值。能扫描出起伏变化的信号,说明接收链路没问题。

第三步,打开 Gqrx 手动收到一个广播电台,确认图形界面和音频输出都没问题。这三步全过,整套环境可以说完全可以用。

6.2 高频问题排查表

我整理了自己和帮别人装机器时遇到频率最高的几个问题,基本都是环境搭建阶段的“拦路虎”。

现象可能原因解决办法
hackrf_info 报权限错误udev 规则没生效或用户不在 plugdev 组重新执行 udev 规则并重载,注销重新登录
Gqrx 里看不到 HackRF 设备设备被其他进程占用关闭残留的 gqrx/hackrf 进程,重新插拔
GNU Radio 里找不到 osmocom 模块没安装 gr-osmosdrsudo apt install gr-osmosdr
频谱显示一条平线天线没接、增益太低或频率设置不覆盖目标信号换天线,增大 RF/IF 增益
FM 广播有信号但没声音解调方式选错或带宽不对切到 WBFM,检查音频输出设备
USB 连接经常断用了 USB Hub 或前置 USB 口改用机箱后置 USB 3.0 接口直连
长时间运行后频率明显漂移散热不良加一片散热片,降低增益或缩短连续运行时间

其中最后两个是长期使用才会遇到的。HackRF One 本身功耗不高,但连续高负载收发时会发热,尤其是夏天,频率漂移会导致接收信号偏移。我个人的习惯是给板子背面贴一块散热片,几十块钱的事,能省很多烦心事。

6.3 环境维护与体验优化建议

这套环境搭好之后,日常使用还有几点值得注意。

USB 接口选择上,尽量插主板后置的 USB 3.0 口,不要插 USB Hub,尤其不要插那种多口供电不足的 Hub。HackRF One 的供电不稳会导致 USB 枚举失败,表现就是时好时坏,查半天查不出原因,最后换了个口就解决了。

系统更新方面,不要盲目 sudo apt upgrade。Linux 内核更新后,个别 USB 驱动行为会变,如果发现设备突然不识别,可以用 dmesg 查看内核日志定位,必要时重启电脑。平时只要系统安全补丁更新就好,没必要每天把整个系统升到最新。

还要记住一点,HackRF One 具备发射能力,但发射实验一定要谨慎。接收 FM 广播、看频谱、解调空中信号这些都是合法且有趣的实验,但如果要做任何发射操作,请务必确认你所在地区的无线电管理规定,在允许的频段、功率内进行。玩 SDR 是求知探索,不是闯祸,这一点从一开始就要清楚。

另外,如果你想进一步玩 ADS-B 飞机信号、气象卫星 LRPT 图像、寻呼机 POCSAG 解码这些场景,这套环境已经全部具备基础能力。后续只是在 GNU Radio 里加不同的解调模块,或者在 Gqrx 里切换解调模式,不用再折腾底层驱动。

我个人在实际使用中最深的体会是:环境搭建本身是一次很好的系统性学习,它逼你把 USB 权限、驱动架构、软件依赖关系都过了一遍。很多人觉得装环境浪费时间,其实这些知识在日后排查任何 USB 设备问题时都用得上。最后再分享一个小习惯:每次装好环境后我会把当时执行的命令和历史报错存成一份 Markdown 笔记,下次换机器或者系统重装,十分钟就能复现整套配置。这比我当初第一次折腾一整个下午要高效太多了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询