[RK3399/RK3328][Android10.0]Ethernet:以太网设置静态ip,重启后无法获取IP的问题「建议收藏」

[RK3399/RK3328][Android10.0]Ethernet:以太网设置静态ip,重启后无法获取IP的问题「建议收藏」测试平台Platform:RK3399/RK3328OS:Android10.0现象设置中设置以太网为静态ip,设置后使用ifconfig查看ip显示正常。然后重启,极大概率出现开机后设备没有获取到ip.分析解决测试后发现了几点规律:设置静态ip会开机获取不到ip,但是设置动态ip无问题没有获取到ip时,使用ifconfig查看,发现网卡设备连接正常。此时拔插网线,或者使用ifconfigeth0down+ifconfigeth0up来开关一次设备后,就能正常获取到ip

大家好,又见面了,我是你们的朋友全栈君。

测试平台

Platform: RK3399/RK3328
OS: Android 10.0

现象

设置中设置以太网为静态ip,设置后使用ifconfig查看ip显示正常。然后重启,极大概率出现开机后设备没有获取到ip.

分析解决

测试后发现了几点规律:

  1. 设置静态ip会开机获取不到ip,但是设置动态ip无问题
  2. 没有获取到ip时,使用ifconfig查看,发现网卡设备连接正常。此时拔插网线,或者使用ifconfig eth0 down + ifconfig eth0 up 来开关一次设备后,就能正常获取到ip

根据测试结果采取了如下的解决方案,在开机的时候在Ethernet服务中进行一次ifconfig eth0 down + ifconfig eth0 up的操作来解决.

修改补丁如下,测试20次后无问题,提交给到客户

diff --git a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
index 308e328..919edc6 100644
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
@@ -252,12 +254,41 @@ final class EthernetTracker { 
   
         }
     }
 
-    private void maybeTrackInterface(String iface) { 
   
+    private boolean maybeTrackInterface(String iface) { 
   
         if (DBG) Log.i(TAG, "maybeTrackInterface " + iface);
         // If we don't already track this interface, and if this interface matches
         // our regex, start tracking it.
         if (!iface.matches(mIfaceMatch) || mFactory.hasInterface(iface)) { 
   
-            return;
+            return false;
         }
 
         if (mIpConfigForDefaultInterface != null) { 
   
@@ -266,13 +297,31 @@ final class EthernetTracker { 
   
         }
 
         addInterface(iface);
+        return true;
     }
 
     private void trackAvailableInterfaces() { 
   
         try { 
   
             final String[] ifaces = mNMService.listInterfaces();
             for (String iface : ifaces) { 
   
-                maybeTrackInterface(iface);
+               if (maybeTrackInterface(iface)) { 
   
+                    String mIfaceTmp = iface;
+                    new Thread(new Runnable() { 
   
+                        public void run() { 
   
+                            // carrier is always 1 when kernel boot up no matter RJ45 plugin or not,
+                            // sleep a little time to wait kernel's correct carrier status
+                            try { 
   
+                                Thread.sleep(3000);
+                            } catch (InterruptedException ignore) { 
   
+                            }
+							if(isEthernetInterfaceActive()){ 
   
+                                IpConfiguration config = getIpConfiguration(mIfaceTmp);
+                                if(config != null && IpAssignment.STATIC == config.getIpAssignment())
+                                { 
   
+                                    updateInterfaceState(mIfaceTmp, false);
+                                    updateInterfaceState(mIfaceTmp, true);
+                                }
+                            }else{ 
   
+                                 updateInterfaceState(mIfaceTmp, false);
+                             }
+                        }
+                    }).start();
+                    break;
+                }
             }
         } catch (RemoteException | IllegalStateException e) { 
   
             Log.e(TAG, "Could not get list of interfaces " + e);


注:其实这是种治标不治本的解决办法,但是由于客户追的比较紧先采取这种解决方案,后续有时间再去查一下根本所在(根据测试log等,我猜想这是个由于加载顺序和获取ip的时机导致的随机问题)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139610.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月29日 下午2:16
下一篇 2022年5月29日 下午2:36


相关推荐

  • 关于spring boot自动注入出现Consider defining a bean of type ‘xxx‘ in your configuration问题解决方案

    关于spring boot自动注入出现Consider defining a bean of type ‘xxx‘ in your configuration问题解决方案搭建完springboot的demo后自然要实现自动注入来体现springioc的便利了,但是我在实施过程中出现了这么一个问题,见下面,这里找到解决办法记录下来,供遇到同样的问题的同僚参考  Description:FieldhelloServiceincom.example.demo.service.TestControllerrequiredabeanoftype’co

    2026年4月16日
    5
  • velocity语法[通俗易懂]

    velocity语法[通俗易懂]一:基本语法:1.#set(#a="a")$a##输出语句时直接写变量的名称即可2.判断语句:#if($a=="a")##判断语句没有括号,也是

    2022年7月1日
    28
  • springsession使用_常见的使用null场景

    springsession使用_常见的使用null场景目录一、同域名下相同项目(集群环境)实现Session共享1.思路2.架构图3.实现步骤一、同域名下相同项目(集群环境)实现Session共享在同一个域名下,比如:www.p2p.com同一个项目,部署了多台tomcat,这就是典型的集群。我们上一篇文章的入门案例就属于这种应用场景,只不过在实际开发的过程中,我们如果存在了tomcat集群,那么肯定会使用nginx进行负载均衡,那么这种情况下我们该如何处理。1.思路我们将上一个阶段的p2p项目实现集群部署下的Ses

    2025年6月6日
    4
  • LPCTSTR类型

    LPCTSTR类型如何理解LPCTSTR类型?L表示long指针这是为了兼容Windows3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中,long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。P表示这是一个指针C表示是一个常量T表示在Win32环境中,有一个_T宏这个宏用来表示你的字符是否使用UNICODE,如果你的

    2025年7月23日
    3
  • lasso回归-回归实操

    lasso回归-回归实操pythonlasso回归算法之回归实操基本概念正则化正则化是指对模型做显式约束,以避免过拟合。本文用到的lasso回归就是L1正则化。(从数学的观点来看,lasso惩罚了系数向量的L1范数,换句话说,就是系数的绝对值之和。)正则化的具体原理就不在这里多叙述了,感兴趣的朋友可以看一下这篇文章:机器学习中正则化项L1和L2的直观理解。算法简介lasso回归在了解lasso回归之前,建议朋友们先对普通最小二乘法和岭回归做一些了解,可以参考这两篇文章:最小二乘法-回归实操,岭回归-回归实操。除了

    2022年5月8日
    63
  • Android studio安装教程[通俗易懂]

    Android studio安装教程[通俗易懂]Androidstudio安装教程傻瓜式教程如果想要彻底重装Androidstudio可以删除目录C:\Users\用户名中的以下几个文件夹。.android.gradle.Androidstudio(Androidstudio4.0版本之前才有)隐藏文件夹(Androidstudio4.0版本后才有)C:\Users\用户名\AppData\Roaming\Google\AndroidStudio4.1C:\Users\用户名\AppData\Local\Google\A

    2022年6月7日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号