simple-admin/ADB-Usage-cn.md
2024-12-07 22:11:37 +08:00

28 KiB
Raw Blame History

Quectel 调制解调器 Wiki

=================================

⚠️ 这是一个动态文档。随着更多发现的出现或社区软件的开发内容可能会更新。如果您觉得有信息可以贡献给这个wiki请提交pull request。

✔️ 本wiki主要关注Quectel的M.2规格蜂窝调制解调器。

M.2调制解调器直连以太网指南

许多Quectel调制解调器支持直接连接到PCIe以太网芯片组。这对于将蜂窝连接用作WAN接口很有用 - 您只需将调制解调器插入路由器的WAN端口进行一些配置就可以使用了。性能良好调制解调器的板载连接管理通常比许多路由器使用的脚本更好地保持连接。

目录

QuecDeploy和调制解调器资源

建议您查看我的 RM520N-GL资源库

有一个自动安装程序.cmd文件它会为您安装Windows所需的所有内容并放在正确的位置。使用.cmd后请查看C:/Quectel/firmware文件夹中的固件。

那里还有一个Windows固件刷写指南

还有一个Windows下的AT命令使用指南

硬件推荐

我们实际上是将调制解调器置于PCIe Root Complex模式以便通过PCIe使用以太网芯片组。您需要一个带有M.2 B-Key插槽的板子具有电源、以太网、SIM卡槽和USB功能并且需要一种方式为调制解调器的4个MHF4连接器提供蜂窝信号。

室内

以下是我推荐用于室内或移动场景的硬件:

rework-5G2PHYmain

enter image description here

购买链接:

不含调制解调器: Dual-Q 5G2PHY

或者

带x62 RM520N-GLAP版本修改/转换为普通AA。 预装自定义Arixolink固件如果您想要Simpleadmin 2.0,请刷入最新的官方固件) Dual-Q 5G2PHY-RM520

包含:

  • 主板和外壳
  • 40cm USB3.0 A转Micro B线缆
  • 2x 10cm MHF4转SMA线缆
  • 2x 15cm MHF4转SMA线缆
  • 1x 3x3.5x0.15 硅胶垫
  • 1x 3x3x0.02 硅胶垫
  • 安装硬件
  • 板载RTL8125芯片组的小型散热片

不包含:

  • 电源适配器
  • 无源PoE注入器/适配器
  • 天线

主要特点:

  • 2.5千兆RTL8125单RJ45端口
  • 支持无源PoE我使用24v无源注入器
    • ⚠️ 主动PoE如802.11将不工作 ⚠️ 因为它不进行协商
  • USB 3.0
  • 5.5x2.5mm DC端口接受12-50V的宽电压范围
  • 内置的厚铝制散热片放置在调制解调器下方,并延伸到板子下方,即使在重负载下也能保持良好的散热
  • M.2插槽靠近板子边缘的位置方便访问调制解调器背面的触点以防需要进入EDL模式

室外

(正在完善中) 目前仅提供链接 😄 https://www.rework.network/collections/lte-home-gateway/products/5g-rgm-o

推荐配件

示例配置:

固定场景

GL.iNet Flint 2路由器室内调制解调器

移动场景

结果: :trollface:

基本配置

建议在继续之前先刷入最新的可用固件。

查看我的RM520资源库

请记住:

刷新固件会执行以下操作:

  • 两种方法的IPPT都会恢复为默认关闭状态
  • AT+QMAPWAC=1会恢复为AT+QMAPWAC=0关闭自动连接 发送AT+QMAPWAC=1并重启来修复这个问题。如果您之前解锁并启用了adb也可以通过adb这样做
adb shell "echo -e 'AT+QMAPWAC=1 \r' > /dev/smd7"
adb shell reboot
  • 通过/通过adb shell安装的自定义软件/服务将被移除。您可以使用我的组合安装程序重新安装Telnet守护程序、Simple Admin和每日重启功能

首次设置

通过USB连接到调制解调器并在Qnavigator中运行这些AT命令。如果您没有Qnavigator或其他发送AT命令的方式请查看我的RM520资源库

AT+QCFG="data_interface",0,0
AT+QETH="eth_driver","r8125",1
AT+QCFG="pcie/mode",1
AT+QCFG="usbnet",1  #[如果您因为某些原因需要处于不同的USB模式请记住发送AT+QMAPWAC=1]
AT+QMAPWAC=1  #[在ECM模式下可选因为这会自动发生]
AT+CGDCONT=1,"IPV4V6","在此处填写apn"
任何其他您想运行的用于正确蜂窝连接的*魔法*命令
AT+QPRTPARA=1 [可选]
AT+CFUN=1,1

这些命令的作用:

  • AT+QCFG="data_interface"通过PCIe和USB配置网络端口/诊断端口通信。第一个参数用于网络通信0表示USB1表示PCIe。第二个参数用于诊断端口只有0选项表示USB。请注意即使在PCIe网络模式下USB端口仍然可用于连接。似乎调制解调器会使用不同的APN配置从运营商请求第二个IP地址。在2023-07-31 AT文档的第41/42页中有一个命令应该可以启用在同一APN上使用。RM520N-GL资源库中有相关说明。当然如果您的运营商允许为SIM卡/线路分配第二个IP应该都能正常工作。我需要进一步研究这个问题。
  • AT+QETH="eth_driver","r8125",1这配置了在模块启动时要加载的以太网驱动程序。这是RTL8125以太网芯片组的正确驱动程序。您可以运行AT+QETH="eth_driver"来获取选项列表;我相信只能启用一个。第一个参数是驱动程序名称,第二个参数是布尔值,用于启用或禁用。
  • AT+QCFG="pcie/mode"1 = RCRoot Complex即主机。0 = EPEndpoint用于具有RC的设备中
  • AT+QCFG="usbnet",1USB ECM模式下的NIC数据呼叫方法。1=ECM以太网控制模型内部即使没有物理以太网端口可用调制解调器也会在这种模式下设置自己来维持连接。了解ECM的工作原理就知道为什么了。
  • AT+QMAPWAC启用或禁用移动AP自动拨号0=禁用 1=启用(重启生效)。您可以运行AT+QMAPWAC?来获取当前保存/设置的值。我的发现将其视为通用自动连接设置。如果设置为0无线电会连接或者会吗以便您可以看到信号统计但不会从运营商获取IP地址。在大多数USB模式下除了ECM完成该过程取决于连接的设备。如果设置为1它将在注册到网络后始终请求IP。
  • AT+CGDCONT设置APN命令。运行AT+CGDCONT可以查看APN配置文件1到8的设置。要清除APN只需发送=和要清除的配置文件号码。例如如果我想清除APN配置文件1我会发送AT+CGDCONT=1。要设置APN您需要指定配置文件号码、协议IPV4、IPV6或IPV4V6表示两者都用然后是APN。例如如果我想将APN 1设置为APNGOESHERE并同时使用IPV4和IPV6我会发送AT+CGDCONT=1,"IPV4V6","APNGOESHERE"
    • 注意您的APN将根据SIM卡和调制解调器内置MDM配置文件的了解自动填充。有时您想使用不同于默认使用的APN。通常您可以通过运行命令手动设置它会保持不变。但在某些情况下比如当您从SIM1切换到SIM2然后再切回SIM1或反之时APN会恢复到其MBN配置文件中的设置。运行AT+CGDCONT?来查看。将ICCID锁定到APN的脚本在我的待办列表中。
  • AT+QPRTPARA=1:应该将当前配置保存到内存。虽然不是必需的,但我总是运行它以防万一。

..运行AT+CFUN=1,1调制解调器将重启您应该从以太网端口获得一个本地IP地址。通常是192.168.225.x。

固件刷新后;首次设置后

固件刷新后需要运行这些命令才能重新上线

如果您不在ECM模式下AT+QCFG="usbnet",1则需要先执行以下操作

AT+QMAPWAC=1  
AT+CFUN=1,1重启

运行我的工具包

固件刷新会移除工具包所做的内容:

  • 安装Telnet守护程序
  • 安装Simpleadmin网页界面
  • 安装和配置Tailscale
  • 如果您需要,设置重启定时器
  • 如果您需要发送一两个AT命令

使用AT命令更改调制解调器IP地址

默认情况下调制解调器对IPv4充当真正的NAT路由器并通过IPv6提供地址。调制解调器的IPv4地址是192.168.225.1 - 这可以通过AT命令更改参见第228页AT+QMAP="LANIP"

有很多原因可能需要更改调制解调器的IP..例如您可能有多个调制解调器连接到同一个路由器用于WAN负载均衡或绑定或者它可能与您的内部网络IP范围冲突或者其他原因。在最新的固件版本中可以使用命令来完成这个操作

命令是:

AT+QMAP="LANIP",<dhcp起始>,<dhcp结束>,<路由器ip>,<是否立即应用?>
AT+QMAP="LANIP",192.168.227.20,192.168.227.100,192.168.227.1,1

'是否立即应用?'表示路由器是否应该立即应用更改或等待重启。1表示是0表示否。

## 启用IP透传

如果您想启用IP透传让从运营商分配的IP地址传递给连接到以太网端口的设备您可以做到即使在启用IPPTIP透传的情况下包括网关在内的LAN IP地址仍然可以访问。

**IP透传有3个阶段**

#

### DMZ方法
这种方法严格来说不是真正的IP透传但它也能有效地消除双重NAT。基本上您在这里所做的是将DHCP限制为只分配1个IP地址然后将其设置为DMZ有效地将每个端口转发到该内部IP。

#### 启用IP透传DMZ方法

AT+QMAP="LAN",192.168.225.2 AT+QMAP="DMZ",1,4,192.168.225.2 AT+CFUN=1,1重启

如果"LAN"命令不起作用,则使用"LANIP"来定义起始范围、结束范围、网关,1
使起始范围和结束范围相同
#
### 实际IP透传

这是在[2023-07-31 AT手册](https://github.com/iamromulan/RM520N-GL/blob/main/Documents/Quectel_RG520N&RG525F&RG5x0F&RM5x0N_Series_AT_Commands_Manual_V1.0.0_Preliminary_20230731.pdf)第231页记录的方法

#### 启用IP透传QMAP方法

AT+QMAP="MPDN_rule",0,1,0,1,1,"FF:FF:FF:FF:FF:FF"


发送此命令后以太网端口应该会关闭一两秒钟然后重新启动并启用IPV4透传。注意IPV6有时也会分配这只是DHCP IPV6吗我会研究这个问题。

##### MPDN规则参数
* 第一个 = MPDN规则号码范围0-3除非您在做一些复杂的事情否则您会使用0。[提示:多个数据呼叫规则]
* 第二个 = 要使用的APN配置文件IDCGDCONT。您可能想要使用1。
* 第三个 = VLAN ID。这通常是0但您可以运行`AT+QMAP="VLAN"`来查看应该是什么。
* 第四个 = IPPT模式使用1表示以太网使用0表示禁用AT PDF中有更多模式
* 第五个 = 自动连接。如果设置为0=禁用 1=启用
* 第六个 = 要透传到的MAC地址。`FF:FF:FF:FF:FF:FF`将IP传递给最后连接的以太网设备。`"00:00:00:00:00:00"`将只传递给第一个连接的以太网设备。您也可以指定自定义MAC地址。

##### DHCPV4DNS
打开和关闭IPV4 DNS代理以便运营商的DNS也会透传。
所以...
内部有一个DNS服务器/代理用于通过AT命令设置域名并使其实际工作。通过adb shell/ssh shell有一种方法可以自己设置DNS覆盖到您自己的名称服务器。Tailscale会自动完成这个操作我稍后会讨论这个问题。

AT+QMAP="DHCPV4DNS","disable"

#### 禁用IP透传QMAP方法

AT+QMAP="MPDN_rule",0以太网端口将关闭并重新启动 AT+QMAPWAC=1如果不在ECM模式下 AT+CFUN=1,1重启可选

或者

刷新固件---> 按照[固件刷新后;首次设置后](#固件刷新后首次设置后)的步骤操作

### 在IPPT模式下禁用NAT到VLAN
在启用MDPN规则并打开IPPT后您可以禁用到VLAN0的NAT192.168.225.x地址并进行完全透传除非您不需要/不想要本地访问网关否则我不建议这样做。您应该仍然可以使用Tailscale访问网关地址。

高级配置

这些调制解调器在底层是一个完整的Linux路由器。一旦获得访问权限您可以修改文件系统上的任何内容。这很酷也有点危险..但很有趣。访问是通过'adb'实现的 - 这与用于对Android手机进行有趣操作的工具相同。如果您安装了Tailscale您也可以通过Tailscale使用SSH。我稍后会详细讨论这个问题。

解锁和使用ADB

默认情况下这些调制解调器没有启用通过USB的ADB需要解锁才能启用。一旦解锁除非您禁用它否则它会保持解锁状态。

:bowtie: 感谢carp4qadbkey-unlock python脚本上的工作我们现在可以不需要Quectel的帮助就能做到这一点

要获得访问权限您需要从调制解调器获取锁定代码然后将其提供给python ADB解锁密钥生成器获取它给出的解锁密钥代码解锁ADB然后实际启用通过USB的ADB。这只需要做一次因为这在固件刷新后仍然有效。

要获取锁定代码运行AT命令"AT+QADBKEY?"。调制解调器将回复:

AT+QADBKEY?
+QADBKEY: 12345678
OK

12345678就是这种情况下的锁定代码

然后您可以前往Python ADB解锁密钥生成器

pythonadbkey

用运行AT+QADBKEY?得到的响应替换12345678然后点击运行。在输出下方将生成您的解锁密钥。

获得解锁密钥后,您可以这样应用密钥:

AT+QADBKEY="0jXKXQwSwMxYoeg"

然后要实际启用ADB运行AT+QCFG="usbcfg"取出输出将倒数第二个0改为1然后将新的usbcfg字符串发送到调制解调器不要只是复制/粘贴下面的内容您的调制解调器的USB VID/PID很可能不同

AT+QCFG="usbcfg"
+QCFG: "usbcfg",0x2C7C,0x0801,1,1,1,1,1,0,0 // 初始响应
AT+QCFG="usbcfg",0x2C7C,0x0801,1,1,1,1,1,1,0 // 启用ADB

并使用AT+CFUN=1,1重启以实际应用。


### 使用ADB
:warning: 将很快重新组织
:warning: adb现在已随QFlash 7.1+从QuecDeploy安装
:warning: 已过时

一旦调制解调器重新上线您应该能够使用ADB通过USB连接来管理主机上的调制解调器。在使用之前您需要安装ADB驱动程序和ADB命令行工具。最简单的方法就是使用我的RM520仓库脚本。或者自己动手https://github.com/K3V1991/ADB-and-FastbootPlusPlus/releases

- 下载.exe非便携版

![downloadadb](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/downloadadb.png?raw=true)
- 接受、是、下一步、允许基本上是您想要按的所有按钮。如果您收到这样的安全警告,请点击更多信息

![secerror](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/secerror.png?raw=true)
- 在安装过程中,您一定要选择这些。

![adb1](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/adb1.png?raw=true)
- 最后,确保这些选项如下所示:

![adb2](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/adb2.png?raw=true)
- 之后会打开这样的窗口。

![adb3](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/adb3.png?raw=true)

- 任何时候想使用adb都要打开ADB & Fastboot++

![adbcmd](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/adbcmd.png?raw=true)

> :warning: **调制解调器不需要其他图标/快捷方式。它们对Android手机有用。如果您只需要这个用于Quectel调制解调器可以删除图标/快捷方式**
> 
![enter image description here](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/notneededadb.png?raw=true)

### 基本命令:
在ADB & Fastboot++中输入`adb devices`并按回车。如果您的调制解调器已解锁ADB并通过USB连接列表中应该至少显示一个设备。这是测试adb是否安装并正确识别您的调制解调器或Android手机的好方法。
**示例:**

![adb3](https://github.com/iamromulan/quectel-rgmii-configuration-notes/blob/main/images/adb3.png?raw=true)

- `adb pull /path/to/file` - 从调制解调器下载文件到当前工作目录
- `adb push /path/on/computer /path/on/modem` - 上传文件到调制解调器
- `adb shell` - 远程控制调制解调器上的root linux shell/命令行完成后输入exit注意在shell中运行通常以`adb shell`开头的命令时,需要跳过该部分)
  - 在Quectel调制解调器的adb shell中它会像unix shell一样工作。像`uname -a`这样的命令会显示操作系统名称、处理器类型、构建日期信息等;`ls`会显示文件结构,而`systemctl list-units --type=service --all`会显示所有已安装的服务,无论是否运行。

到目前为止我尝试让ADB通过IP在以太网接口上监听都没有成功。警告 - `adb tcp <port>`命令会使ADB和所有其他通过USB暴露的串行端口崩溃直到调制解调器重启。所以现在坚持使用USB上的ADB。如果有人了解这个设备上adbd是如何工作的请随时打开issue/discussion/PR。现在您可以通过tailscale使用SSH。

Web GUI和工具包

概述

这些调制解调器有一个Web GUI界面可以通过http://192.168.225.1或您设置的任何其他IP访问。它允许您查看状态、设置APN、设置PIN、查看日志等。它还允许您通过Web界面发送AT命令

如何安装

我已经创建了一个工具包它可以自动安装以下所有内容。您只需要在安装后配置Tailscale。

如果您想手动安装,请继续阅读。

Tailscale安装和配置

我已经创建了一个工具包它可以自动安装以下所有内容。您只需要在安装后配置Tailscale。

如果您想要更多信息,请查看Tailscale的文档

  1. Tailscale的GitHub仓库下载最新的arm64版本。
  2. 解压缩下载的文件。
  3. 将tailscale和tailscaled二进制文件上传到调制解调器
adb push tailscale /usr/bin/
adb push tailscaled /usr/sbin/
  1. 使二进制文件可执行:
adb shell chmod +x /usr/bin/tailscale
adb shell chmod +x /usr/sbin/tailscaled
  1. 创建systemd服务文件
adb shell "echo '[Unit]
Description=Tailscale node agent
Documentation=https://tailscale.com
Wants=network-pre.target
After=network-pre.target NetworkManager.service systemd-resolved.service

[Service]
ExecStartPre=/usr/sbin/tailscaled --cleanup
ExecStart=/usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock --port=41641 --tun=userspace-networking
ExecStopPost=/usr/sbin/tailscaled --cleanup

Restart=on-failure

RuntimeDirectory=tailscale
RuntimeDirectoryMode=0755
StateDirectory=tailscale
StateDirectoryMode=0700
CacheDirectory=tailscale
CacheDirectoryMode=0750
Type=notify

[Install]
WantedBy=multi-user.target' > /etc/systemd/system/tailscaled.service"
  1. 创建必要的目录:
adb shell mkdir -p /var/lib/tailscale
adb shell mkdir -p /run/tailscale
  1. 启用并启动服务:
adb shell systemctl daemon-reload
adb shell systemctl enable tailscaled
adb shell systemctl start tailscaled
  1. 登录到您的Tailscale账户
adb shell tailscale up --accept-routes --accept-dns=false --ssh
  1. 访问调制解调器的URL以完成登录过程。

使用Tailscale SSH

一旦您完成了Tailscale的设置您就可以使用ssh root@<tailscale-ip>从任何连接到您的Tailnet的设备访问调制解调器。

禁用Tailscale

要禁用Tailscale您可以

adb shell systemctl stop tailscaled
adb shell systemctl disable tailscaled

卸载Tailscale

要完全卸载Tailscale

adb shell systemctl stop tailscaled
adb shell systemctl disable tailscaled
adb shell rm /usr/bin/tailscale
adb shell rm /usr/sbin/tailscaled
adb shell rm /etc/systemd/system/tailscaled.service
adb shell rm -r /var/lib/tailscale
adb shell rm -r /run/tailscale
adb shell systemctl daemon-reload

每日重启

如果您经常遇到调制解调器需要重启的情况您可以设置一个每日重启计划。这可以通过创建一个systemd服务和计时器来实现。

安装每日重启服务

  1. 创建重启服务文件:
adb shell "echo '[Unit]
Description=Daily modem reboot service

[Service]
Type=oneshot
ExecStart=/sbin/reboot

[Install]
WantedBy=multi-user.target' > /etc/systemd/system/modem-reboot.service"
  1. 创建计时器文件默认为每天凌晨3点重启
adb shell "echo '[Unit]
Description=Daily modem reboot timer

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target' > /etc/systemd/system/modem-reboot.timer"
  1. 启用并启动计时器:
adb shell systemctl daemon-reload
adb shell systemctl enable modem-reboot.timer
adb shell systemctl start modem-reboot.timer

禁用每日重启

要禁用每日重启,您可以:

adb shell systemctl stop modem-reboot.timer
adb shell systemctl disable modem-reboot.timer

卸载每日重启

要完全卸载每日重启服务:

adb shell systemctl stop modem-reboot.timer
adb shell systemctl disable modem-reboot.timer
adb shell rm /etc/systemd/system/modem-reboot.service
adb shell rm /etc/systemd/system/modem-reboot.timer
adb shell systemctl daemon-reload

其他高级功能

设置自定义DNS服务器

您可以通过修改/etc/resolv.conf文件来设置自定义DNS服务器

adb shell "echo 'nameserver 1.1.1.1' > /etc/resolv.conf"

查看系统日志

要查看系统日志,您可以使用以下命令:

adb shell journalctl -f

检查网络连接

要检查网络连接状态,您可以使用以下命令:

adb shell ifconfig
adb shell ip addr
adb shell route -n

查看进程

要查看运行中的进程,您可以使用:

adb shell ps
adb shell top

检查服务状态

要查看所有服务的状态:

adb shell systemctl list-units --type=service

查看系统信息

要查看系统信息:

adb shell uname -a
adb shell cat /proc/cpuinfo
adb shell cat /proc/meminfo

故障排除

常见问题

调制解调器无法连接到网络

  1. 检查SIM卡是否正确插入
  2. 确认APN设置是否正确
  3. 检查信号强度
  4. 尝试重启调制解调器

ADB连接问题

  1. 确保已正确安装ADB驱动程序
  2. 检查USB连接
  3. 确认已解锁ADB并正确配置
  4. 尝试使用不同的USB端口或线缆

IP透传问题

  1. 确认已正确配置MPDN规则
  2. 检查MAC地址设置
  3. 验证VLAN配置
  4. 确保运营商支持IP透传

Tailscale连接问题

  1. 检查Tailscale服务状态
  2. 确认登录状态
  3. 验证网络连接
  4. 检查防火墙设置

有用的调试命令

检查网络状态

adb shell ifconfig
adb shell ip addr
adb shell route -n

查看系统日志

adb shell journalctl -f
adb shell dmesg

检查服务状态

adb shell systemctl status tailscaled
adb shell systemctl status modem-reboot.timer

网络连接测试

adb shell ping 8.8.8.8
adb shell traceroute 8.8.8.8

贡献

欢迎通过以下方式贡献:

  • 报告问题
  • 提交改进建议
  • 创建拉取请求
  • 分享您的经验

许可证

本文档采用MIT许可证。详情请参见LICENSE文件。

致谢

特别感谢:

  • carp4 - 提供ADB解锁工具
  • Quectel社区的所有贡献者
  • 所有帮助测试和改进本文档的用户