您的位置:首页 > 理论基础 > 计算机网络

基于安卓的rndis驱动的usb网络共享的实现

2016-08-26 18:02 585 查看
开发环境:

硬件;三星s5pv210 

软件;linux3.0.8内核(用于android)

文件系统;嵌入式qt文件系统

内核配置

                --- USB Gadget Support                                                                        | |  

  | |                        [ ]   Debugging messages (DEVELOPMENT)                                                        | |  

  | |                        [ ]   Debugging information files (DEVELOPMENT)                                               | |  

  | |                        (2)   Maximum VBUS Power usage (2-500 mA)                                                     | |  

  | |                              USB Peripheral Controller (S3C HS USB OTG Device)  --->                                 | |  

  | |                              *** NOTE: S3C OTG device role enables the controller driver below ***                   | |  

  | |                        <*>   S3C high speed(2.0, dual-speed) USB OTG device                                          | |  

  | |                                S3C OTGD transfer mode (enabled DMA MODE)  --->                                       | |  
  | |                        <*>   USB Gadget Drivers (Android Gadget)  --->                                               | |  

  | |                                Android Gadget                                                                        | |  

  | |                        [*]       Use double word aligned                                                             | |  

  | |                                                                                   

注意:210平台的这个内核必须勾选Use double word aligned,否则网络通不了.

启动脚本配置

#/bin/sh

echo LGE > /sys/class/android_usb/adroid0/f_rndis/manufacturer

echo 18d1 > /sys/class/android_usb/android0/f_rndis/vendorID

echo 1 > /sys/class/android_usb/android0/f_rndis/wceis

echo 0 > /sys/class/android_usb/android0/enable

echo 18d1 > /sys/class/android_usb/android0/idVendor

echo 4ee4 > /sys/class/android_usb/android0/idProduct

echo 239 > /sys/class/android_usb/android0/bDeviceClass

echo 2 > /sys/class/android_usb/android0/bDeviceSubClass

echo 1 > /sys/class/android_usb/android0/bDeviceProtocol

echo rndis,mass_storage > /sys/class/android_usb/android0/functions

echo /dev/mmcblk1p1 > /sys/class/android_usb/android0/f_mass_storage/lun/file

echo 1 > /sys/class/android_usb/android0/enable

sleep 1

ifconfig rndis0 down

ifconfig rndis0 192.168.8.1 up

执行完毕上述脚本,即实现了rndis,和U盘的2个功能,如果需要实现开启usb的其他功能,参见下面的说明

# Copyright 2013 The Android Open Source Project

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

#      http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

on init

    write /sys/class/android_usb/android0/f_rndis/manufacturer LGE

    write /sys/class/android_usb/android0/f_rndis/vendorID 18D1

    write /sys/class/android_usb/android0/f_rndis/wceis 1

on boot

    write /sys/class/android_usb/android0/iSerial ${ro.serialno}

    write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}

    write /sys/class/android_usb/android0/iProduct ${ro.product.model}

# MTP

on property:sys.usb.config=mtp

    stop adbd

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE1

    write /sys/class/android_usb/android0/bDeviceClass 0

    write /sys/class/android_usb/android0/bDeviceSubClass 0

    write /sys/class/android_usb/android0/bDeviceProtocol 0

    write /sys/class/android_usb/android0/functions mtp

    write /sys/class/android_usb/android0/enable 1

    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=mtp,adb

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE2

    write /sys/class/android_usb/android0/bDeviceClass 0

    write /sys/class/android_usb/android0/bDeviceSubClass 0

    write /sys/class/android_usb/android0/bDeviceProtocol 0

    write /sys/class/android_usb/android0/functions mtp,adb

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

# rndis

on property:sys.usb.config=rndis

    stop adbd

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE3

    write /sys/class/android_usb/android0/bDeviceClass 239

    write /sys/class/android_usb/android0/bDeviceSubClass 2

    write /sys/class/android_usb/android0/bDeviceProtocol 1

    write /sys/class/android_usb/android0/functions rndis

    write /sys/class/android_usb/android0/enable 1

    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=rndis,adb

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE4

    write /sys/class/android_usb/android0/bDeviceClass 239

    write /sys/class/android_usb/android0/bDeviceSubClass 2

    write /sys/class/android_usb/android0/bDeviceProtocol 1

    write /sys/class/android_usb/android0/functions rndis,adb

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

# PTP

on property:sys.usb.config=ptp

    stop adbd

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE5

    write /sys/class/android_usb/android0/bDeviceClass 0

    write /sys/class/android_usb/android0/bDeviceSubClass 0

    write /sys/class/android_usb/android0/bDeviceProtocol 0

    write /sys/class/android_usb/android0/functions ptp

    write /sys/class/android_usb/android0/enable 1

    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=ptp,adb

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18D1

    write /sys/class/android_usb/android0/idProduct 4EE6

    write /sys/class/android_usb/android0/bDeviceClass 0

    write /sys/class/android_usb/android0/bDeviceSubClass 0

    write /sys/class/android_usb/android0/bDeviceProtocol 0

    write /sys/class/android_usb/android0/functions ptp,adb

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

# diag

on property:sys.usb.config=diag

    stop adbd

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 1004

    write /sys/class/android_usb/android0/idProduct 61F1

    write /sys/class/android_usb/android0/bDeviceClass 239

    write /sys/class/android_usb/android0/bDeviceSubClass 2

    write /sys/class/android_usb/android0/bDeviceProtocol 1

    write /sys/class/android_usb/android0/f_acm/acm_transports smd

    write /sys/class/android_usb/android0/f_diag/clients diag

    write /sys/class/android_usb/android0/functions acm,diag,mtp,adb

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

# USB midi configuration

on property:sys.usb.config=midi

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18d1

    write /sys/class/android_usb/android0/idProduct 4ee8

    write /sys/class/android_usb/android0/functions ${sys.usb.config}

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

# USB midi configuration, with adb

on property:sys.usb.config=midi,adb

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 18d1

    write /sys/class/android_usb/android0/idProduct 4ee9

    write /sys/class/android_usb/android0/functions ${sys.usb.config}

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=diag,adb

    stop adbd

    write /sys/class/android_usb/android0/enable 0

    write /sys/class/android_usb/android0/idVendor 1004

    write /sys/class/android_usb/android0/idProduct 61F1

    write /sys/class/android_usb/android0/bDeviceClass 239

    write /sys/class/android_usb/android0/bDeviceSubClass 2

    write /sys/class/android_usb/android0/bDeviceProtocol 1

    write /sys/class/android_usb/android0/f_acm/acm_transports smd

    write /sys/class/android_usb/android0/f_diag/clients diag

    write /sys/class/android_usb/android0/functions acm,diag,mtp,adb

    write /sys/class/android_usb/android0/enable 1

    start adbd

    setprop sys.usb.state ${sys.usb.config}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rndis