下载搜学网app
查学校 查学区 查辅导 查饭桌 查询中考数据
logo 点击咨询

讯为itop4418开发板实现Ethernet功能(一)


       讯为的itop4418开发板提供的android4.4的源码,默认是没有ethernet功能的,虽然当下已经是移动互联网时代了,wif的应用场景已然是炉火纯青,但是ethernet的用处还是很大的,尤其是在工业控制领域,为了保证数据传输的稳定性和网络实现的经济型,Ethernet还是具有很大优势的。本文将详细说明4418开发板的Ethernet功能实现细节,绝对可行,相关产品已上线运行。

 大体说来,增加Ethernet功能需要增加三个部分:1、ethernet service; 2、ethernet Settings  3、Systemui ethernet通知

(1)新增ethernet service

    拷贝frameworks/base/ethernet到frameworks/base下,修改frameworks/base/Android.mk

    在   wifi/java/android/net/wifi/p2p/IWifiP2pManager.aidl \
下加上如下代码

   ethernet/java/android/net/ethernet/IEthernetManager.aidl \

修改build/core/pathmap.mk在
FRAMEWORKS_BASE_SUBDIRS中加上ethernet


拷贝EthernetService.java到frameworks/base/services/java/com/android/server/下,修改frameworks/base/core/java/android/content/Context.java


    public static final String WIFI_P2P_SERVICE = "wifip2p";下加上如下内容

/**     * Use with {@link #getSystemService} to retrieve a {@link     * android.net.ethernet.EthernetManager} for handling management of     * Ethernet access.     *     * @see #getSystemService     * @see android.net.ethernet.EthernetManager     */
public static final String ETH_SERVICE = "ethernet";//add by hclydao

修改frameworks/base/core/java/android/app/ContextImpl.java

import android.net.wifi.p2p.IWifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager;
下增加如下内容

import android.net.ethernet.IEthernetManager;import android.net.ethernet.EthernetManager;在

registerService(WIFI_P2P_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    IBinder b = ServiceManager.getService(WIFI_P2P_SERVICE);
                    IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b);
                    return new WifiP2pManager(service);
                }});


下增加如下内容

registerService(ETH_SERVICE, new ServiceFetcher() {public Object createService(ContextImpl ctx) {IBinder b = ServiceManager.getService(ETH_SERVICE);IEthernetManager service = IEthernetManager.Stub.asInterface(b);return new EthernetManager(service, ctx.mMainThread.getHandler());}}); //

修改frameworks/base/services/java/com/android/server/ConnectivityService.java
增加

import android.net.ethernet.EthernetManager;//add by hclydaoimport android.net.ethernet.EthernetStateTracker;

注释掉
//import android.net.EthernetDataTracker;

            try {
                tracker = netFactory.createTracker(targetNetworkType, config);
                mNetTrackers[targetNetworkType] = tracker;
            } catch (IllegalArgumentException e) {
                Slog.e(TAG, "Problem creating " + getNetworkTypeName(targetNetworkType)
                        + " tracker: " + e);
                continue;
            }


下加上如下代码

            if(mNetConfigs[targetNetworkType].radio == ConnectivityManager.TYPE_ETHERNET) { //add by hclydao
                EthernetService ethernet = new EthernetService(context, (EthernetStateTracker)mNetTrackers[targetNetworkType]);
                ServiceManager.addService(Context.ETH_SERVICE, ethernet);
                mNetTrackers[targetNetworkType].startMonitoring(context, mTrackerHandler);
            }

注释掉
                    //return EthernetDataTracker.getInstance();

增加如下代码

return new EthernetStateTracker(targetNetworkType, config.name);

拷贝android_net_ethernet.cpp到frameworks/base/core/jni目录下
修改frameworks/base/core/jni下的Android.mk

    android_net_wifi_WifiNative.cpp \
下加上如下代码



修改frameworks/base/core/jni/AndroidRuntime.cpp

extern int register_android_net_wifi_WifiNative(JNIEnv* env);下
加上


extern int register_android_net_ethernet_EthernetManager(JNIEnv* env);


REG_JNI(register_android_net_wifi_WifiNative),
下加上如下代码

REG_JNI(register_android_net_ethernet_EthernetManager),

在framework/base/core/java/android/provider/Settings.java中
       public static final String WIFI_ON = "wifi_on";
下加上如下代码

public static final String ETH_ON      = "eth_on";public static final String ETH_MODE    = "eth_mode";public static final String ETH_IP      = "eth_ip";public static final String ETH_MASK    = "eth_mask";public static final String ETH_DNS     = "eth_dns";public static final String ETH_ROUTE   = "eth_route";public static final String ETH_CONF    = "eth_conf";public static final String ETH_IFNAME  = "eth_ifname";




评论