Android16 打开热点和有线网后,关闭有线网出现ifconfig网络节点卡死解决

Android16 打开热点和有线网后,关闭有线网出现ifconfig网络节点卡死解决

文章目录

一、前言

Android16 在有些方案上,打开热点+打开有线网,并且两个节点都获取到ip的情况;

如果这时候关闭有线网,不管是使用上层接口,还是ifconfig eth0 down都是会导致网络节点卡死。

后续会出现:串口ifconfig卡死,app应用获取网络信息的界面卡死(五秒后ANR)

串口卡死如下图所示:

这个问题之前Android13 是有遇到过的,是问供应商分析解决的。

Android16 也遇到了,虽然解决过程不太一样,但是参考价值很大。

有兴趣的,收藏看看。

二、解决

这个解决方法是咨询供应商解决的。

内核目录:release\common\common16-6.12\XXX\stmmac_main.c

复制代码
	ret = stmmac_tc_init(priv, priv);
	if (!ret) {
		//ndev->hw_features |= NETIF_F_HW_TC; //把这行注释掉就可以了。
	}

这个文件是内核里面的,如果内核和系统分开的代码是搜不到的。

如果内核代码和系统代码是一起的,可以在release根目录搜索一下文件,

比如311D2 Android16:

复制代码
SY-3000-A311D2-AN16-GM-EDLA-IFPD/release$ find . -name stmmac_main.c
./common/common16-6.12/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/out/bazel/output_user_root/732ac6fbc8e9cd33c335a93a5d0c1eeb/sandbox/sandbox_stash/KernelHeaders/64/execroot/_main/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/out/bazel/output_user_root/732ac6fbc8e9cd33c335a93a5d0c1eeb/sandbox/sandbox_stash/KernelUapiHeaders/36/execroot/_main/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/common_drivers/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
SY-3000-A311D2-AN16-GM-EDLA-IFPD/release$     

排除out目录的文件,剩下的是这两个文件;

复制代码
./common/common16-6.12/common/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
./common/common16-6.12/common_drivers/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

之前Android13 在内核源码修改 common/drivers 下的stmmac_main.c文件就可以了;

但是在Android16 需要两个stmmac_main.c 都修改才有用;

具体原因无法进一步进行分析,因为我对内核的代码逻辑也是半窍不通。

之前311D2 Android13的代码,内核是分开的,只能内核底层开发人员进行编译处理。

不同方案和不同Android版本的代码估计都是有差异的,这个问题估计就是内核异常。

三、其他

1、小结

打开热点后和有线网后,关闭有线网会导致网络节点卡死,这个问题估计是资源占用有关。

关闭有线网后,不去释放正在占用的资源,就能规避解决;

解决方法是:在内核的 stmmac_main.c 文件中不设置 NETIF_F_HW_TC 属性。

有些方案安装上面的修改是有可能无法解决的,这个可以进一步咨询供应商。

2、相关思考

注释掉这里代码的作用是啥?

复制代码
	ret = stmmac_tc_init(priv, priv);
	if (!ret) {
		//ndev->hw_features |= NETIF_F_HW_TC; //把这行注释掉就可以了。
	}

这个我是看不懂的,只能AI看看了,这里把大概的理解搞下来看看:

复制代码
1. 第一行:ret = stmmac_tc_init(priv, priv); //驱动的硬件 TC 初始化函数
关键背景:TC 是什么?
TC(Traffic Control,流量控制)是 Linux 网络子系统的核心功能,
负责:流量调度、速率限制、队列管理、流量分类
2、后续逻辑判断
if (!ret) {  // 若硬件 TC 初始化成功(ret=0)
    ndev->hw_features |= NETIF_F_HW_TC;  // 向内核声明该网卡支持硬件 TC
}

开启支持硬件TC有什么好处:

复制代码
启用网卡的硬件流量控制(TC)加速功能,并向 Linux 内核注册该特性,最终实现:
提升网络性能:
	硬件直接处理流量调度 / 限速,不占用 CPU 资源,适合高带宽、低延迟场景(如视频通话、文件传输);
支持 QoS(服务质量):
	通过硬件级优先级调度,确保关键业务(如语音、控制信令)的数据包优先转发;
降低系统负载:
	避免内核通过软件 TC 处理大量数据包,减少 CPU 开销,提升系统整体响应速度。

所以注释了开启硬件TC,并不会造成很大影响,只会多使用一些cpu控制网络数据的流量。

3、之前也有打开网络共享后关闭有线网异常

不确定是否和这个TC加速有关。

复制代码
grep -nr "ndev->hw_features |= NETIF_F_HW_TC"

内核源码可以过滤这个内容看看其他文件还有什么是相关的。这个是瞎说的,需要自己验证。

相关推荐
深圳市快瞳科技有限公司13 分钟前
宠物门禁端侧AI落地解析:画质检测、活体甄别与离线推理
网络
一条泥憨鱼2 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
m0_715674432 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全
dog2503 小时前
带宽,时延,抖动的不可能三角
网络·tcp/ip
砚凝霜4 小时前
【软考信息安全】第十六章 网络安全风险评估过程与技术方法
网络·安全·web安全
Eloudy5 小时前
MLNX_OFED 的 install.pl 安装流程分析
网络·rdma·roce
对讲机数码科普6 小时前
从电路原理到协议栈:模拟对讲机与数字对讲机的技术内核拆解
运维·网络·架构·软件工程
我送炭你添花7 小时前
ASA原理与电子维修实战:前言 一路修来,一路学习
运维·网络·学习
张小姐的猫7 小时前
【Linux】网络编程 —— 多路转接:epoll
linux·运维·网络
睡一觉就好了。7 小时前
linux网络编程基础
网络