MTK手機晶片如何添加乙太網路卡支援(上層部分),mtk乙太網路卡

來源:互聯網
上載者:User

MTK手機晶片如何添加乙太網路卡支援(上層部分),mtk乙太網路卡

接:http://blog.csdn.net/zangcf/article/details/40870369,這邊文章只描述如何移植底層部分

1, 由於android本身沒有Ethernet的架構,我們必須從Android-x86上面移植,Android-x86是一個開源項目,大家可以翻牆從Google網站下載,或者是從這裡

http://download.csdn.net/detail/zangcf/8187113下載。
這個包包含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.mk
FRAMEWORKS_BASE_SUBDIRS變數上加上ethernet
3,我們知道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的工作原理,請參考文章:http://blog.csdn.net/cupidove/article/details/23122003
4,因為我們需要根據系統屬性值變化來啟動dhcp等,所以,我們必須修改/system/init/property_service.c的property_perms[]添加:
+    { "rw.",              AID_SYSTEM,   0 },
+    { "net.",             AID_DHCP,     0 },
關於屬性之修改啟動服務,請參考文章:http://blog.csdn.net/zmyde2010/article/details/6312615
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.cpp
copy檔案android_net_ethernet.cpp到目錄framework/core/jni/
修改介面檔案AndroidRuntime.cpp和android_net_NetUtils.cpp


12,修改系統設定檔
frameworks/core/res/res/values/config.xml


13, 拷貝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.aidl


14,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_eth0


on property:init.svc.dhcpcd_eth0=stopped
    start dhcpcd_eth0


至此,乙太網路卡可以正常工作,後面根據需要修改設定和systemui中的內容就可以了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.