YP.Lam | 基于 FRP 实现远程 JLink 调试
  • In JLink
  • /
  • Posted 2024-07-27

基于 FRP 实现远程 JLink 调试

JLink 软件包提供 JLinkRemoteServer,通过监听 19020 端口,为其他调试客户端提供网络远程调试功能,同时官方提供 tunnel 服务,实现跨局域网调试。如果自己有外网服务器,也可以非常简单地通过 FRP 自建 JLink 中转服务。

根据运行 Jlink的环境不同,从官方网站下载对应 deb 安装包,譬如 JLink_Linux_V698e_arm64.deb, JLink_Linux_V698e_x86_64.deb,然后在同一目录编写 Dockerfile :

FROM debian:bookworm-slim

COPY JLink_Linux_V698e_x86_64.deb /tmp
RUN dpkg -i /tmp/JLink_Linux_V698e_x86_64.deb \
  && rm /tmp/JLink_Linux_V698e_x86_64.deb 

EXPOSE 19020
CMD ["/usr/bin/JLinkRemoteServer"]

打包 Docker 镜像 ,建议直接在连接 JLink 的机器上打包。

docker build -t jlink .

FRP 服务器配置

外网 Linux 服务器创建文件 frp/frps.toml

bindAddr = "0.0.0.0"
bindPort = 7000
tls.force = false
auth.method = "token"
auth.token = "N8pUECXOSrXXxS54dRUkXo4KEfjzyluFZzHLwCzq8wU33eM5UdJKwlVD75C6rm78"

然后 Docker 运行

docker run --network host -d -v ./frp:/etc/frp --restart=always snowdreamtech/frps:0.52.3

远程 JLink 通常运行在一些小型的 Linux 主机上,USB 外接 JLink 设备。创建 compose.yaml

services:
  jlink:
    image: jlink:latest
    ports:
      - "19020:19020"
    privileged: true
    devices:
      - /dev/bus/usb:/dev/bus/usb

  frpc:
    image: snowdreamtech/frpc:0.52.3
    volumes:
      - ./frp:/etc/frp

创建 frp/frpc.toml

serverAddr = "x.x.x.x"
serverPort = 7000
loginFailExit = true
auth.method = "token"
auth.token = "N8pUECXOSrXXxS54dRUkXo4KEfjzyluFZzHLwCzq8wU33eM5UdJKwlVD75C6rm78"

transport.tls.enable = false

[[proxies]]
name = "jlink"
type = "tcp"
localIP = "jlink"
localPort = 19020
remotePort = 19020

然后使用docker compose运行

docker compose up

远程调试

本地 JLinkExe 通过 FRP 服务器连接远程 JLink 进行调试:

JLinkExe -if SWD -device EFR32MG21AXXXF768 -speed 1000 -autoconnect 1 -ip x.x.x.x:19020