搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
AllinToyou
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
几分钟本地安装AgentGPT,免费易用的 AutoGPT 平替
2
第十三届蓝桥杯C/C++ C组 (A~G)_蓝桥杯 排列字母小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
3
defaultConfig contains custom BuildConfig fields, but the feature is disabled._build type 'debug' contains custom buildconfig fie
4
css代码4种按钮特效 【hover属性】_css button hover
5
Android 常用正则表达式_android toregex() 引用什么包
6
7-1 求最大值及其下标分数 20_7-1 求最大值及其下标 分数 20 作者 c课程组 单位 浙江大学 本题要求编写程序,找
7
java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile
8
Java【lambda表达式】语法及使用方式介绍_lamada表达式java一些方法
9
机器学习 之 填空题_机器学习填空题
10
Android学习 - 百度地图开发基础_mkdrivingrouteresult
当前位置:
article
> 正文
Linux 下使用USB 网络_linux usbnet
作者:AllinToyou | 2024-03-08 17:36:16
赞
踩
linux usbnet
Andrew Huang <bluedrum@163.com> 转载请注明作者及联络方式.
在介绍USB的驱动开发时,我通常会用用Linux的的USB网络来演示,它兼容RNDIS网络,一台Linux即可充当USB的device端,也可以由另一台Linux来充当USB的Host端,Host端的也可以由安装的微软的标准的Rndis驱动来充当.
这种网络有相当强的实用价值,而且完整实现的Linux USB Slave驱动和Linux USB Gadget两种驱动,因此有很强演示效果.
应用场景:
一.智能手机共享网络
现在智能手机采用3G网络,通过Linux/Android手机上安装相关驱动,可以用USB线在主机和手机建一个共享网络,这样智能手机充当一个无线路由器的功能.现在手机一般都有这个功能,WINDOWS安装Rndis驱动即可.而且就是用的我们后面提到的g_ether.ko驱动.
这种方式,远远优于把手机当成3G的modem,用USB来拨号这种方式,共享网络相当于手机和电脑都上网不误.
这种方式跟用手机WIFI作无线热点的功能一样,但是APN的实现的要求较高,很多手机不一定能支持,而且USB还有同时供电.还是有其优点.
二.增加第二个有线网络.
在教室上课时,很多时候服务器和学生用机只有一个网络口接口,我把网线接到局域网时,我的开发板就无法用NFS接我的机器,学生机也是如此,现在服务器上把有线网络接入局域网,而我的开发板与服务器则直接相连.
一.USB 网络的结构
在与以太网不同,在USB网络里各终端不是对等的,即USB Host端和USB Device端的所需要软件和硬件接口不一样.
USB网络有很多种,其中用得最多是RNDIS网络。它的全称是
Remote
Network Device Interface Specification.
它是由微软制定的规范,因为手机使用用得较多,因此LINUX也在驱动中兼容这个规范
(PS:Android手机这个功能几乎是标配,而手机需要支持的功能FAT,RNDIS,MTP(媒体传输协议),都是MS的专利,这几张牌成了MS向Android手机制造产家收取专利费的重要武器,三星已经交了钱了)
一般象PC机充当USB Host角色,带USB Host的接口的Linux开发板也可以充当这个角色.
如果是LINUX主机,需要安装安装 rndis_host.ko 这个驱动。一般发行版均已经编译好,直接运行即可。
如果嵌入式开发板可以配置内核的rndis_host为动态模块
它位于
│ 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]) │
如果是WINDOWS主机,则需要安装MS的Generic RNDIS驱动。
在USB的另一端,一般是嵌入式设备,以嵌入式LINUX为例,需要安装USB Gadget驱动g_ether.ko 来进行通讯。g_ether.ko在配置菜单位置如下
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 │
因此一个完整RNDIS网络结构如下
二.Linux USB 网络搭建
USB Host安装,以RHEL5为例,直接运行如下命令即可安装 rndis_host.ko
modprobe rndis_host
它将安装 rndis_host.ko和usbnet.ko
[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
在开发板上编译好内核模块,g_ether.ko.执行如下命令
insmod g_ether.ko
# 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'
分别在主机和开发板之间抽入USB线,其中开发板使用D型的Slave端接口(不要插在HOST接口上!) 让USB网卡结点生效,这里一般是usb0
ifconfig usb0 192.168.3.101 up
hub 1-0:1.0: unable to enumerate USB device 2
g_ether gadget: high speed config #1: Chernet (ECM)
在主机端做类似配置,配成另一个IP即可
ifconfig usb0 192.168.3.120 up
# 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
这时在两端即可以互相 ping 通。
三.与Windows 建立联接
。
如果希望与Windows 建立RNDIS网络联接,需要下载RNDIS驱动,并且根据g_ether.ko的产商号和设备号调整安装INF文件。
1.确定VID和PID
首先确认g_ether.ko的RNDIS的vendor号和product号.它的定义在 drivers/usb/gadget/ether.c中
#define RNDIS_VENDOR_NUM 0x0525
/
*
NetChip
*
/
#define RNDIS_PRODUCT_NUM 0xa4a2
/
*
Ethernet
/
RNDIS Gadget
*
/
2.下载WINDOWS的RNDIS驱动.
http://www.microsoft.com/china/whdc/device/network/NDIS/rndis.mspx
或
http://gp2x.generation.free.fr/public/Autres/
如果不成功,去找一下RNDIS-USB-Kit_05.exe 这个文件。它是一个压缩文件,其中的rndismpy.sys,usb8023y.sys就是驱动文件.
3.修改安装inf文件
以其中的RNDIS_Template.inf为蓝本修改安装文件。主要修改两个地方:
把
mm/dd/yyyy,x.y.v.z
修改成任意的时间和版本号,我修改是
09/28/2011,1.0.0.0
(注意有两处)
把
USB\VID_vvvv&PID_pppp
修改成查到的数字,这里必须是Linux定义的
USB\VID_0525&PID_A4A2
把inf和两个sys放在一起,随意取个名字,我取名 hxy_rndis.inf
如果不想修改,直接用我改好现成的
hxy_rndis.zip
4.安装驱动
在开发板与WINDOWS之间插入USB线。这时WINDOWS会提示安装驱动,选择手功安装,并且选择上一步的 sys所在目录即可安装
安装后系统会出现一个RNDIS的网卡,配置IP即可与开发板通讯
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/AllinToyou/article/detail/211420
推荐阅读
article
linux
c
嵌入式
工程师
笔试题,
嵌入式
软件
工程师
/
linux
c
程序员 笔试题...
一、什么叫可重入?可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数...
赞
踩
article
linux
编译
mqtt
静态库,无法为
arm
-
none
-
linux
-
gnueabi
-g ++编译器找...
I have the
arm
-
none
-
linux
-
gnueabi
-g++ compiler in the below ...
赞
踩
article
linux
下解决
qt
项目
error
while
loading
shared
libraries: ...
linux
下运行
qt
项目,能编译通过,但不能运行出应用程序_./
qt
-
unified
-
linux
-x64-4.6.1-o...
赞
踩
article
ubuntu
在线安装qt碰到的问题及解决_./qt-
unified
-
linux
-
x64
-4.6.1-...
ubuntu
中在线安装qt碰到的问题。_./qt-
unified
-
linux
-
x64
-4.6.1-
online
.
run
:...
赞
踩
article
Ubuntu安装QT:
error
whi
le
loading
shared
libraries: l...
【代码】Ubuntu安装QT:
error
whi
le
loading
shared
libraries:
libxcb
-...
赞
踩
article
解决
dbus
-
1
.
so.3
: no
version
information available 造成...
删除错误的lib
dbus
-
1
.
so.3
快捷方式,并将正确的lib
dbus
-
1
.
so.3
.XX.X拷贝到usr/lib64...
赞
踩
article
解决问题:
libbz2
.so.1: cannot open
shared
object
file
:...
解决缺少
libbz2
.so.1文件的问题。
err
or
while
loading
shared
libraries: l...
赞
踩
article
ubuntu
Linux
安装QT_qt-
unified
-
linux
-x64-4.6.1-
online
...
ubuntu
Linux
安装QT下载开源QT
Linux
安装包地址https://www.qt.io/download-o...
赞
踩
article
Linux
Qt6
安装
教程及错误解决_
ubuntu
安装
qt6
...
在
Linux
环境,通常为Ubuntu,
安装
Qt开发环境,
安装
教程以及遇到的错误解决_
ubuntu
安装
qt6
ubuntu
...
赞
踩
article
Ubuntu
安装Qt出现
bash
: ./
qt
-
unified
-
linux
-x64-
4.6
.1-onl...
Ubuntu
安装Qt出现
bash
: ./
qt
-
unified
-
linux
-x64-
4.6
.1-
online
.
run
: 权...
赞
踩
article
linux
ubuntu安装
qt
creater,配置
qt
环境到可运行
qt
项目_./
qt
-unifie...
一、安装
qt
creater1、搜索清华源,打开路径到
qt
位置,选择第二个文件,下载下来2、打开下载路径,执行chmod ...
赞
踩
article
linux
下
C++
#
include
的
搜索
路径
问题_
linux
include
搜索
路径
...
Linux c++_
linux
include
搜索
路径
linux
include
搜索
路径
...
赞
踩
article
linux
c
之g
c
c
编译出现error:
lvalue
required
as
unary
‘&‘ ...
1、问题 今天搞epoll实现io复用的时候g
c
c
编译出现这个错误
lvalue
required
as
unary
'&...
赞
踩
article
linux
使用
gcc
提示
后缀
无效
,
linux
– Gcc
编译
“无法计算对象文件的
后缀
:无法
编译
”.....
我实际上正在阅读LFS书(7.1版)
,
我在第53页被阻止.尝试
编译
gcc
,
我尝试了以下命令:./configure --...
赞
踩
article
arm
-
linux
-
gnueabihf
-gcc 5.2编译qt4.8.5_
dialogs
/qprin...
arm
-
linux
-
gnueabihf
-gcc 5.2编译qt4.8.5_
dialogs
/
qprintdialog
_un...
赞
踩
article
linux
signal
编译
不过,
Linux
编译
中
的各种
error
处理...
LDD3
中
的第一个例程就是scull,但是在新内核上
编译
的过程那叫一个坎坷。。。在此做出总结,希望可以帮到同路人。。。一...
赞
踩
article
【
FastDFS
】小伙伴们说按照我写的方式在
CentOS
8
服务器
上搭建
FastDFS
环境总报错?_...
这下在
CentOS
8
服务器
上
安装
FastDFS
不会报错了吧!_
c
entos
安装
fastdfs4.0
.6
c
ommon
...
赞
踩
article
Linux
学习
笔记(
12
)...
acpid 否 监听精灵进程 此进程监听并分配内核中的 acpi 事件adsl 否 内部 ADSL 开关控制 只...
赞
踩
article
Linux
:修改
文件
权限...
在
Linux
系统中,权限管理是
文件
和目录安全性的核心。
文件
权限是非常重要的,它们决定了哪些用户可以读取、写入或执行
文件
。...
赞
踩
article
linux
中文
语音
合成
软件,分享|
eSpeak
:
Linux
文本
转
语音
工具
...
eSpeak
是一款
Linux
命令行
工具
,能把
文本
转换成
语音
。它是一款简洁的
语音
合成
器,用C语言编写而成,它支持英语和...
赞
踩
相关标签
linux c嵌入式工程师笔试题
linux 编译mqtt静态库
linux
qt
ubuntu
运维
开发语言
qtcreator
qt5
installer
UOS
bash
权限