现在的位置: 首页 > 综合 > 正文

为Tiny6410Android2.3.4系统添加Ethernet框架支持(含去除状态栏信号图标及增加屏幕超时“永不关屏”选项)

2013年03月08日 ⁄ 综合 ⁄ 共 10542字 ⁄ 字号 评论关闭

http://www.arm9home.net/read.php?tid-17117.html


先分享一下修改后的图片 

1.增加状态栏网络图标(有连接时才显示),去除信号图标 
2. 增加设置“以太网设置”选项 
3. 增加“从不待机”选项,对应的实际值是-1 

 

 

  

 


友善之臂有提供了1个软件用于设置开发板的有线网络。如果你因某些原因不想使用或不方便使用这个软件,本文讲述如何移植让系统框架支持以太网的设置(DHCP动态分配IP或手动静态设置IP) 

主要是利用android-x86现成的Ethernet框架,添加到Tiny6410的android源码中,增加系统对Ethernet的支持。 
本文所用的是友善Tiny6410 2011-11-16版本的Android源代码。所有的修改都是基于此版本进行的。 
如果你懒得修改,可以直接用附件中改好的代码直接覆盖,当然前提是你使用的开发板型号、源代码版本一样才行。附件的内容仅供参考,除了增加Ethernet框架之外,还更改了一些默认设置。 
========================================================================================== 
先把友善android源代码解压放好 
一、准备工具:curl和repo 
yum install curl 
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >
/bin/repo 

chmod a+x /bin/repo 

二、创建文件夹 
mkdir /opt/FriendlyARM/mini6410/ android /android-x86 
cd /opt/FriendlyARM/mini6410/ android /android-x86 

三、全部源码太大,只下载相关部分源码,gingerbread-x86代表2.3版本的源码 
repo init -u git://android-x86.git.sf.net/gitroot/android-x86/x86/platform/manifest.git -b gingerbread-x86 
repo sync platform/frameworks/base 
repo sync platform/packages/apps/Settings 

四、移植framework部分(+号的行代表增加的内容,-号的行代表删除的内容) 
源路径=/opt/FriendlyARM/mini6410/android/android-x86 
目标路径=/opt/FriendlyARM/mini6410/android/Android-2.3.4 
4.1.将源路径framework/base/ethernet 复制到目标路径的framework/base/目录下 

4.2.修改目标路径的framework/base目录下的Android.mk 
    vpn/java/android/net/vpn/IVpnService.aidl \ 
+    ethernet/java/android/net/ethernet/IEthernetManager.aidl \ 
    voip/java/android/net/sip/ISipSession.aidl \ 

4.3. 将源路径文件frameworks/base/services/java/com/android/server/EthernetService.java复制到目标路径frameworks/base/services/java/com/android/server/目录下 

4.4. 修改目标路径framework/base/service/java/com/android/server目录下的ConnectivityService.java文件 
import android.net.wifi.WifiStateTracker; 
+import android.net.ethernet.EthernetStateTracker; 
import android.net.wimax.WimaxManagerConstants; 
//----------------------------------------------------------------------------------------- 
if (mNetAttributes[n.mType] != null) { 
    Slog.e(TAG, "Error in networkAttributes - ignoring attempt to redefine type " + 
        n.mType); 
    continue; 

-if (mRadioAttributes[n.mRadio] == null) { 
+if ((n.mType != ConnectivityManager.TYPE_ETHERNET) && (mRadioAttributes[n.mRadio] == null)) { //by bjw 
    Slog.e(TAG, "Error in networkAttributes - ignoring attempt to use undefined " + 
        "radio " + n.mRadio + " in network type " + n.mType); 
    continue; 

mNetAttributes[n.mType] = n; 
mNetworksDefined++; 
} catch(Exception e) { 
+Slog.e(TAG, "wrong dev exception " + e); //by bjw 
// ignore it - leave the entry null 

//----------------------------------------------------------------------------------------- 
wifiService.startWifi(); 
mNetTrackers[ConnectivityManager.TYPE_WIFI] = wst; 
wst.startMonitoring(); 
break; 
+case ConnectivityManager.TYPE_ETHERNET: //by bjw 
+if (DBG) Slog.v(TAG, "#########Starting Ethernet Service.");  //by bjw 
+EthernetStateTracker est = new EthernetStateTracker(context, mHandler);  //by bjw 
+EthernetService ethService = new EthernetService(context, est);  //by bjw 
+ServiceManager.addService(Context.ETHERNET_SERVICE, ethService);  //by bjw 
+mNetTrackers[ConnectivityManager.TYPE_ETHERNET] = est;  //by bjw 
+est.startMonitoring(); //by bjw 
+break;//by bjw 
case ConnectivityManager.TYPE_MOBILE: 
//----------------------------------------------------------------------------------------- 
if (noMobileData) { 
    if (DBG) Slog.d(TAG, "tearing down WiMAX networks due to setting"); 
    mNetTrackers[netType].teardown(); 

break; 
default: 
// Slog.e(TAG, "Trying to create a DataStateTracker for an unknown radio type " + 
// mNetAttributes[netType].mRadio); 

4.5. 将源路径framework/base/core/jni/android_net_ethernet.cpp复制到目标路径framework/base/core/jni/目录下 

4.6. 修改目标路径framework/base/core/jni/AndroidRuntime.cpp文件 
extern int register_android_net_wifi_WifiManager(JNIEnv* env); 
+extern int register_android_net_ethernet_EthernetManager(JNIEnv* env); 
extern int register_android_security_Md5MessageDigest(JNIEnv *env); 
//----------------------------------------------------------------------------------------- 
REG_JNI(register_android_net_wifi_WifiManager), 
+REG_JNI(register_android_net_ethernet_EthernetManager), 
REG_JNI(register_android_nfc_NdefMessage), 

4.7. 修改目标路径framework/base/core/jni/Android.mk文件,添加ethernetJNI接口文件的编译项 
android_net_wifi_Wifi.cpp \ 
+android_net_ethernet.cpp \ 
android_nio_utils.cpp \ 

4.8. 修改目标路径framework/base/java/android/content/Context.java 
public static final String WIFI_SERVICE = "wifi"; 
+public static final String ETHERNET_SERVICE = "ethernet"; 

4.9. 修改目标路径frameworks/base/core/java/android/provider/Settings.java 
        public static final String WIFI_ON = "wifi_on"; 

+        /** 
+         * 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"; 

4.10. 修改目标路径frameworks/base/core/java/android/app/ContextImpl.java 
import android.net.wifi.WifiManager; 
+import android.net.ethernet.IEthernetManager;//by bjw 
+import android.net.ethernet.EthernetManager; //by bjw 
import android.nfc.NfcManager; 
//----------------------------------------------------------------------------------------- 
private static WifiManager sWifiManager; 
+private static EthernetManager sEthernetManager; //by bjw 
private static LocationManager sLocationManager; 
//----------------------------------------------------------------------------------------- 
    } else if (WIFI_SERVICE.equals(name)) { 
        return getWifiManager(); 
+    } else if (ETHERNET_SERVICE.equals(name)) {  //by bjw 
+        return getEthernetManager();  //by bjw 
    } else if (NOTIFICATION_SERVICE.equals(name)) { 
        return getNotificationManager(); 
//----------------------------------------------------------------------------------------- 
return sWifiManager; 
    } 
+    private EthernetManager getEthernetManager()  //by bjw 
+    {   
+        synchronized (sSync) {   
+            if (sEthernetManager == null) {     
+                if (b == null) { 
+                        Log.w(TAG, "Error getting service name:" + ETHERNET_SERVICE); 
+                } 
+                IBinder b = ServiceManager.getService(ETHERNET_SERVICE);   
+                IEthernetManager service = IEthernetManager.Stub.asInterface(b);   
+                sEthernetManager = new EthernetManager(service, mMainThread.getHandler());   
+            }   
+        }   
+        return sEthernetManager;   
+    } 
private NotificationManager getNotificationManager() { 

4.11. 修改目标路径frameworks/base/core/res/res/values/config.xml 
<item><xliff:g id="id">wifi</xliff:g></item> 
+<item><xliff:g id="id">ethernet</xliff:g></item> 
<item><xliff:g id="id">cdma_eri</xliff:g></item> 
//----------------------------------------------------------------------------------------- 
<item>"mobile_hipri,5,0,3"</item> 
+<item>"ethernet,9,9,1"</item> 
</string-array> 

五、移植packages部分 
5.1.复制源路径packages/apps/Settings/src/com/android/settings/ethernet目录到目标路径packages/apps/Settings/src/com/android/settings/目录下; 

5.2.复制源路径packages/apps/Settings/src/com/android/settings/EthernetSettings.java到目标路径packages/apps/Settings/src/com/android/settings/目录下; 

5.3.复制源路径packages/apps/Settings/res/drawable-hdpi/ic_settings_ethernet.png到目标路径packages/apps/Settings/res/drawable-hdpi/目录下 

5.4.复制源路径packages/apps/Settings/res/drawable-mdpi/ic_settings_ethernet.png到目标路径packages/apps/Settings/res/drawable-mdpi/目录下 

5.5.复制源路径packages/apps/Settings/res/layout/eth_configure.xml到目标路径packages/apps/Settings/res/layout/目录下 

5.6.复制源路径packages/apps/Settings/res/xml/ethernet_settings.xml到目标路径packages/apps/Settings/res/xml/目录下 

5.7. 修改目标路径文件packages/apps/Settings/res/values/strings.xml 
<string name="sound_category_feedback_title">Feedback</string> 
+<!-- Ethernet configuration dialog -->   
+<string name="eth_config_title">Configure Ethernet device</string>   
+<string name="eth_setting">Ethernet setting</string>   
+<string name="eth_dev_list">Ethernet Devices:</string>   
+<string name="eth_con_type">Connection Type</string>   
+<string name="eth_con_type_dhcp">DHCP</string>   
+<string name="eth_con_type_manual">Static IP</string>   
+<string name="eth_dns">DNS address</string>   
+<string name="eth_gw">Default Gateway</string>   
+<string name="eth_ipaddr">IP address</string>   
+<string name="eth_quick_toggle_title">Ethernet</string>   
+<string name="eth_quick_toggle_summary">Turn on Ethernet</string>   
+<string name="eth_radio_ctrl_title">Ethernet configuration</string>   
+<string name="eth_conf_perf_title">Ethernet configuration</string>   
+<string name="eth_conf_summary">Configure Ethernet devices</string>   
+<string name="eth_mask">Netmask</string>   
+<string name="eth_toggle_summary_off">Turn off Ethernet</string>   
+<string name="eth_toggle_summary_on">Turn on Ethernet</string>   

5.8.修改目标路径packages/apps/Settings/res/values/arrays.xml 
    <string-array name="screen_timeout_entries"> 
        <item>15 seconds</item> 
        <item>30 seconds</item> 
        <item>1 minute</item> 
        <item>2 minutes</item> 
        <item>10 minutes</item> 
        <item>30 minutes</item> 
+        <item>Never Timeout</item> 
    </string-array> 
//----------------------------------------------------------------------------------------- 
    <!-- Do not translate. --> 
    <string-array name="screen_timeout_values" translatable="false"> 
        <!-- Do not translate. --> 
        <item>15000</item> 
        <!-- Do not translate. --> 
        <item>30000</item> 
        <!-- Do not translate. --> 
        <item>60000</item> 
        <!-- Do not translate. --> 
        <item>120000</item> 
        <!-- Do not translate. --> 
        <item>600000</item> 
        <!-- Do not translate. --> 
        <item>1800000</item> 
+       <!-- Do not translate. --> 
+       <item>-1</item> 
</string-array> 

5.9.修改目标路径文件packages/apps/Settings/res/values-zh-rCN/arrays.xml 
  <string-array name="screen_timeout_entries"> 
    <item msgid="3342301044271143016">"15 秒"</item> 
    <item msgid="8881760709354815449">"30 秒"</item> 
    <item msgid="7589406073232279088">"1 分钟"</item> 
    <item msgid="7001195990902244174">"2 分钟"</item> 
    <item msgid="5721688686241190620">"10 分钟"</item> 
    <item msgid="7156442995039264948">"30 分钟"</item> 
+   <item msgid="1781492122915870416">"从不待机"</item> 
  </string-array> 

5.10.修改目标路径文件packages/apps/Settings/res/ values-zh-rCN-nokeys/strings.xml 
<string name="applications_settings_summary" msgid="6616938758022986257">"管理应用程序"</string> 
+    <!-- Ethernet configuration dialog -->   
+    <string name="eth_config_title">"设置以太网设备"</string>   
+    <string name="eth_

抱歉!评论已关闭.