移植 ethernet 到 android2.3.5

来源:互联网 发布:照片转油画软件 app 编辑:程序博客网 时间:2024/05/03 14:59

       目前的android平台设备都支持wifi无线上网,但很少有支持有线上网的,说的通俗点就是插上网线就能上网。最近公司的产品要实现这个功能就研究了一下,整个移植过程是在android-x86.org的帮助下完成的。Android X86平台是由Beyounn和Cwhuang主持设计的。项目的主要目的在于为X86平台提供一套完整的Android系统解决方案。这个项目提供了一套完整的可行源代码树,配套文档以及Live CD与Live USB。其中就有一套完整的ethernet 功能。

     首先去android-x86.org上下载需要移植的代码,目前的android-x86的发行版本有:

  • android-x86-v0.9 (obsolete)
    Based on Android 1.5 release (Cupcake).
  • donut-x86
    Based on Android 1.6 release (Donut).
  • eclair-x86
    Based on Android 2.1 release (Eclair).
  • froyo-x86
    Based on Android 2.2 release (Froyo).
  • gingerbread-x86
    Based on Android 2.3 release (Gingerbread).
      至于如何下载android-x86.org上有详细的说明,这里就不多说了。我下载的是gingerbread-x86版,如果全部下载代码比大,需要的时间比较长,只需要下载跟移植ethernet 相关的代码就可以了,相关的代码包如下:

      platform/build

     platform/frameworks/base

     platform/packages/apps/Settings

    多说一点的是下载是通过repo脚本进行,但是好像最近android.git.kernel.org被黑了,很多人找不到地方下载repo脚本文件了,在给大家说一个可用的站点:https://www.codeaurora.org。

     下载好所需代码后怎么办呢,当然要借助对比工具看看代码的不同之处,将需要的代码移植到我们的代码上,当然这个工作量还是比较大的,需要耐心和细心。不过网上也有一些牛人移植成功了,并做了patch文件,基本上各各的patch版本网上都有可以找到,开始我也找到了一个2.3版本的patch,但是在打补丁的过程中出现了很多问题。这些问题是因为补丁文件中的行号和我代码中的对不上,我的代码以前曾经改过,行号早已跟源代码中的不同。如果你也是这种情况,不幸的告诉你。你要自己从头移植了。

   现成的patch文件虽然不能直接用,但是有很好的参考价值。另外推荐一个比较文件(夹)的好工具:Beyond Compare 。

  ethernet 这部分代码虽然比较复杂,但是移植确实不需要太多的看代码,说白了移植工作是一件比较烦但不用动脑子的工作。涉及修改的文件大致如下:

frameworks/base下的改动

    a) frameworks/base/core/java/android/app/ContextImpl.java
    b) frameworks/base/core/java/android/content/Context.java
    c) frameworks/base/core/java/android/net/ConnectivityManager.java
    d) frameworks/base/core/java/android/net/NetworkUtils.java
    e) frameworks/base/core/java/android/provider/Settings.java
    f) frameworks/base/core/jni/Android.mk
    g) frameworks/base/core/jni/AndroidRuntime.cpp
    h) +frameworks/base/core/jni/android_net_ethernet.cpp
    i) +frameworks/base/core/res/res/drawable/connect_creating.png
       +frameworks/base/core/res/res/drawable/connect_established.png
       +frameworks/base/core/res/res/drawable/connect_no.png
    j) +frameworks/base/core/res/res/drawable-hdpi/connect_creating.png
       +frameworks/base/core/res/res/drawable-hdpi/connect_established.png
       +frameworks/base/core/res/res/drawable-hdpi/connect_no.png
    k) +frameworks/base/core/res/res/drawable-mdpi/connect_creating.png
       +frameworks/base/core/res/res/drawable-mdpi/connect_established.png
       +frameworks/base/core/res/res/drawable-mdpi/connect_no.png
    l) frameworks/base/core/res/res/values/arrays.xml
    m) frameworks/base/core/res/res/values/config.xml
    n) +frameworks/base/ethernet
    o) frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java
    p) frameworks/base/services/java/com/android/server/ConnectivityService.java
    q) +frameworks/base/services/java/com/android/server/EthernetService.java
    r) frameworks/base/Android.mk

android源码目录下packages/apps/Settings下的改动
    a) +packages/apps/Settings/res/drawable-hdpi/ic_settings_ethernet.png
    b) +packages/apps/Settings/res/drawable-mdpi/ic_settings_ethernet.png
    c) +packages/apps/Settings/res/layout/eth_configure.xml
    d) packages/apps/Settings/res/values/strings.xml
    e) +packages/apps/Settings/res/xml/ethernet_settings.xml
    f) packages/apps/Settings/res/xml/settings.xml
    g) +packages/apps/Settings/src/com/android/settings/ethernet/
    h) +packages/apps/Settings/src/com/android/settings/EthernetSettings.java
    i) packages/apps/Settings/AndroidManifest.xml

build目录的改动
    a) build/core/pathmap.mk 
        在FRAMEWORKS_BASE_SUBDIRS中加入ethernet

    另外还要在init.rc中启动dhcpd服务,如下所示:

   service dhcpcd_eth0 /system/bin/dhcpcd -ABKL
    disabled
    oneshot

上面的这些基本上是整个移植过程,也仅仅是android层的移植,在内核层也要相应的驱动支持,我采用的usb-net 设备。关于内部部分的修改这里就不说了。

     此外提过一个牛人的blog,上面有一些移植过程中出现问题的解决办法。

   http://wifihack.net/blog/2011/08/portethernet-patch-for-android-gingerbread/

原创粉丝点击