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"

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

相关推荐
2401_8653825020 小时前
密评与等保的关系:不是替代,而是互补
网络·信息化造价
白狐_79821 小时前
408计算机网络第3章:PPP协议——帧格式、LCP/NCP、状态机与真题精讲
网络·计算机网络·智能路由器
MIXLLRED1 天前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
zt1985q1 天前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
白狐_7981 天前
408计算机网络第3章:以太网交换机与共享式以太网——知识总结
服务器·网络·计算机网络
笨鸟先飞,勤能补拙1 天前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
wgh6531 天前
策略路由实验
网络
難釋懷1 天前
Nginx日志
前端·网络·nginx
Loongproxy1 天前
大规模采集为啥用隧道代理IP?会话保持如何做到无感轮换
java·服务器·网络
老赵的博客1 天前
工控机之UDP组播
网络·网络协议·udp