具体现象:手动设置里面配置静态IP,保存后突然掉电后,无法进入系统(偶发性)
问题分析:如果设备root过,可以先pull出ipconfig.txt文件 路径: /data/misc/ethernet/ipconfig.txt
设置DHCP或者Static时,都通过读写这个文件
1,系统进程的入口SystemMain类里面的main方法会通过SystemServiceManager启动EthernetService
(System的路径 /frameworks/base/services/Java/com/Android/server/SystemServer.java)
(EthernetService的路径 /frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetService.java)
(EthernetConfigStore的路径 /frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetConfigStore.java)
2,在IpConfiguration类里面调用了IpConfiguration这个类,这个类就是以太网的具体配置,看打印日志便可知道ipconfig.txt存储在 /data/misc/ethernet/ipconfig.txt
(如果设备没有备用电池,在设置静态和动态ip时,《突然断电》,偶发性地会系统初始化失败,起不来的情况)
第一种临时解决方案,直接找一个有数据的ipconfig.txt文件push到/data/misc/ethernet/目录下,替换掉原有的ipconfig.txt文件,但是,还是会出现系统死掉的现象(这是治标不治本,调试时可以用,但到了商用绝对不推荐)
弄了2天都没有找到更好的解决方法,最后只能用这个临时解决方案(此方案的弊端:在设置静态IP时,虽然不会死机,但是有可能会设置失败)
–a \frameworks\base\services\core\java\com\android\server\net\IpConfigStore.java
++b \frameworks\base\services\core\java\com\android\server\net\IpConfigStore.java
DataInputStream in = null;
try {
in = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
int version = in.readInt();
if (version != 2 && version != 1) {
loge(“Bad version on IP configuration file, ignore read”);
++ //start:add by wf 2020/6/7
– return null;
++ // return null;
++ return networks;
++ //end:add by wf 2020/6/7
}