MTK手机芯片如何添加以太网卡支持(上层部分)

接:,这边文章只描述如何移植底层部分

1, 由于android本身没有Ethernet的架构,我们必须从Android-x86上面移植,Android-x86是一个开源项目,大家可以翻墙从谷歌网站下载,或者是从这里

下载。这个包包含4.04(ICS)和4.2(jb),两个版本的差分包。4.2不完整,但是对于移植到4.2系统上而言,架构上本4.04好一些,需要debug修改,建议使用ICS版本的差分包。2,根据Android硬件管理架构Manager-Service-HAL(jni),我们需要在framework/base下面建立一个文件夹,这个包需要在编译路径上加入。需要修改build//core/pathmap.mkFRAMEWORKS_BASE_SUBDIRS变量上加上ethernet3,我们知道android的dhcp的配置文件在rom的/system/etc/,其下面有一个dns相关的脚本文件/dhcpcd-hooks/20-dns.conf,这个脚本将记录dns服务器的地址,这个脚本在源代码的externel//dhcpcd-hooks/20-dns.conf下面,我们需要添加对ethernet的支持。setprop net.dns${count} ${dnsaddr}dhcpcd的工作原理,请参考文章:4,因为我们需要根据系统属性值变化来启动dhcp等,所以,我们必须修改/system/init/property_service.c的property_perms[]添加:+ { "rw.", AID_SYSTEM, 0 },+ { "net.", AID_DHCP, 0 },关于属性之修改启动服务,请参考文章:5,由于我们添加的Ethernet模块中有AIDL文件,所以,我们需要把这个AIDL文件加入到framework的Android.mk的LOCAL_SRC_FILES中,采用+=的方式添加:注: AIDL文件 framework中包含的aidl是在frameworks/base/Android.mk中定义的。该文件定义了两处aidl文件列表。 第一处是给LOCAL_SRC_FILES变量中使用 “+=” 进行赋值,该变量将包含在framework.jar目标中的所有源文件,包括aidl文件和java文件。 第二处是给aidl_files变量使用“:=”赋值符号进行赋值,该变量仅仅包含android.jar目标中所有的aidl文件。 因此,当给Frameworks中添加新的aidl文件时,需要考虑文件是否要公开到SDK中。如果需要,则需要把该文件路径同时添加到以上两个变量中;如果不需要公开到SDK中,则只需要把文件路径添加到LOCAL_SRC_FILES变量中。 在完成这些操作后编译仍会出现问题,此时需要运行,make update-api命令5,,先留着api/current.txt不修改6,注册以太网卡服务:framework/core/java/android/app/ContextImpl.java+ registerService(ETHERNET_SERVICE, new ServiceFetcher() {+ public Object createService(ContextImpl ctx) {+ IBinder b = ServiceManager.getService(ETHERNET_SERVICE);+ IEthernetManager service = IEthernetManager.Stub.asInterface(b);+ return new EthernetManager(service, ctx.mMainThread.getHandler());+ }});7, 在framework/core/java/android/app/DownloadManager.java添加静态变量 public static final int NETWORK_ETHERNET = 1 << 2;有何用?不是很清楚。8,在/frameworks/core/java/android/content/Context.java添加以太网卡服务名称:public static final String ETHERNET_SERVICE = "ethernet";//这个名称上面注册过程事情,后面应用部分,要去的系统服务,也是靠这个名称。9,在/frameworks/base/core/java/android/net/NetworkUtils.java,添加以太网卡配置接口,其实是直接调用jni的。NetworkUtils这个类可以查看网络状态,一起启动网络命令。10,在SettingsProvider中定义接口: /**+ * Ethernet related configurations+ */+ public static final String ETHERNET_ON = "ethernet_on";+ public static final String ETHERNET_MODE = "ethernet_mode";+ public static final String ETHERNET_IP = "ethernet_ip";+ public static final String ETHERNET_MASK = "ethernet_netmask";+ public static final String ETHERNET_DNS = "ethernet_dns";+ public static final String ETHERNET_ROUTE = "ethernet_iproute";+ public static final String ETHERNET_CONF = "ethernet_conf";+ public static final String ETHERNET_IFNAME = "ethernet_ifname";11,添加jni文件修改make文件:framework/core/jni/Android.mk添加android_net_ethernet.cppcopy文件android_net_ethernet.cpp到目录framework/core/jni/修改接口文件AndroidRuntime.cpp和android_net_NetUtils.cpp12,修改系统配置文件frameworks/core/res/res/values/config.xml13, 拷贝Ethernet模块/frameworks/base/ethernet/java/android/net/ethernet/EthernetDevInfo.aidl/frameworks/base/ethernet/java/android/net/ethernet/EthernetDevInfo.java/frameworks/base/ethernet/java/android/net/ethernet/EthernetManager.java/frameworks/base/ethernet/java/android/net/ethernet/EthernetMonitor.java/frameworks/base/ethernet/java/android/net/ethernet/EthernetNative.java/frameworks/base/ethernet/java/android/net/ethernet/EthernetStateTracker.java/frameworks/base/ethernet/java/android/net/ethernet/IEthernetManager.aidl14,SystemUI和Settings部分暂时不修改,这两个部分一个是配置,一个是显示,暂时不影响功能。15,修改Server部分,添加EthernetService修改文件frameworks/services/java/com/android/server/EthernetService.java拷贝文件/services/java/com/android/server/EthernetService.java至此修改完成,网卡应该可以工作,但是没有SystemUI的图标和Settings.apk的设置项。但是需要手动启动dhcp获取ip和dns,手动启动的方法是在终端输入netcfg eht0 up dhcp, 如果想让系统自动启动,需要修改Init.rc让系统自动自动:on property:init.svc.dhcpcd_eth0=run start dhcpcd_eth0on property:init.svc.dhcpcd_eth0=stopped start dhcpcd_eth0至此,以太网卡可以正常工作,后面根据需要修改设置和systemui中的内容就可以了。

人情似纸张张薄,世事如棋局局新。

MTK手机芯片如何添加以太网卡支持(上层部分)

相关文章:

你感兴趣的文章:

标签云: