Linux Windows下USB RNDIS網路傳輸方式詳解
- │ 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 │
- [[email protected]]# find /lib/modules/2.6.18-194.el5/ -name "rndis*"
- /lib/modules/2.6.18-194.el5/kernel/drivers/usb/net/rndis_host.ko
- [[email protected]]# modprobe rndis_host
- [[email protected]]# 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
相關推薦
Linux Windows下USB RNDIS網路傳輸方式詳解
在介紹USB的驅動開發時,我通常會用用Linux的的USB網路來演示,它相容RNDIS網路,一臺Linux即可充當USB的device端,也可以由另一臺Linux來充當USB的Host端,Host端的也可以由安裝的微軟的標準的Rndis驅動來充當. 這種網路有相
一、Linux學習筆記:虛擬機器設定中的各種網路連線方式詳解
說明:我本機安裝的VMWare10,吳老師的視訊教程用的是VirtualBox,配置虛擬機器連線方式是HostOnly。我在本機用VMWare使用HostOnly連線方式未配置成功:虛擬機器能ping通宿主機,但是宿主機ping不同虛擬機器,不知原因何在。因此改用
nginx-1.15.5 windows下 64位版本編譯過程詳解
編譯原始碼、工具、指令碼等和釋出在下面地址: 原始碼準備: 官網釋出的NGINX原始碼,不包含windows編譯部分,但是包含了主要的原始碼(片斷一): 下載地址:http://nginx.org/download/nginx-1.15.5.tar.gz windo
Android進階 一 幾種網路請求方式詳解
Ref:http://blog.csdn.net/zuolongsnail/article/details/6373051 Android應用經常會和伺服器端互動,這就需要手機客戶端傳送網路請求,下面介紹四種常用網路請求方式,我這邊是通過Android單元測試來完成這四種方法的,還不清楚Androi
Windows下的Mysql安裝和超詳解入門教程推薦
一、Windows下的Mysql安裝 在Windows下,MySQL有兩種安裝方式: 1、ZIP安裝 ZIP安裝包下載連結:https://dev.mysql.com/downloads/mysql/ 點選download之後,出現下方圖片,無需註冊,點選下圖中的
VirtualBox中的網路連線方式詳解
如果出現主機無法ping通虛擬機器的情況,請首先確認虛擬機器防火牆已關閉。 一、NAT模式 特點: 1、如果主機可以上網,虛擬機器可以上網 2、虛擬機器之間不能ping通 3、虛擬機器可以ping通主機(此時ping虛擬機器的閘道器,即是ping主機) 4、
Android中的幾種網路請求方式詳解
Android應用經常會和伺服器端互動,這就需要手機客戶端傳送網路請求,下面介紹四種常用網路請求方式,我這邊是通過Android單元測試來完成這四種方法的,還不清楚Android的單元測試的同學們請看Android開發技巧總結中的Android單元測試的步驟一文。 java
全網最全最詳細的Windows下安裝Anaconda2 / Anaconda3(圖文詳解)
不多說,直接上乾貨! 說明: Anaconda2-5.0.0-Windows-x86_64.exe安裝下來,預設的Python2.7 Anaconda3-4.2.0-Windows-x86_64.exe安裝下來,預設的Python3.5 Ana
計算機網路-傳輸層詳解
一、傳輸層的服務基本原理 1.多路複用和解複用(分路)技術 複用是指:傳送方的不同的應用程序都可以使用同一個傳輸層協議傳送資料; 分路技術是指:接收方的傳輸層剝去報文首部之後能把這些資料正確的傳輸到正確的應用程序上。 2.可靠資料傳輸 3.流量控制和擁塞控制 二、傳輸層提
Linux / Mac 下 基本的 bash shell 命令詳解(touch 、cp、mv、rm)
前言 這一篇主要說了touch,cp,mv,rm這幾個很基本常用的命令。部落格會同時釋出在簡書和CSDN,希望大家支援。 處理檔案 bash shell 提供了很多在Linux檔案系統上操作檔案的命令。 建立檔案 touch 可以使用touch
四種網路請求方式詳解
記錄四種常用網路請求方式的示例程式碼: java.net包中的HttpURLConnection類 Get方式: // Get方式請求 public static void requestByGet() throws Exception
Windows下啟動RabbitMQ服務及安裝詳解
安裝詳解步驟如下及問題的解決: RabbitMQ Service預設是自動勾選中的,這裡我們取消勾選。如選中啟動RabbitMQ服務時會報如下圖錯誤: 安裝完成後,Erlang和RabbitMQ環境變數是沒有配置的,需要自己手動去配置,如下圖:
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html 先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大
linux/windows下獲取gcc(mingw)編譯器預定義巨集的方式
我們在閱讀一些原始碼時經常發現類似這樣的巨集WIN32,_WIN64,__x86_64,__linux卻找不到在哪裡定義的,這些其實是編譯器預定義的巨集。在不同的作業系統內容不同。 為了知道gcc編譯
c++ 網絡編程(四)TCP/IP LINUX/windows下 socket 基於I/O復用的服務器端代碼 解決多進程服務端創建進程資源浪費問題
linux系統中 cin 通過 sel print 大小 查看 服務 集合 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,繼上一篇說到多進程服務端也是有缺點的,每創建一個
Windows下USB磁碟開發系列二:列舉系統中所有USB裝置
上篇 《Windows下USB磁碟開發系列一:列舉系統中U盤的碟符》介紹了很簡單的獲取系統U盤碟符的辦法,現在介紹下如何列舉系統中所有USB裝置(不光是U盤)。 主要呼叫的API如下: 1,呼叫SetupDiGetClassDevs()獲取指定裝置型別的控制代碼; 2,呼叫SetupDi
Windows下USB磁碟開發系列三:列舉系統中U盤、並獲取其裝置資訊
前面我們介紹了列舉系統中的U盤碟符(見《Windows下USB磁碟開發系列一:列舉系統中U盤的碟符》)、以及獲取USB裝置的資訊(見《Windows下USB磁碟開發系列二:列舉系統中所有USB裝置》)。有個時候我們不僅僅需要獲取U盤碟符(路徑),而且需要獲取該U盤的硬體資訊,比如廠商、friendl
Windows下USB磁碟開發系列一:列舉系統中U盤的碟符
有個時候我們需要區分系統磁碟中,哪些是U盤,這樣我們在訪問的時候可以區別對待。具體方法如下: 1,呼叫GetLogicalDrives()返回系統碟符標記位 API GetLogicalDrives()將返回一個DWORD型別的標記值,將其轉換成二進位制之後,為1的位標識對應的碟符在系統中存
mysql 關於windows下壓縮包的安裝方式
1:首先去官網下載mysql壓縮包解壓到本地(你想安裝的地方)為了方便配置你可以把資料夾名稱重新命名位mysql;我的是E:\mysql 2:然後在解壓縮的根目錄新建my.ini 配置檔案: 配置檔案如下: [mysql] # 設定mysql客戶端預設字符集 &