OpenIPC开源FPV之重要源码启动配置

1. 源由

在计算机上,程序安装不等于程序启动使用。通常应用软件使用需要通过启动菜单找到程序的启动图标,通过点击操作,打开应用程序。

FPV摄像头默认就是要上电工作,无需过多的人工启动操作。

接下来,我们了解下这些默认源代码都是如何安装和被启动的。

2. 安装

在前面《OpenIPC开源IPC之重要源码包》,已经了解固件最重要的源代码是哪些。

那么接下来就是围绕这个角度,看看软件是如何安装的。

2.1 wfb-ng

define WIFIBROADCAST_INSTALL_TARGET_CMDS
	$(INSTALL) -m 0755 -D $(@D)/wfb_tx $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 0755 -D $(@D)/wfb_tx_cmd $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 0755 -D $(@D)/wfb_rx $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 0755 -D $(@D)/wfb_keygen $(TARGET_DIR)/usr/bin


	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	cp $(WIFIBROADCAST_PKGDIR)/files/wfb_$(WIFIBROADCAST_UNIT).conf $(TARGET_DIR)/etc/wfb.conf
	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
	cp $(WIFIBROADCAST_PKGDIR)/files/wifibroadcast $(TARGET_DIR)/usr/bin


	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	cp $(WIFIBROADCAST_PKGDIR)/files/$(WIFIBROADCAST_UNIT).key $(TARGET_DIR)/etc/$(WIFIBROADCAST_UNIT).key


	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
	cp $(WIFIBROADCAST_PKGDIR)/files/setmcs $(TARGET_DIR)/usr/bin


	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/firmware/ath9k_htc
	cp $(WIFIBROADCAST_PKGDIR)/files/htc_9271.fw.1 $(TARGET_DIR)/lib/firmware/ath9k_htc
	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/firmware/ath9k_htc
	cp $(WIFIBROADCAST_PKGDIR)/files/htc_9271.fw.3 $(TARGET_DIR)/lib/firmware/ath9k_htc
endef
  1. 可执行文件安装

    $(INSTALL) -m 0755 -D $(@D)/wfb_tx $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 0755 -D $(@D)/wfb_tx_cmd $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 0755 -D $(@D)/wfb_rx $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 0755 -D $(@D)/wfb_keygen $(TARGET_DIR)/usr/bin
    
    • 这里将 wfb_txwfb_tx_cmdwfb_rxwfb_keygen 这些可执行文件安装到目标系统的 /usr/bin 目录。
    • -m 0755 设置文件权限为可执行,-D 确保创建所需目录。
  2. 配置文件安装

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    cp $(WIFIBROADCAST_PKGDIR)/files/wfb_$(WIFIBROADCAST_UNIT).conf $(TARGET_DIR)/etc/wfb.conf
    
    • 这里创建了 /etc 目录,并复制了配置文件 wfb_$(WIFIBROADCAST_UNIT).conf/etc/wfb.conf
    • 注意:cp 替代 $(INSTALL),可能导致没有自动处理目标目录不存在的情况,可以优化为使用 $(INSTALL) 完成复制操作。
  3. 额外可执行文件安装

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    cp $(WIFIBROADCAST_PKGDIR)/files/wifibroadcast $(TARGET_DIR)/usr/bin
    cp $(WIFIBROADCAST_PKGDIR)/files/setmcs $(TARGET_DIR)/usr/bin
    
    • 这些命令将 wifibroadcastsetmcs 文件复制到目标的 /usr/bin
  4. 密钥文件安装

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    cp $(WIFIBROADCAST_PKGDIR)/files/$(WIFIBROADCAST_UNIT).key $(TARGET_DIR)/etc/$(WIFIBROADCAST_UNIT).key
    
    • 该命令将密钥文件复制到 /etc/ 目录中。
  5. 固件安装

    $(INSTALL) -m 755 -d $(TARGET_DIR)/lib/firmware/ath9k_htc
    cp $(WIFIBROADCAST_PKGDIR)/files/htc_9271.fw.1 $(TARGET_DIR)/lib/firmware/ath9k_htc
    cp $(WIFIBROADCAST_PKGDIR)/files/htc_9271.fw.3 $(TARGET_DIR)/lib/firmware/ath9k_htc
    
    • 这里是将固件文件 htc_9271.fw.1htc_9271.fw.3 复制到固件目录 lib/firmware/ath9k_htc

2.2 datalink

define DATALINK_INSTALL_TARGET_CMDS
	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	$(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(DATALINK_PKGDIR)/files/datalink.conf
	$(INSTALL) -m 644 $(DATALINK_PKGDIR)/files/telemetry_$(DATALINK_UNIT).conf $(TARGET_DIR)/etc/telemetry.conf


	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
	$(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(DATALINK_PKGDIR)/files/S98datalink


	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(DATALINK_PKGDIR)/files/telemetry
	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(DATALINK_PKGDIR)/files/tweaksys
endef
  1. 创建 /etc 目录并安装配置文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    $(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(DATALINK_PKGDIR)/files/datalink.conf
    $(INSTALL) -m 644 $(DATALINK_PKGDIR)/files/telemetry_$(DATALINK_UNIT).conf $(TARGET_DIR)/etc/telemetry.conf
    
    • 创建 /etc 目录-d 选项确保目标目录存在,权限为 755
    • 安装 datalink.conf:将 datalink.conf 文件从指定目录复制到目标 /etc 目录,权限为 644
    • 安装 telemetry.conf:将 telemetry_$(DATALINK_UNIT).conf 文件复制到目标 /etc,并重命名为 telemetry.conf,权限为 644
  2. 创建 /etc/init.d 目录并安装启动脚本

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
    $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(DATALINK_PKGDIR)/files/S98datalink
    
    • 创建 /etc/init.d 目录:为放置启动脚本准备目录,权限为 755
    • 安装启动脚本:将 S98datalink 文件复制到 /etc/init.d 目录,权限为 755
  3. 创建 /usr/bin 目录并安装可执行文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(DATALINK_PKGDIR)/files/telemetry
    $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(DATALINK_PKGDIR)/files/tweaksys
    
    • 创建 /usr/bin 目录:为安装可执行文件创建目录,权限为 755
    • 安装可执行文件:将 telemetrytweaksys 文件复制到目标 /usr/bin 目录中,权限为 755,允许所有用户执行。

2.3 *mavfwd

define MAVFWD_INSTALL_TARGET_CMDS
    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 0755 -D $(@D)/mavfwd $(TARGET_DIR)/usr/bin/mavfwd


    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/sbin
    cp $(MAVFWD_PKGDIR)/files/channels.sh $(TARGET_DIR)/usr/sbin
endef
  1. 创建 /usr/bin 目录并安装可执行文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 0755 -D $(@D)/mavfwd $(TARGET_DIR)/usr/bin/mavfwd
    
    • 创建 /usr/bin 目录:使用 -d 选项确保目标目录存在,权限为 755(所有者可以读、写、执行,其他用户可以读和执行)。
    • 安装可执行文件mavfwd 可执行文件被复制到目标 /usr/bin 目录,权限为 0755(所有者可以读、写、执行,其他用户可以读和执行)。-D 选项会自动创建目标目录(在这里是冗余的,因为目录已创建)。
  2. 创建 /usr/sbin 目录并安装脚本

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/sbin
    cp $(MAVFWD_PKGDIR)/files/channels.sh $(TARGET_DIR)/usr/sbin
    
    • 创建 /usr/sbin 目录:使用 -d 选项确保目标目录存在,权限为 755
    • 安装 channels.sh 脚本:通过 cp 命令将 channels.sh 文件从指定目录复制到目标 /usr/sbin 目录,权限在这里没有指定,默认保留原文件的权限。

2.4 *mavlink-router

define MAVLINK_ROUTER_INSTALL_TARGET_CMDS
	$(TARGET_MAKE_ENV) DESTDIR=$(TARGET_DIR) ninja -C $(@D)/build install


	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	cp $(MAVLINK_ROUTER_PKGDIR)/files/mavlink_$(MAVLINK_ROUTER_UNIT).conf $(TARGET_DIR)/etc/mavlink.conf


#	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
#	cp $(MAVLINK_ROUTER_PKGDIR)/files/S97mavlink $(TARGET_DIR)/etc/init.d
endef
  1. 构建和安装 MAVLink Router

    $(TARGET_MAKE_ENV) DESTDIR=$(TARGET_DIR) ninja -C $(@D)/build install
    
    • 使用 Ninja 构建系统:这条命令使用 Ninja 工具来构建和安装 MAVLink Router。
    • 设置环境变量$(TARGET_MAKE_ENV) 是一个可能定义了构建环境的变量,用于指定目标系统的环境。
    • 目标目录DESTDIR=$(TARGET_DIR) 指定安装路径。
    • 构建目录-C $(@D)/build 表示切换到构建目录,并执行 install 命令。
  2. 创建 /etc 目录并安装配置文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    cp $(MAVLINK_ROUTER_PKGDIR)/files/mavlink_$(MAVLINK_ROUTER_UNIT).conf $(TARGET_DIR)/etc/mavlink.conf
    
    • 创建 /etc 目录:使用 -d 选项确保目标目录存在,权限为 755
    • 安装配置文件:将 mavlink_$(MAVLINK_ROUTER_UNIT).conf 文件从指定目录复制到目标 /etc 目录,并重命名为 mavlink.conf,权限没有指定(将保持原文件权限)。
  3. 注释的启动脚本安装

    # $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
    # cp $(MAVLINK_ROUTER_PKGDIR)/files/S97mavlink $(TARGET_DIR)/etc/init.d
    
    • 注释的代码:这部分代码是被注释掉的,表示原本计划安装一个启动脚本 S97mavlink/etc/init.d 目录,但目前未执行。

2.5 majestic

define MAJESTIC_INSTALL_TARGET_CMDS
	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	$(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(@D)/majestic.yaml


	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
	$(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(MAJESTIC_PKGDIR)/files/S95majestic


	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/majestic
endef
  1. 创建 /etc 目录并安装配置文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    $(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(@D)/majestic.yaml
    
    • 创建 /etc 目录-d 选项确保目标目录存在,权限为 755(所有者可以读、写、执行,其他用户只读、执行)。
    • 安装配置文件majestic.yaml 被复制到目标目录 /etc,权限为 644(所有者可以读、写,其他用户只读)。-t $(TARGET_DIR)/etc 表示将目标路径作为目录。
  2. 创建 /etc/init.d 目录并安装启动脚本

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
    $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(MAJESTIC_PKGDIR)/files/S95majestic
    
    • 创建 /etc/init.d 目录:为放置启动脚本准备目录,权限为 755
    • 安装启动脚本S95majestic 文件被复制到 /etc/init.d 目录中,权限为 755,允许所有用户执行该脚本。
  3. 创建 /usr/bin 目录并安装可执行文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/majestic
    
    • 创建 /usr/bin 目录:为安装可执行文件创建目录,权限为 755
    • 安装可执行文件majestic 可执行文件被复制到 /usr/bin 目录中,权限为 755,使得任何用户都可以执行该文件。

2.6 *vdec-openipc

define VDEC_OPENIPC_INSTALL_TARGET_CMDS
	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
	$(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(VDEC_OPENIPC_PKGDIR)/files/S98vdec

	$(INSTALL) -m 755 -d $(TARGET_DIR)/etc
	$(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(VDEC_OPENIPC_PKGDIR)/files/vdec.conf

	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/vdec/vdec
endef
  1. 创建 /etc/init.d 目录并安装启动脚本

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d
    $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(VDEC_OPENIPC_PKGDIR)/files/S98vdec
    
    • 创建 /etc/init.d 目录:使用 -d 选项确保目标目录存在,权限为 755(所有者可以读、写、执行,其他用户可以读和执行)。
    • 安装启动脚本:将 S98vdec 文件从指定目录复制到目标 /etc/init.d 目录,权限为 755(所有者可以读、写、执行,其他用户可以读和执行)。
  2. 创建 /etc 目录并安装配置文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/etc
    $(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(VDEC_OPENIPC_PKGDIR)/files/vdec.conf
    
    • 创建 /etc 目录:使用 -d 选项确保目标目录存在,权限为 755
    • 安装配置文件:将 vdec.conf 文件从指定目录复制到目标 /etc 目录,权限为 644(所有者可以读和写,其他用户可以读)。
  3. 创建 /usr/bin 目录并安装可执行文件

    $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin
    $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/vdec/vdec
    
    • 创建 /usr/bin 目录:使用 -d 选项确保目标目录存在,权限为 755
    • 安装可执行文件:将 vdec 可执行文件从源目录复制到目标 /usr/bin 目录,权限为 755

3. 启动

Linux系统启动过程是比较复杂的,这里不是专门针对Linux启动过程的,大家可以去网上搜索,大致可以分几个阶段:

  1. BIOS/UEFI:硬件初始化并加载引导加载器。
  2. 引导加载器:如 GRUB,加载内核并传递启动参数。
  3. 内核加载:内核初始化硬件并挂载根文件系统。
  4. init 进程:启动用户空间的第一个进程,管理服务启动。
  5. 服务启动:init 系统(如 systemd)根据配置文件启动所有必需的系统服务。
  6. 用户登录:提供登录界面,允许用户进入系统。
  7. 用户会话启动:加载用户配置文件,启动用户空间应用。

不过OpenIPC是嵌入式小系统,所以并没有这么复杂的过程,大体上就是U-Boot + Kernel load + init + 服务(如果配置的话)

而这里所讨论的主要开源软件包的启动,基本上都是在init阶段。

init
 └──> etc/inittab
     └──> etc/init.d/rcS
         └──> etc/init.d/S*

3.1 init配置文件

# Run rc scripts
::sysinit:/etc/init.d/rcS

3.2 rcS启动脚本

for i in /etc/init.d/S??*; do
	[ ! -f "$i" ] && continue
	case "$i" in
		*)
			$i start
			;;
	esac
done

4. 总结

注:主要将重点的摘录出来,一般的就不再展开。

预设条件:

  • IMX415
  • SSC338Q
  • Hi3536DV100

4.1 天空端启动

天空端主要是FPV摄像头,负责视频采集,飞控数据链路。

/etc/init.d/rcS
 ├──> S30customizer
 │   ├──> /usr/share/openipc/customizer.sh
 │   └──> sh /usr/share/openipc/wireless.sh
 ├──> S98datalink
 │   ├──> tweaksys ssc33x  // configure majestic, h265, 1080p, udp://127.0.0.1:5600
 │   └──> wifibroadcast start
 │       ├──> [video]  // udp_port == 5600
 │       │   └──> wfb_tx -p "$stream" -u "$udp_port" -R "$rcv_buf" -K "$keydir/$unit.key" -B "$bandwidth" \
 │       │           -M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \
 │       │           -T "$pool_timeout" -i "$link_id" -f "$frame_type" -C 8000 "$wlan" > /dev/null &
 │       └──> telemetry start  // telemetry_rx == wfb_rx, telemetry_tx == wfb_tx, port_rx == 14551, port_tx == 14550
 │           ├──> mavfwd --channels "$channels" --master "$serial" --baudrate "$baud" -p 100 -t -a "$aggregate" \
 │           │           --out 127.0.0.1:$port_tx --in 127.0.0.1:$port_rx > /dev/null &
 │           ├──> telemetry_rx -p "$stream_rx" -u "$port_rx" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
 │           └──> telemetry_tx -p "$stream_tx" -u "$port_tx" -K "$keydir/$unit.key" -B "$bandwidth" \
 │                             -M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \
 │                             -T "$pool_timeout" -i "$link_id" -f "$frame_type" "$wlan" > /dev/null &
 └──> S95majestic

4.2 地面端启动

地面端主要是视频显示,以及OSD数据显示。

/etc/init.d/rcS
 ├──> S30customizer
 │   ├──> /usr/share/openipc/customizer.sh
 │   └──> sh /usr/share/openipc/wireless.sh
 ├──> S98datalink
 │   └──> wifibroadcast start
 │       ├──> [video]  // udp_port == 5600
 │       │   └──> wfb_rx -c "$udp_addr" -u "$udp_port" -p "$stream" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
 │       └──> telemetry start  // telemetry_rx == wfb_rx, telemetry_tx == wfb_tx, port_rx == 14551, port_tx == 14550
 │           ├──> mavlink-routerd -c /etc/mavlink.conf > /dev/null 2>&1 &
 │           ├──> telemetry_tx -p "$stream_tx" -u "$port_tx" -K "$keydir/$unit.key" -B "$bandwidth" \
 │           │                 -M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \
 │           │                 -T "$pool_timeout" -i "$link_id" -f "$frame_type" "$wlan" > /dev/null &
 │           └──> telemetry_rx -p "$stream_rx" -u "$port_rx" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
 └──> S98vdec
     ├──> [simple] vdec -p ${port} -d ${format} -c ${codec} -m ${mode} --mavlink-port ${mavlink_port} ${osd_variant} ${extra} > /dev/null 2>&1 &
     └──> [custom] osd > /dev/null 2>&1 &

4.3 OSD配置

OSD界面可以配置两种类型:

注:默认simple情况是vdec。

5. 参考资料

【1】Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考
【2】OpenIPC开源FPV之工程编译
【3】OpenIPC开源FPV之工程框架
【4】OpenIPC开源FPV之重要源码包

6 附录

$(INSTALL) -m 755 -D $(@D)/majestic $(TARGET_DIR)/usr/bin/majestic 中,$(@D) 是 GNU Make 中的自动变量。

  • $@:代表规则中目标文件的完整名称(即,Makefile 中目标的名字)。
  • $(@D):表示 $@ 所在的目录部分,等效于 dirname $@。它提取出目标文件的目录路径,不包括文件名。

因此,$(@D) 是将当前目标的路径部分取出,用于定位源文件所在的目录。在这个上下文中,$(@D)/majestic 可能指向构建过程中的某个中间目录,majestic 可执行文件就位于该目录下。

举例:
假设 Makefile 目标是 /path/to/output/majestic,则:

  • $@:代表 /path/to/output/majestic
  • $(@D):代表 /path/to/output,即目标文件的目录路径。

因此,$(@D)/majestic 指的是 /path/to/output/majestic,用于安装可执行文件。

03-31
### OpenIPC 项目简介 OpenIPC 是一个专注于摄像头研发的开源平台,旨在为开发者提供一套完整的工具链和框架来设计、开发以及测试基于 IP 的摄像设备。该项目涵盖了从硬件驱动到软件应用层的一系列组件[^1]。 #### 主要功能模块 - **固件开发支持**:提供了针对不同芯片组优化后的底层驱动程序接口,简化了新硬件适配过程。 - **流媒体传输协议实现**:内置对主流音视频编码标准的支持(H.264/H.265),并通过 RTSP 协议完成数据分发[^4]。 - **调试与管理工具集成**:ipctool 是官方推荐的一款命令行实用程序,用于远程控制已部署节点的状态查询及参数调整等功能[^3]。 #### 快速上手指南 为了帮助初次接触此生态系统的用户更快地上轨,下面给出了一些基础指导: ##### 环境搭建 确保本地计算机安装有 Java 运行环境 JDK8 及以上版本,因为部分脚本依赖于此执行环境。另外还需准备 Git 客户端以便克隆仓库资源。 ```bash sudo apt update && sudo apt install default-jdk git -y ``` 随后拉取最新代码至工作目录下: ```bash git clone https://github.com/openipc/ipc-firmware.git cd ipc-firmware/ ./build.sh all ``` 上述指令会自动下载必要的第三方库并编译整个解决方案包。 ##### 测试运行 当所有准备工作完成后,可以尝试调用预定义好的 demo 场景验证成果有效性。比如通过修改 `examples/server.c` 文件内的监听地址字段来自定义服务接入点位置。 最后借助 ipctool 实现基本交互操作,例如获取当前在线列表或者强制重启目标单元等动作。以下是启动该客户端的方式之一: ```bash java -cp /path/to/jar/com.openipc.ipctool.jar com.openipc.ipctool.Main --help ``` > 注意替换实际路径 `/path/to/jar/...` 到对应 JAR 包所在处。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值