android4.0.3 添加Ethernet

在网上在网上查找ethernet移植相关资料时发现,若要移植的是android-xxx的版本的ethernet,就需要android-x86在xxx版本上的相关源码。但是查看android-x86 4.0版本的源码(目前没找到android-x86 4.0.3版本),发现android-x86 4.0版本中也没包含有ethernet相关代码,故下载了ethernet 补丁文件。

下载地址:http://www.android-x86.org/download

下载: Patch下的ethernet.diff.tar.gz。

把下载的补丁放至linux中解压,用patch命令分别给build、framework、package相关目录打补丁,如:

把frameworks-base.diff放到\frameworks\base下,用命令 patch -p1 <frameworks-base.diff即可打好该目录下的补丁。(注:补丁一定要打全,否则编译很容易报错)

打好补丁后,还要做些修改:

1. 在EthernetStateTracker.java的 

public void defaultRouteSet(boolean enabled) {
        mDefaultRouteSet.set(enabled);
    }后加上下面两个继承接口函数:

@Override
 public void setPolicyDataEnable(boolean enabled){
  
 }

 @Override
 public void setUserDataEnable(boolean arg0) {
  // TODO Auto-generated method stub
  
 }

2. system\core\libnetutils\dhcp_utils.c的 dhcp_do_request函数中,把

snprintf(daemon_cmd,sizeof(daemon_cmd),"%s","dhcpcd_wlan0");改成

snprintf(daemon_cmd,sizeof(daemon_cmd),"%s","dhcpcd_eth0");

编译源码,期间会提示有提示要 make-update api,执行后即可。到此,即可通过setting界面自动获取IP连接上ethernet。

目前分析理解:

 EthernetManager:以太网配置的Android API接口,可通过getSystemService接口获取

 NetWorkStateTracker: 每种网络都有各自NetWorkStateTracker的子类, 来负责以太网状态的监听, ConnectivityService统一管理它们。

 EthernetService:负责配置信息的保存和读取

 EthernetStateTracker:继承NetWorkStateTracker, 负责以太网状态的监听和配置

系统启动时EthernetStateTracker就会创建EthernetMonitor线程来监听网络状态信息, 监听的通过jni调用c代码完成的, 原理就是监听NetLink Socket, 网络连接或断开时这个socket端口就会接收到信息。当有网线连接上时,EthernetMonitor线程就会给EthernetStateTracker发送EVENT_HW_PHYCONNECT消息, EthernetStateTracker读取配置信息, 由于我们在Settings设置为DHCP, 就会通过DhcpHandle给DhcpThread发送EVENT_DHCP_START信息, DhcpThread就会运行NetUtil.runDhcp()来自动获取网络地址。接下来EthernetMonitor线程又会收到网络已通的消息, 并通过EVENT_HW_CONNECTED通知EthernetStateTracker EthernetStateTracker接着会发送EVENT_STATE_CHANGED消息给ConnectivityService。

展开阅读全文

没有更多推荐了,返回首页