OpenHarmony 5.1 开机自动启用 HDC TCP 调试教程:不用手敲 hdcd -t &
OpenHarmony 5.1 开机自动启用 HDC TCP 调试教程:不用手敲 hdcd -t &
一、前言
最近在做 飞凌 RK3568 + OpenHarmony 5.1 的板级调试时,我有一个很实际的需求:
设备每次开机后,自动把 HDC 的 TCP 调试模式打开。
一开始最容易想到的办法,是直接在系统里执行:
hdcd -t &
但实际看了 OpenHarmony 的 init 机制和 HDC 自带的 hdcd.cfg 之后会发现,更推荐的做法不是手工起一个 hdcd -t & 进程,而是通过 setparam persist.hdc.mode.tcp enable 让系统现有的 hdcd 服务自动切到 TCP 模式。
OpenHarmony 的 init 配置文件本身就是 JSON 格式,系统启动时会解析这些配置来执行 jobs 和启动 services;系统还会扫描 /system/etc/init/*.cfg 和 /vendor/etc/init/*.cfg。(Gitee)
二、为什么不建议直接写 hdcd -t &
原因很简单,系统本来就已经内置了 hdcd 服务。
从 OpenHarmony 官方 hdcd.cfg 可以看到:
-
已经定义了一个名为
hdcd的 service -
可执行文件路径就是
/system/bin/hdcd -
这个 service 采用
start-mode: "condition" -
默认是
"disabled" : 1 -
当参数
persist.hdc.mode.tcp=enable满足时,会执行:-
stop hdcd -
sleep 1 -
start hdcd(Gitee)
-
也就是说,系统早就给 HDC TCP 模式留好了正规入口。
你如果再额外手工跑一个 hdcd -t &,就可能和系统原有的 hdcd 服务管理打架,出现重复启动、socket 冲突、状态不一致之类的问题。这个结论可以直接从官方 hdcd.cfg 的服务定义和条件 job 逻辑看出来。(Gitee)
三、正确思路
正确思路其实很简单:
开机时通过 init job 执行:
setparam persist.hdc.mode.tcp enable
因为官方 hdcd.cfg 里已经写明,只要 persist.hdc.mode.tcp=enable,就会触发对应的 condition job,自动重启 hdcd 服务,使其进入 TCP 模式。(Gitee)
另外,OpenHarmony 的 HDC 参数文件里,persist.hdc.mode.tcp 默认值就是 "disable";有的配置里 persist.hdc.mode.usb 默认也是 "disable",而 root 版本参数文件里 USB 默认可能是 "enable"。这也说明:TCP 调试不是默认就开的,需要你显式打开。 (Gitee)
四、实现方法
1. 新建一个 init 配置文件
例如新建:
/system/etc/init/jypmc10_hdc_tcp.cfg
文件内容如下:
{
"jobs" : [{
"name" : "post-init",
"cmds" : [
"setparam persist.hdc.mode.tcp enable"
]
}
]
}
这段配置的意思是:
-
在系统启动到
post-init阶段时 -
自动执行
setparam persist.hdc.mode.tcp enable -
然后系统现有的
hdcd.cfg会根据这个参数变化,自动 stop/starthdcd
OpenHarmony 官方文档明确说明,init.cfg 是 JSON 格式,用来配置系统启动时需要执行的命令和服务;系统启动时 Init 会解析这些配置并执行。文档还明确列出了标准系统会扫描的目录,包括 /system/etc/init/*.cfg 和 /vendor/etc/init/*.cfg。(Gitee)
2. 为什么选 post-init
因为 post-init 属于系统启动阶段里的标准 job 时机,适合放这种“系统起来后自动设置参数”的操作。
OpenHarmony 的 init 配置模型里,jobs 就是“启动时要执行的命令集合”,而且这是标准的启动配置入口。(Gitee)
对这个需求来说,post-init 已经够用了,不需要自己再造一个复杂 service。
五、这个文件放哪里
这里分两种情况。
方案 A:临时验证,直接放到系统现成目录
你可以先放到:
/system/etc/init/jypmc10_hdc_tcp.cfg
因为 OpenHarmony 标准系统启动时就会扫描 /system/etc/init/*.cfg。(Gitee)
方案 B:正式固化到产品镜像,放到 vendor 侧
更推荐的正式做法,是把这个配置固化到板级 vendor 配置里,例如:
/vendor/etc/init/xxx.cfg
因为官方文档同样明确说了,/vendor/etc/init/*.cfg 是 vendors 定义的配置文件目录,适合做板级和产品级定制。(Gitee)
我的建议:
-
调试阶段:先放
/system/etc/init/ -
量产/长期使用:固化到
/vendor/etc/init/
六、操作步骤实战
方法 1:在板子上临时创建配置文件
cat > /system/etc/init/jypmc10_hdc_tcp.cfg <<'EOF'
{
"jobs" : [{
"name" : "post-init",
"cmds" : [
"setparam persist.hdc.mode.tcp enable"
]
}
]
}
EOF
然后重启设备:
reboot
方法 2:从源码里固化
如果你是自己编译 OpenHarmony 镜像,那就把这个 cfg 文件放进源码对应的 init 安装目录,最终让它出现在:
/system/etc/init/
或者:
/vendor/etc/init/
OpenHarmony 文档里给了标准系统的安装示例,说明 .cfg 文件可以通过 ohos_prebuilt_etc(...) 安装到 relative_install_dir = "init" 目录下。(Gitee)
七、如何验证是否生效
1. 先看参数是否打开
param get persist.hdc.mode.tcp
如果返回:
enable
说明参数已经成功设置。
2. 看端口监听情况
如果你的 hdcd 已经切到 TCP 模式,可以再看监听端口,例如:
netstat -anp | grep hdcd
或者结合你们设备实际网络情况去看对应端口。
3. PC 端连接测试
例如板子 IP 是 192.168.50.199,那 PC 端可尝试:
hdc tconn 192.168.50.199:端口号
八、如果还想固定 TCP 端口
有些情况下你不仅想自动开启 TCP,还想固定监听端口。
那可以在 cfg 里再多加一条:
{
"jobs" : [{
"name" : "post-init",
"cmds" : [
"setparam persist.hdc.port 8710",
"setparam persist.hdc.mode.tcp enable"
]
}
]
}
HDC 的参数文件中本来就定义了 persist.hdc.mode.tcp 这类持久化参数;结合 OpenHarmony HDC 侧现成的参数体系,这种做法比手工拉起 hdcd -t & 更符合系统原生设计。(Gitee)
九、常见坑点
1. 不要修改系统现成的 hdcd.cfg
最好新建你自己的 cfg,比如:
/system/etc/init/jypmc10_hdc_tcp.cfg
这样不会影响系统原有 HDC 逻辑,后续排查问题也更清晰。
2. 不要把 init 的 cmds 当成 bash 脚本
init 的 cmds 是受支持的 init 命令集合,不是完整 shell。
你这种需求只需要一条 setparam,非常适合直接写到 job 里。官方 init 配置文档也明确把 jobs 和 services 分开了。(Gitee)
3. /system 可能是只读分区
很多镜像里 /system 默认不可直接写。
这种情况下,建议从源码里固化到镜像,而不是在线直接 cat > /system/etc/init/...。这一点和具体镜像挂载策略有关,实机上请先确认。
十、结论
这次的最终结论其实很明确:
在 OpenHarmony 上,要实现开机自动启用 HDC TCP 调试,推荐做法不是执行 hdcd -t &,而是新增一个 init cfg,在 post-init 阶段执行:
setparam persist.hdc.mode.tcp enable
原因是:
-
OpenHarmony 本身就通过
init的 JSON 配置来管理启动命令和服务。(Gitee) -
系统内置的
hdcd.cfg已经写好了persist.hdc.mode.tcp=enable时自动重启hdcd的逻辑。(Gitee) -
这样做比手工起一个
hdcd -t &更稳定,也更符合 OpenHarmony 原生机制。(Gitee)
附:本文最终使用的最小可用配置
{
"jobs" : [{
"name" : "post-init",
"cmds" : [
"setparam persist.hdc.mode.tcp enable"
]
}
]
}
如果你想,我还能继续帮你把这篇再加工成更像 CSDN 爆文风格的版本,比如加上:
-
摘要
-
关键词
-
目录
-
封面小标题
-
“踩坑记录”
-
“一键复现版命令汇总”
更多推荐

所有评论(0)