# 利用Linux小主机和SDR搭建APRS iGate | Code The World
导言APRS网络中的设备在通过无线电发送APRS信标后，只有附近的设备才能接受到内容。而如果要接入到全球的APRS-IS网络，分享自己的实时位置。则需要附近部署APRS iGate，通俗地讲就是一个APRS的数据网关，负责接收、解码、上传附近无线电波中的APRS数据包。 而APRS常用的频率144.640MHz属于VHF段，受到建筑物遮挡的影响非常大，看似近在咫尺的网关却因为一栋大楼的遮挡无法收到
Author: Bigsk
Keywords: 技术

## Code The World

Codice est quasi poem a.

# 利用Linux小主机和SDR搭建APRS iGate

- 2024-11-25
- 作者 Bigsk
- ~4.26K 字

本文最后编辑于 前，其中的内容可能需要更新。

## 导言

APRS网络中的设备在通过无线电发送APRS信标后，只有附近的设备才能接受到内容。
而如果要接入到全球的APRS-IS网络，分享自己的实时位置。
则需要附近部署APRS iGate，通俗地讲就是一个APRS的数据网关，负责接收、解码、上传附近无线电波中的APRS数据包。

而APRS常用的频率144.640MHz属于VHF段，受到建筑物遮挡的影响非常大，看似近在咫尺的网关却因为一栋大楼的遮挡无法收到你的信标。
所以我们要积极部署更多的iGate，才能在城市中达到更好的效果。
而正常的iGate设备价格常常不菲，故想到利用便宜的SDR+大量洋垃圾Linux小主机来搭建自己的iGate。

## 正文

### 准备措施

#### 一、准备硬件

博主测试了以下两种方案：

1. 玩客云Onecloud（30元）+ RTL2832u/FC0012 SDR（60元）
2. 树莓派1B（60元）+ RTL2832u/FC0012 SDR（60元）

此处更推荐使用玩客云，成本更低，运行稳定，性能更高，缺点是需要一定的动手能力来刷写系统。
因树莓派刷写系统过于简单，本文不做介绍，只对Onecloud的刷写系统步骤做教程。

其中SDR目前有以下几种架构方案：

调谐芯片厂家型号 | 频率范围 | 备注
--- | --- | ---
Elonic E4000 | 52-2200MHz | 已停产
Rafael Micro R820T2 | 24-1766MHz | 已停产，常见为蓝色电视棒
Refeal Micro R828D | 24-1766MHz | 与R820T2同构，常见为RTL-SDR Blog V4
Refeal Micro R860 | 24-1766MHz | 与R828D同构
Fitipower FC0013 | 22-1100MHz |
Fitipower FC0012 | 22-948.6MHz | 便宜，常见为黑色电视棒 很多奸商当820T2卖
FlipChip International FC 2580 | 146-308MHz |

对于搭建APRS iGate，推荐购买Fitipower FC0012调谐器的SDR，成本会更低廉。
如要购买其他方案，请注意留意对应的频率范围，必须包含当地的APRS频率到工作频率范围内。

天线可以自信选购，注意对应波段的增益性能，增益越高效果越好。
比较廉价的固定天线方案是吸盘+HH-509F车载玻璃钢，顶配配置Diamond X510。
而使用手台天线，可以考虑RH770拉杆天线，V段增益也来到了3dBi，相当不错。
注意，大部分SDR使用的天线接口为MCX（例如电视棒），可能需要购买MCX-SMA或MCX-UHF的转接头/转接馈线。

#### 二、安装系统

准备一把镊子，一条USB公对公或TypeC对TypeA的数据线（前提是你的电脑有C口，没错，C口接电脑）

下载好以下文件资料：

1. Armbian镜像 GitHub下载
2. Amlogic USB Burning Tool 下载

打开刷写工具，选择下载好的Armbian镜像，我这里下载的镜像是：Armbian-unofficial_24.5.0-trunk_Onecloud_jammy_current_6.6.21_minimal.burn。
给玩客云断电，拆开外壳，将USB一头连接到电脑，一头连接到远离网口的USB口，利用镊子短接对应的触电，插电开机。
直到听到电脑响起有设备接入的提示音后放开镊子，点击软件的开始刷写，然后等待完成，断开USB线，断电重启即可。

短接要求：

V1.1：

V1.3:

#### 三、安装软件

SSH链接主机，请使用ROOT用户进行以下的操作。

1. 安装基础环境：

    1
    2
    3
    4

    # 更新软件包
    apt update
    # 安装软件
    apt install git build-essential cmake automake libasound2-dev libudev-dev alsa-utils -y

2. 安装RTL-SDR软件：

    1

    apt install libusb-1.0-0-dev rtl-sdr -y

3. 拉取Direwolf软件源代码并编译

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    cd ~
    # 从GitHub拉取代码
    git clone https://www.github.com/wb2osz/direwolf
    # 如果连不上GitHub，可以从我的镜像拉取
    #git clone https://git.ghink.net/Mirrors/direwolf
    cd direwolf
    mkdir build
    cd build
    cmake -DUNITTEST=1 ..
    make -j4
    make test
    make install
    make install-conf

请静待编译完成，玩客云大概需要20分钟，树莓派1B大概在1个小时左右

4. 创建配置文件

`nano /root/direwolf.conf`

输入以下内容：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 输入设备：监听UDP的7355端口，这样比较省资源且不会出现报错情况。
    # 输出设备：因为APRS网关只接收信标，不发射，所以没有输出设备，null即是空。
    ADEVICE udp:7355 null
    # 呼号及SSID，10代表互联网网关设备。
    MYCALL BD8CMN-10
    # APRS-IS服务器使用APRS.ICU提供的国内节点，可以自己改成别的
    IGSERVER china.aprs.icu
    # APRS-IS认证呼号-SSID及Passcode，可去tools.ianxia.com生成。
    IGLOGIN BD8CMN-10 XXXXX
    # 网关自身信标，让其他人知道你的APRS iGate处于工作状态。
    # every为自身信标上报间隔时间，lat和long为经纬度，comment为说明信息。
    PBEACON sendto=IG delay=1 every=1 symbol=/r lat=30.61999N long=120.57413E freq="" comment="Tongxiang APRS iGate 144.390MHz"

Ctrl+O回保存，Ctrl+X退出

5. SDR频偏ppm值测量

`rtl_test -p`

执行命令后等待10分钟以上，等晶振工作温度稳定时，输出的“cumulative PPM”值会趋于恒定，此时就可得出SDR的频偏值。

6. 测试运行

将SDR插入小主机并运行如下命令：

`rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -`

命令原理就是：rtl_fm监听144.640MHz频点（25是以上测得的频偏ppm值，根据实际填写）,
并将收到的信号用管道符传递给Direwolf，Direwolf通过配置文件direwolf.conf中的规则将解码后的信标内容上传至APRS-IS服务器。
确认无报错后按Ctrl+C结束命令运行。

7. 创建黑名单文件

`nano /etc/modprobe.d/rtlsdr.conf`

写入下列信息：

`blacklist dvb_usb_rtl28xxu`

Ctrl+O回保存，Ctrl+X退出

8. 创建开机启动

部分新的Linux系统没有rc.local文件了，不用管，先用编辑器尝试修改：

`nano /etc/rc.local`

如果显示是创建新文件，说明是新版本Linux，先不用管，写入以下信息：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&
    exit 0

如果文件已经存在内容，只写入以下内容：

    1
    2

    rtl_fm -f 144.390M -p 25 - | direwolf -c /root/direwolf.conf -r 24000 -D 1 -&
    exit 0

注意，启动命令中的参数请自行修改成上述测试命令中的自己的参数。

Ctrl+O回保存，Ctrl+X退出

为其赋予运行权限：

`chmod +x /etc/rc.local`

如果上述文件是新创建的，请接着看，否则重启你的设备，网关就已经搭建好了。

接下来我们创建系统服务：

`vim /etc/systemd/system/rc-local.service`

写入以下内容：

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    [Unit]
     Description=/etc/rc.local Compatibility
     ConditionPathExists=/etc/rc.local

    [Service]
     Type=forking
     ExecStart=/etc/rc.local start
     TimeoutSec=0
     StandardOutput=tty
     RemainAfterExit=yes
     SysVStartPriority=99

    [Install]
     WantedBy=multi-user.target

按ESC，:wq回车保存退出

激活服务：

`systemctl enable rc-local.service`

启动服务：

`systemctl start rc-local.service`

大功告成！可以用以下命令查看运行输出：

`systemctl status rc-local.service`

END

### 可以在追踪网站上搜索 BD8CMN-10 查看博主方案效果

##### 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可

Codice est quasi poem a.

文章 25 分类 3 标签 3

#### 分类目录

- 技术 16
- 摄影 7
- 资源 2

#### 标签聚合

技术 摄影 资源

#### 最新文章

利用Linux小主机和SDR搭建APRS iGate Python证书链出问题导致的模块全部报错 Mac安装软件时提示已损坏的解决办法 摄影作品：Field Python 中关于 round 函数的小坑