文章目录

  • 一、代码修改:
    • 1.内核添加RNDIS的支持
    • 2.init.rc中增加两个针对usb0的配置服务
    • 3.frameworks中修改配置
  • 二、调试

测试平台:MT2712,Android9.0,Linux4.9
使用场景:
Android车机,通过USB线连接T-box、手机、PC电脑,进而使用他们的网络上网。
其实Android系统已经支持USB共享网络,但相应的产品系统中还未开启USB共享网络,那么这个时候就需要添加USB网络共享的一些配置,使得产品支持此功能。
Android USB网络共享基于RNDIS实现。

一、代码修改:

1.内核添加RNDIS的支持

CONFIG_USB_USBNET=y
CONFIG_USB_NET_DM9601=y
CONFIG_USB_NET_SR9700=y
CONFIG_USB_NET_SMSC75XX=y
CONFIG_USB_NET_SMSC95XX=y
+CONFIG_USB_NET_RNDIS_HOST=y

具体的网卡名称:
路径:kernel-4.9/drivers/net/usb/usbnet.c

usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
{.........................................dev->net = net;strcpy (net->name, "usb%d");printk("usbnet_probe usb");memcpy (net->dev_addr, node_id, sizeof node_id);
........................................// allow device-specific bind/init procedures// NOTE net->name still not usable ...if (info->bind) {// heuristic:  "usb%d" for links we know are two-host,// else "eth%d" when there's reasonable doubt.  userspace// can rename the link if it knows better.if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||(net->dev_addr [0] & 0x02) == 0))strcpy (net->name, "eth%d");/* WLAN devices should always be named "wlan%d" */if ((dev->driver_info->flags & FLAG_WLAN) != 0)strcpy(net->name, "wlan%d");/* WWAN devices should always be named "wwan%d" */if ((dev->driver_info->flags & FLAG_WWAN) != 0)strcpy(net->name, "wwan%d");}}

网卡名称默认为usbx,如果是以太网,名称改为ethx,如果是WLAN,名称改为wlanx。

2.init.rc中增加两个针对usb0的配置服务

增加两个针对usb0的配置服务,才能让framework配置得了usb0网卡(服务是是USB网络共享的核心)
具体在MT2712平台,修改的文件为:init.mt2712.ab.emmc.rc

#启动usb网络分配dhcp
service dhcpcd_usb0 /system/bin/dhcpcd -ABDKL -f/system/etc/dhcpcd/dhcpcd.confclass maindisabledoneshotseclabel u:r:dhcp:s0
#启动usb网络分配ip
service iprenew_usb0 /system/bin/dhcpcd -nclass maindisabledoneshotseclabel u:r:dhcp:s0

3.frameworks中修改配置

对应Android源码,frameworks中添加配置(这边主要是讲述网络是如何启动的,是选择那个网络)
frameworks/base/core/res/res/values/config.xml
原始为:

<string translatable="false" name="config_ethernet_iface_regex">eth\\d</string>

即支持以太网
修改为:

<string translatable="false" name="config_ethernet_iface_regex">usb\\d</string>

即支持USB共享网络。
也可以修改为同时支持以太网和USB共享网络,再根据实际情况,由APP决定使用哪一种网络。

<string translatable="false" name="config_ethernet_iface_regex">eth\\d|usb\\d</string>

config_ethernet_iface_regex的调用流程如下:
路径:frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java

EthernetTracker(Context context, Handler handler) {mHandler = handler;// The services we use.IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);mNMService = INetworkManagementService.Stub.asInterface(b);在这里就获取上面设定config_ethernet_iface_regex的值// Interface match regex.mIfaceMatch = context.getResources().getString(com.android.internal.R.string.config_ethernet_iface_regex);// Read default Ethernet interface configuration from resourcesfinal String[] interfaceConfigs = context.getResources().getStringArray(com.android.internal.R.array.config_ethernet_interfaces);for (String strConfig : interfaceConfigs) {parseEthernetConfig(strConfig);}mConfigStore = new EthernetConfigStore();NetworkCapabilities nc = createNetworkCapabilities(true /* clear default capabilities */);mFactory = new EthernetNetworkFactory(handler, context, nc);mFactory.register();
}private void maybeTrackInterface(String iface) {if (DBG) Log.i(TAG, "maybeTrackInterface " + iface);// If we don't already track this interface, and if this interface matches// our regex, start tracking it.if (!iface.matches(mIfaceMatch) || mFactory.hasInterface(iface)) {return;}if (mIpConfigForDefaultInterface != null) {updateIpConfiguration(iface, mIpConfigForDefaultInterface);mIpConfigForDefaultInterface = null;}addInterface(iface);}

同时支持以太网和USB共享网络的情况,可以参考:https://blog.csdn.net/xcyansmile/article/details/109361979

二、调试

Android车机与T-box通过USB连接,Android车机为Host,T-box为Device。
1.准备
Android手机设为USB共享网络:
设置->无线和网络->移动网络共享->USB共享网路
2.USB连接后,在Android车机输入lsusb,以确认有新的USB设备插入。

Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 2c7c:0125
Bus 004 Device 001: ID 1d6b:0003
Bus 002 Device 001: ID 1d6b:0003

未插入前为:

Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0003
Bus 002 Device 001: ID 1d6b:0003

3.查看网卡是否生成:ifconfig -a

console:/ # ifconfig -a
ip6tnl0   Link encap:UNSPEC  NOARP  MTU:1452  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 TX bytes:0 p2p0      Link encap:Ethernet  HWaddr 02:76:1c:60:1a:16BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0 wlan0     Link encap:Ethernet  HWaddr 00:76:1c:60:1a:16  Driver mtk_sdio_clientUP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0 sit0      Link encap:IPv6-in-IPv4  NOARP  MTU:1480  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 TX bytes:0 ip_vti0   Link encap:UNSPEC  NOARP  MTU:1480  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 TX bytes:0 tunl0     Link encap:UNSPEC  NOARP  MTU:1480  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 TX bytes:0 ip6_vti0  Link encap:UNSPEC  NOARP  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 TX bytes:0 usb0      Link encap:Ethernet  HWaddr 36:28:7d:39:88:1b  Driver rndis_hostinet addr:192.168.225.24  Bcast:192.168.225.255  Mask:255.255.255.0 inet6 addr: fe80::c888:d5a1:7f11:5ea0/64 Scope: LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:250 errors:0 dropped:0 overruns:0 frame:0 TX packets:333 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:72265 TX bytes:70616 eth0      Link encap:Ethernet  HWaddr 00:55:7b:b5:7d:f7  Driver dwmac-mediatekBROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0 Interrupt:13 Base address:0x4000 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0 inet6 addr: ::1/128 Scope: HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:43 errors:0 dropped:0 overruns:0 frame:0 TX packets:43 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:3860 TX bytes:3860

这里有网卡usb0生成。

4.确认联网是否成功:ifconfig

console:/ # ifconfig
wlan0     Link encap:Ethernet  HWaddr 00:76:1c:60:1a:16  Driver mtk_sdio_clientUP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 TX bytes:0 usb0      Link encap:Ethernet  HWaddr 36:28:7d:39:88:1b  Driver rndis_hostinet addr:192.168.225.24  Bcast:192.168.225.255  Mask:255.255.255.0 inet6 addr: fe80::c888:d5a1:7f11:5ea0/64 Scope: LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:279 errors:0 dropped:0 overruns:0 frame:0 TX packets:361 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:73769 TX bytes:74424 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0 inet6 addr: ::1/128 Scope: HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:43 errors:0 dropped:0 overruns:0 frame:0 TX packets:43 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:3860 TX bytes:3860

看到usb0,即表示联网成功,**“RX bytes:73769 TX bytes:74424”**表示接收和发送的数据量。

注意事项:保证Linux kernel中生成的网卡名和frameworks中联网使用的网卡名一致。

参考:https://blog.csdn.net/xcyansmile/article/details/109361979

Android系统添加USB共享网络相关推荐

  1. Android设备通过USB共享网络给OpenWrt路由器

    1️⃣前言 如果随身WiFi自带的热点不稳定的话,可以考虑插到有USB口的OpenWrt路由器上,减少随身WiFi的负荷,使网络更为稳定. 但有的路由器虽然有USB口,也是OpenWrt系统,连接设备 ...

  2. 为android系统添加USB AUDIO设备的放音和录音功能

    转载请注明出处:http://blog.csdn.net/adits/article/details/8242146 开发环境简介 1. 主机系统: Unbuntu10.10 2. android系统 ...

  3. 为android系统添加USB AUDIO设备的放音和录音功能(转载)

    开发环境简介 1. 主机系统: Unbuntu10.10 2. android系统版本: 4.0.3(Linux kernel 3.0.8) 综述 android的音频系统非常庞大复杂:涉及到java ...

  4. android ubuntu网络,Android手机利用USB共享网络通过Ubuntu连接网络

    注意,是手机利用PC网络连网,而不是PC利用手机网络连网. 前提: 1.Ubuntu正常连接网络 2.手机已root 3.手机上安装了busybox 步骤: 1.设置Ubuntu上的IP转发 查看&q ...

  5. Linux使用Android的USB共享网络

    1.Android手机设置: 打开"设置"-"其他无线连接"-"USB共享网络",点击打开. 2.Linux系统设置: 通过ifconfig ...

  6. 如何消除USB共享网络导致的Windows系统中自动增加的网络设备序列号?

    本人经常用usb共享网络给主机上网,但是每次重新插上线后,windows系统就会弹出确认连接网络X的提示信息,问题就出在这个序列号X上,每次都会自动加一,从2,3,4 ... 一直增长下去,作为一个强 ...

  7. xp usb android,windowsxp系统设置usb手机网络分享的方法

    现在,我们只要使用USB数据线将手机与计算机绑定,就能轻松实现计算机共享手机的互联网连接.不过,一些xp系统用户在操作过程中,也会遇到连接失败的情况.这该怎么办呢?下面,系统城小编就为大家详细介绍下x ...

  8. ubuntu电脑使用Adroid手机中的USB共享网络上网

    ubuntu电脑使用Adroid手机中的<USB共享网络>上网  系统:ubuntu14.04 x64测试通过. 手机:红米1sc. 一:在电脑有网络的时候,更新ubuntu到最新. su ...

  9. 如何打开usb计算机连接网络设置,usb共享网络怎么用

    usb共享网络不知道大家了解多少,简单来说,usb共享网络这个功能就是为那些无法用wifi上网的朋友而开发的一个功能,这个功能目前可以在搭载安卓系统的手机上实现,实用价值还是非常高的.那么usb共享网 ...

最新文章

  1. 虚拟化文件服务器,VMware虚拟化效率之文件服务器性能测试(上)
  2. 算法73----用户喜好
  3. 笔记合并_.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)学习笔记(上)...
  4. python视频课程推荐-《Python从小白到大牛》全集视频课程介绍
  5. 大量数据+同步+多线程_Vulkan 多线程渲染
  6. LeetCode#70 Climbing Stairs
  7. 【报告分享】2020年中国在线教育创新企业榜单.pdf(附下载链接)
  8. 机器学习 Machine Learning中正则化的学习笔记~
  9. matlab入门(适合初学者)
  10. SSM项目实战之八:静态资源文件的整合
  11. HTMLifier将scratch游戏打包为html文件
  12. Typora的历史版本下载地址
  13. 隧道技术_隧道施工技术汇编
  14. 绿叶制药阿尔茨海默病创新药利斯的明多日透皮贴剂在英国获批上市;云顶新耀与AbCellera达成合作 | 医药健闻...
  15. 有关获取并保存微信头像到本地服务器
  16. Unity----VR摄像机(浅谈)
  17. 软考答题卡的填涂注意事项?须知
  18. VSCode远程连接服务器使用R语言
  19. npm 启动项目报错 Cannot find module ‘\@babel\compat-data\data\corejs3-shipped-proposals‘
  20. android开发沉浸式标题栏_android实现沉浸式状态栏

热门文章

  1. Adreno Profiler 提取手机游戏资源
  2. 墨客科技执行董事袁英:企业拥有基于公链之上自主可控的专属应用链是行业应用趋势...
  3. 关于微信小程序内嵌的H5页面阿里云点播视频获取视频播放凭证
  4. 学计算机人都很自私,心理学家:内心极度虚伪的人,往往都有这三个特征,趁早远离!...
  5. Tesla M40 训练机组装与散热改造
  6. unity材质球发光_Unity利用材质自发光实现物体闪烁
  7. c语言 猜数字小游戏
  8. android fagment 重叠问题
  9. Maven手动导入依赖
  10. Kotlin学习(7):返回和跳转