Android系统中如何添加USB网络共享
Android系统中如何添加USB网络共享
类别
需求
索引类别
USB网络共享
问题描述
平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享,那么这个时候就需要添加USB网络共享的一些配置,使得产品支持此功能。(以下是个人的一些理解,如有错误,请各位大佬多多指教)
代码关联
对应的代码修改部分如下:
①对应内核中添加配置(系统中添加USB网络驱动)
@@ -837,3 +837,6 @@ CONFIG_ZRAM=yCONFIG_ZRAM_LZ4_COMPRESS=yCONFIG_ZSMALLOC=y# CONFIG_ZSMALLOC_STAT is not set
+CONFIG_USB_USBNET=y
+CONFIG_USB_IPHETH=y
+CONFIG_USB_NET_RNDIS_HOST=y
②在init.rc中增加两个针对usb0的配置服务,才能让framework配置得了usb0网卡(服务是是USB网络共享的核心)
@@ -134,3 +134,16 @@ on property:persist.iso.state=unmounted
#在开机启动的时候会发送一个bootcomplete广播,接收广播后启动scdetect、rootshellserviceon property:dev.bootcomplete=1start scdetectstart rootshellservice
#启动usb网络分配dhcp
+service dhcpcd_usb0 /system/bin/dhcpcd -ABDKL -f/system/etc/dhcpcd/dhcpcd.conf
+ class main
+ disabled
+ oneshot
+ seclabel u:r:dhcp:s0
#启动usb网络分配ip
+service iprenew_usb0 /system/bin/dhcpcd -n
+ class main
+ disabled
+ oneshot
+ seclabel u:r:dhcp:s0
③对应Android源码,frameworks中添加配置(这边主要是讲述网络是如何启动的,是选择那个网络)
/frameworks/base/core/res/res/values/config.xml <bool name="config_enableMonitorInputSource">true</bool>
- <string translatable="false" name="config_ethernet_iface_regex">eth\\d</string>
+ <string translatable="false" name="config_ethernet_iface_regex">eth\\d|usb\\d</string>
上面的作用是提供两种网络的方式,一种是以太网络,一种是走usb共享
/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.javapublic synchronized void start(Context context, Handler target) {Log.i(TAG, "monitoring start");// The services we use.IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);mNMService = INetworkManagementService.Stub.asInterface(b);mEthernetManager = (EthernetManager) context.getSystemService(Context.ETHERNET_SERVICE);//在这里就获取上面设定config_ethernet_iface_regex的值mIfaceMatch = context.getResources().getString(com.android.internal.R.string.config_ethernet_iface_regex);// Create and register our NetworkFactory.mFactory = new LocalNetworkFactory(NETWORK_TYPE, context, target.getLooper());mFactory.setCapabilityFilter(mNetworkCapabilities);mFactory.setScoreFilter(-1); // this set high when we have an ifacemFactory.register();mContext = context;// Start tracking interface change events.mInterfaceObserver = new InterfaceObserver();try {mNMService.registerObserver(mInterfaceObserver);} catch (RemoteException e) {Log.e(TAG, "Could not register InterfaceObserver " + e);}// If an Ethernet interface is already connected, start tracking that.// Otherwise, the first Ethernet interface to appear will be tracked.try {final String[] ifaces = mNMService.listInterfaces();for (String iface : ifaces) {synchronized(this) {//在这里判断是采用哪个网络if (maybeTrackInterface(iface)) { // We have our interface. Track it.// Note: if the interface already has link (e.g., if we// crashed and got restarted while it was running),// we need to fake a link up notification so we start// configuring it. Since we're already holding the lock,// any real link up/down notification will only arrive// after we've done this.if (mNMService.getInterfaceConfig(iface).hasFlag("running")) {updateInterfaceState(iface, true);}break;}}}****}}//在这边可以选择是走那个网络是eth还是usb private boolean maybeTrackInterface(String iface) {// If we don't already have an interface, and if this interface matches// our regex, start tracking it.if (!iface.matches(mIfaceMatch) || isTrackingInterface())return false;if(UbusRpc.isOpenWrt() && !UbusRpc.isOttWifi()){if(!iface.equals("eth9"))return false;} else if(!iface.equals(SystemProperties.get("net.eth.iface", "eth0"))){return false;}Log.d(TAG, "Started tracking interface " + iface);setInterfaceUp(iface);return true;}
④最后在设置一个属性值:setprop net.eth.iface usb0/eth0 (usb0强制网络走手机USB网络共享)
应用层发送一个广播,这样就可以自由的切换是使用USB还是以太网。
Intent intent = new Intent("rtk.intent.action.SET_ETH_IFACE");intent.putExtra("EXTRA_ETH_IFACE"," usb0/eth0 ");sendBroadcast(intent);
对应frameworks的接收应用发送的广播代码:
/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.javaprivate final BroadcastReceiver mIntentReceiver = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if("rtk.intent.action.SET_ETH_IFACE".equals(action)){String iface = intent.getStringExtra("EXTRA_ETH_IFACE");if(iface==null) iface="eth0";SystemProperties.set("net.eth.iface", iface);Log.i(TAG, "restart EthernetNetworkFactory");enforceConnectivityInternalPermission();synchronized (mIpConfiguration) {mTracker.stop(); //重启网络,即调用第③步的startmTracker.start(mContext, mHandler); }}}};
如果没有效果,请排查一下/sys/class/net/中是否有新生成一个usb0的节点,如果没有生成的话排查第①第②步是否正常开启。
知识拓展
参考资料:https://blog.csdn.net/tankai19880619/article/details/44559419?_t=t
改进建议
若有错误请指正,悉心接受大佬的指点 谢谢 ! v。
工作记录。。。。。
Android系统中如何添加USB网络共享相关推荐
- Android设备如何支持iPhone usb网络共享
一般情况下如果iPhone连接到Android机器上,在Android平台硬件支持MFI芯片 + 软件支持Carplay协议才能正常通信.通信走NCM驱动cdc_ncm -> usbnet de ...
- Android12系统上支持Android手机的usb网络共享
Android系统需要支持Android手机通过usb共享过来的网络需要修改以下代码 1.修改内核,添加这几项内核驱动,kernel驱动默认有源码,我们只需配置上就行 +CONFIG_USB_USBN ...
- Android usb网络共享开关
Android7.0 usb网络共享开关 涉及的文件: packages\apps\Settings\src\com\android\settings\TetherSettings.java pack ...
- android usb共享代码,让Android手机具有USB网络共享功能,可以通过USB连接到Internet...
第0章: 什么是USB网络共享功能 最近漫游Windows Phone的世界时,最新鲜的感觉之一就是诺基亚Lumia手机具有有趣的USB绑定功能,该功能使您的手机可以通过USB电缆连接到计算机,您可以 ...
- Android手机通过USB网络共享限速
在 Android上都有USB网络共享的功能,可以直接在手机上通过USB口使用电脑端的网络,有些手机叫"USB绑定",有些手机叫"网络共享". 简单说明一下US ...
- 在Android系统中添加一款新铃声
想在Android系统中添加铃声,可以通过adb push 的方法,但如果要多次修改系统,每次push进去就显得太费劲了,这里有个简单的方法,就是把铃声编译进android 的system.img文件 ...
- 向Android系统中添加模块及产品流程
添加Android模块 一.基础知识: (1)在Android系统中,编译都是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称: (2)为了将模块编译到Android系统中,每个模块都需 ...
- android 8 usb 未连接网络,让安卓手机拥有USB网络共享功能通过USB连上网络
第零章:什么是USB网络共享功能 最近在Windows Phone的世界里漫游了一圈,其中一个很新鲜的感受就是诺基亚Lumia手机有一个很有意思的USB网络共享功能,该功能能让你的手机只要通过USB数 ...
- 如何使用ADB或者shell打开Android的usb网络共享
现在手机不把usb插在电脑上(usb网络共享)这个开关是灰色的不能打开 插上之后可以使用adb命令: #可能的值'mtp', 'ptp', 'rndis', 'midi', 'none' adb sh ...
最新文章
- Thinking in java中关于Exception的一道面试题.
- 浅谈Redis和Hbase
- 使用自定义UISlider控制View亮度
- 通用兄弟元素选择器 E ~ F
- Java工程中引用Base64编码解码小记
- shell学习笔记--自我总结
- 软件项目组织管理(九)项目人力资源管理
- 计算机设备报废流程图,报废流程图.ppt
- e3 v3服务器芯片组,请问e3 1231 v3搭配下面哪款主板性价比最高?最适合?为什么?
- 人间不值得?250000条数据分析李诞是不是被骂火的
- 转:python的内置对象
- [POI2004]GRA
- Android 里的adb命令
- MAC 外接键盘卡顿处理
- 注意力机制论文:CCNet: Criss-Cross Attention for Semantic Segmentation及其PyTorch实现
- blowfish java_blowfish加密算法
- 开题报告:基于java医院在线预约挂号系统 毕业设计论文开题报告模板
- 编写Java脚本统计工程代码总行数
- 嵌入式软件的调试工具
- 金融财务英译汉常用词怎样翻译
热门文章
- node 图片加水印
- E. XOR Triangle 数位dp
- 基于pointnet的3D物体分类和分割检测(复现不出来你直接敲我家门)
- tx2 1804 soure list
- 1.4_8 Axure RP 9 for mac 高保真原型图 - 案例7 【旋转的唱片5】进度条计时器 关联
- 看数字化转型标杆招商银行,如何借助校招抢夺金融科技人才?牛客独家大揭秘!
- (Java版)颈椎病治疗最近云海学长一直对着电脑改bug, 颈椎不舒服, 希望各位小伙伴帮云海学长治治提供一张图片, 将图片旋转后再发给云海学长, 这样学长看图的时候就需要歪着脖子, 时间久了,
- android 通过wifi调用打印机
- 如何用一简单的CSS制作响应式HTML网页
- 二级python多少分过_计算机二级考什么?计算机二级考试多少分及格?