- │ Prompt: Host for RNDIS and ActiveSync devices (EXPERIMENTAL) │
- │ Defined at drivers/net/usb/Kconfig:234 │
- │ Depends on: NETDEVICES && USB && NET && USB_USBNET && EXPERIMENTAL │
- │ Location: │
- │ -> Device Drivers │
- │ -> Network device support (NETDEVICES [=y]) │
- │ -> USB Network Adapters │
- │ -> Multi-purpose USB Networking Framework (USB_USBNET [=m]) │
- Symbol: USB_ETH_RNDIS [=n] │
- │ Prompt: RNDIS support │
- │ Defined at drivers/usb/gadget/Kconfig:609 │
- │ Depends on: <choice> && USB_ETH │
- │ Location: │
- │ -> Device Drivers │
- │ -> USB support (USB_SUPPORT [=y]) │
- │ -> USB Gadget Support (USB_GADGET [=y]) │
- │ -> USB Gadget Drivers (<choice> [=m]) │
- │ -> Ethernet Gadget (with CDC Ethernet support) (USB_ETH [=n │
- [root@hxy]# find /lib/modules/2.6.18-194.el5/ -name "rndis*"
- /lib/modules/2.6.18-194.el5/kernel/drivers/usb/net/rndis_host.ko
- [root@hxy]# modprobe rndis_host
- [root@hxy]# lsmod | grep rndis_host
- rndis_host 10433 0
- cdc_ether 9793 1 rndis_host
- usbnet 19913 2 rndis_host,cdc_ether
- # insmod g_ether.ko
- g_ether gadget: ing random self ethernet address
- g_ether gadget: using random host ethernet addr
- usb0: MAC de:5e:8b:3d:84:db
- usb0: HOST MAC 32:90:92:52:a9
- g_ethethernet Gadget, morial Day 2008
- g_ether gadget: g_ether ready
- Registered gadget driver 'g_ether'
- hub 1-0:1.0: unable to enumerate USB device 2
- g_ether gadget: high speed config #1: Chernet (ECM)
- # ifconfig usb0 192.168.3.120 up
- usb 1-1: new high speed USB device using ehci_hcd and address 5
- usb 1-1: configuration #1 chosen from 2 choices
- usb0: register 'cdc_ether' at usb-0000:00:1d.7-1, CDC Ethernet Device, 32:90:26:92:52:a9
- #define RNDIS_VENDOR_NUM 0x0525 /* NetChip */
- #define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */
USB驱动代码在/drivers/usb/gadget下,有三个文件:Android.c,f_adb.c,
f_mass_storage.c;g_android.ko 是由这三个文件编译而来,其中android.c 依赖于
f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。
可在android.c中看到:
static int __init android_bind_config(struct usb_configuration *c)
{
struct android_dev *dev = _android_dev;
int ret;
printk(KERN_DEBUG "android_bind_config\n");
ret = mass_storage_function_add(dev->cdev, c, dev->nluns);
if (ret)
return ret;
return adb_function_add(dev->cdev, c);
}
cdc-ncm:
分为HOST端和Device端
在Linux中对应的驱动分别为host driver and gadget driver
Host Driver位于
drivers/net/usb/
gadget driver位于
drivers/usb/gadget/
drivers/net/usb/Kconfig
drivers/net/usb/Makefile
drivers/net/usb/cdc_ether.c
drivers/net/usb/cdc_ncm.c
drivers/net/usb/usbnet.c
drivers/usb/gadget/Kconfig
drivers/usb/gadget/Makefile
drivers/usb/gadget/f_ncm.c
drivers/usb/gadget/ncm.c
drivers/usb/gadget/u_ether.c
drivers/usb/gadget/u_ether.h
include/linux/usb/cdc.h
include/linux/usb/ncm.h
include/linux/usb/usbnet.h