加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0472zz.com/)- 云渲染、网络安全、终端安全、数据治理、智能机器人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置

发布时间:2026-11-04 08:08:36 所属栏目:Unix 来源:DaWei
导读:  去年春晚那会儿,我蹲在西区机房三号柜后面调鸿蒙Unix调试——不是模拟器,是真刀真枪连着Hi3516DV300的串口,板子还发烫。外面下着冻雨,玻璃上全是斜着爬的水痕,空调外机嗡嗡震得机柜螺丝都在响。小张端着一碗酸辣粉进

  去年春晚那会儿,我蹲在西区机房三号柜后面调鸿蒙Unix调试——不是模拟器,是真刀真枪连着Hi3516DV300的串口,板子还发烫。外面下着冻雨,玻璃上全是斜着爬的水痕,空调外机嗡嗡震得机柜螺丝都在响。小张端着一碗酸辣粉进来,辣椒油溅到我键盘F7键上,我没擦,就让它腻着。


  第一坑:.hdc.config里debugPort没关防火墙白名单,但你查日志只看见“connection refused”,根本不会往iptables -L那跑。我原以为是端口被占,把ss -tulnp翻了三遍,又killall -9 hdc-server十八秒——结果发现root用户下/etc/ufw/applications.d/harmonyos.conf压根没加载。这玩意儿默认不生效,得手动ufw allow 'HarmonyOS Debug'。我说不准ufw是不是只认英文service名,反正中文注释行后面多打了个空格,它就读错了。我敢打包票:你删掉那个空格,立刻通。但你不会去删,因为你根本想不到config文件里一个空格能卡死整个调试链路。


  老李接了个电话,说他女儿幼儿园要交三百七十二块手工材料费,挂了就拧开保温杯盖吹热气,吹完顺手把杯盖扣在示波器探头校准点上——盖子太厚,探头碰不到基准信号,但他完全没意识到。我就看着他一边讲“这调试环境怎么老掉链子”,一边用万用表测了三遍JTAG电压,其实电压没问题,是hdcd没读到device id的response帧,因为udev规则里KERNELS=="1-1.2"写死了USB拓扑路径,而板子插的是左下角第三个Hub口,实际枚举出来是1-1.3。这事跟万用表没关系,跟探头也没关系,就是老李吹热气的时候,手指抖了一下,把udev规则文件覆盖保存时少按了个回车,最后那行缺了换行符。现在每次lsusb -t都能看到devpath末尾带个^M——没人会去看lsusb -t的输出结尾有没有乱码。


  第二坑:hdc shell里的ash不认export PATH=$PATH:/system/bin,但它认export PATH="/system/bin:$PATH"。顺序反了,所有调试命令全挂。不是报错,是静默失败——执行hdc shell "ps | grep hilogd"直接返回空,你以为进程没起来,其实起来了,只是你的$PATH里没有sh,所以ps调的是/system/bin/ps,但它的shebang是#!/bin/sh,而/bin/sh根本不存在。/bin是软链接到/system/bin/ash,可ash自己不肯resolve这个链接链。这个我敢打包票:你把export语句挪到hdc shell第一行,用双引号包住完整路径,再加一行echo $PATH确认——通。但八成你在写build.sh的时候,直接source了一个别人传的env.sh,里面PATH是用单引号拼的,拼完连空格都没留。我说不准华为为啥非得在shell初始化里堵死这条路径解析链,反正堵死了。


文章配图,仅供参考

  第三坑最绝:hdc的debug模式默认走ipv6。你ifconfig看ip是192.168.10.112,但hdc list-target里显示的IP是fe80::f04b:5fff:fe22:e3c7%enp0s31f6。你用telnet 192.168.10.112 8710连不通,是因为hdc server监听的是:::8710,不是0.0.0.0:8710。你netstat -tuln | grep 8710只会看到:::8710那一行,小数点都看不见。我们组小王上周为此重刷了五次镜像,就因为他在hdc_server_config.json里改了host为"0.0.0.0",但忘了删掉"ipv6": true这一行——这字段不写默认true,写了false才禁用。你说气不气?你删掉它,重启服务,立刻能ping通。可谁会想到去翻那个json?毕竟文档里写的是“配置调试主机地址”,没人提ipv6开关藏在host字段底下两层。我说不准这算不算故意设计,但结果就是——优胜劣汰。真的,不是骂人,是字面意思:活下来的,都是被这三件事反复抽过脸、然后摸着黑改了八百遍udev规则的人。


  说到udev……昨天下午我顺手给设备树加了个新的interrupt-parent,编译完烧进去,log里突然多出一行“irq 27: nobody cared”。不是板子问题,是我同事小刘上周修风扇噪声,把arch/arm64/boot/dts/hisilicon/hi3516dv300.dtsi里gic节点的#interrupt-cells从3改成2了,改完忘push——他本地编译用的还是旧dtsi,但我拉的是他刚commit的image,没同步源。这事跟调试失败没关系,纯粹是我看他Git log里有一行“fix fan noise”手痒点进去看了眼。他修得挺对,风扇是不响了,可irq路由乱套了。我截图发群里,没人回,可能都在调hdc。


  对了,刚才工位对面那位穿灰夹克的,敲键盘敲到一半忽然停下来,盯着终端里一段hdc log看了快三分钟,眼神直愣,左手无意识抠指甲缝——那地方嵌着一点蓝光屏的碎屑,估计是从拆过的OLED模组上蹭的。我没叫他,怕他一惊,hdc session又断一次。我现在手边开着三个窗口:一个tail -f /var/log/hdc.log,一个vim在改udev规则,第三个是微信聊天框,写着“帮我看看这个hdc list-target里IPv6地址后面那个%符号是不是网卡名……”,还没发出去。


  这三件事没一个是文档写的,没一个是错误码提示的,它们就像焊锡渣,卡在你肉眼可见的焊点之间。我打算今晚回家试试把.hdc.config里的debugPort改写成"[::]:8710"格式,再配一条iptables规则把ipv6流量NAT到本地回环——不保证行,但值得赌一把。要是还不行,明早我就去把机房那台旧的CentOS7虚拟机重装成Ubuntu22.04,反正它硬盘上还存着三年前的鸿蒙1.0 SDK镜像,没人动过。先这么干着吧。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!