树莓派zero,连接手机USB共享网络
树莓派zero,不像zeroW,具有板载wifi可以直接接入网络。当然也可以用usb无线网卡。
如果没有usb网卡,也可以用Android手机接入usb-host,进行usb网络共享,让树莓派zero接入网络!
RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。
基于buildroot
一、linux kernel 配置
buildroot 默认是开启RNDIS模块的,如果没有开启,则需要进行手动配置,make kinux-menuconfig
进入如下目录
> Device Drivers > Network device support > USB Network Adapters
重点三项设置
{*} Multi-purpose USB Networking Framework
{M} CDC Ethernet support (smart devices such as cable modems)
{M} Host for RNDIS and ActiveSync devices
二、查看已经加载的模块lsmod
[root@buildroot ~]#lsmod
Module Size Used by Not tainted
ipv6 446464 10 [permanent]
目前系统仅加载了ipv6模块,而没有rndis_host
手动加载:modprobe rndis_host
[root@buildroot ~]#modprobe rndis_host
[ 1322.908781] usbcore: registered new interface driver cdc_ether
[ 1322.928632] rndis_host 1-1:1.0 eth0: register 'rndis_host' at usb-20980000.usb-1, RNDIS device, 00:00:00:00:00:00
[ 1322.946885] usbcore: registered new interface driver rndis_host
[root@buildroot ~]#lsmod
Module Size Used by Not tainted
rndis_host 16384 0
cdc_ether 16384 1 rndis_host
ipv6 446464 10 [permanent]
手动加载完成,可以看到rndis_host、cdc_ether
三、将Android手机,接入树莓派0 usb-host接口
同时手机端,需要打开USB 网络共享
[root@buildroot ~]#[ 1485.716551] Indeed it is in host mode hprt0 = 00021501
[ 1485.936457] usb 1-1: new high-speed USB device number 3 using dwc_otg
[ 1485.947337] Indeed it is in host mode hprt0 = 00001101
[ 1486.199099] usb 1-1: New USB device found, idVendor=04e8, idProduct=6860, bcdDevice= 4.00
[ 1486.215091] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1486.226310] usb 1-1: Product: SAMSUNG_Android
[ 1486.234578] usb 1-1: Manufacturer: SAMSUNG
[ 1486.242461] usb 1-1: SerialNumber: b6a47799
[ 1489.516650] usb 1-1: USB disconnect, device number 3
[ 1489.726539] Indeed it is in host mode hprt0 = 00021501
[ 1489.936459] usb 1-1: new high-speed USB device number 4 using dwc_otg
[ 1489.947237] Indeed it is in host mode hprt0 = 00001101
[ 1490.198290] usb 1-1: New USB device found, idVendor=04e8, idProduct=6863, bcdDevice= 4.00
[ 1490.214325] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1490.225674] usb 1-1: Product: SAMSUNG_Android
[ 1490.234194] usb 1-1: Manufacturer: SAMSUNG
[ 1490.242332] usb 1-1: SerialNumber: b6a47799
[ 1490.257713] rndis_host 1-1:1.0 eth0: register 'rndis_host' at usb-20980000.usb-1, RNDIS device, 00:00:00:00:00:00[root@buildroot ~]#
系统log可以看到,rndis_host 1-1:1.0 eth0,已经加载!并且已经识别到手机类型:三星
不同的手机,识别出来可能不一样,也可能是eth1,或者usb0之类!
也可以通过 dmesg 命令查看!
如果没有看到rndis_host 1-1:1.0 eth0字样,说明rndis设备没有被正确识别!
四、查看网络配置ifconfig
[root@buildroot ~]#ifconfig
lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
如果没有看到 eth0或usb0,再查看 ifconfig -a
[root@buildroot ~]#ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:00BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ifconfig -a,可以看到 eth0 已经识别了,但MAC地址没有正确读出来
HWaddr 00:00:00:00:00:00
udhcpc -i eth0 ,提示ifconfig: SIOCSIFFLAGS: Cannot assign requested address
[root@buildroot /etc/network]#udhcpc -i eth0
udhcpc: started, v1.31.1
ifconfig: SIOCSIFFLAGS: Cannot assign requested address
ifconfig: SIOCSIFFLAGS: Cannot assign requested address
udhcpc: sending discover
udhcpc: sendto: Network is down
udhcpc: read error: Network is down, reopening socket
udhcpc: sending discover
udhcpc: sendto: Network is down
udhcpc: read error: Network is down, reopening socket
udhcpc: sending discover
udhcpc: sendto: Network is down
udhcpc: read error: Network is down, reopening socket
udhcpc: read error: Network is down, reopening socket
其实,这是三星手机的问题,需要手动设置mac地址。换华为手机,到这一步就可以正常上网!
五、设置MAC地址
两种方式设置MAC地址:
1、命令设置
ifconfig eth0 down
ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF
ifconfig eth0 up
2、修改文件/etc/network/interfaces。此方式,重启也可以生效
[root@buildroot /etc/network]#vi interfaces
增加eth0相关描述
# interface file auto-generated by buildrootauto lo
iface lo inet loopbackauto eth0
iface eth0 inet dhcphwaddress ether AA:BB:CC:DD:EE:FF
# address 192.168.2.2
# netmask 255.255.255.0
# network 192.168.2.0
# broadcast 192.168.2.255
# gateway 192.168.2.1
重新初始化网络,/etc/init.d/
[root@buildroot /etc/init.d]#./S40network restart
执行完成后,即可看到eth0已经生效!
[root@buildroot /etc/network]#ifconfig eth0 down
[root@buildroot /etc/network]#ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF
[root@buildroot /etc/network]#ifconfig eth0 up
[root@buildroot /etc/network]#
[root@buildroot /etc/network]#
[root@buildroot /etc/network]#ifconfig
eth0 Link encap:Ethernet HWaddr AA:BB:CC:DD:EE:FFinet6 addr: fe80::a8bb:ccff:fedd:eeff/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:26 errors:0 dropped:0 overruns:0 frame:0TX packets:6 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:5894 (5.7 KiB) TX bytes:780 (780.0 B)lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
但此时还不能上网,因为还没有获取到正确的IP地址!执行udhcpc -i eth0
[root@buildroot /etc/network]#udhcpc -i eth0
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.42.132
udhcpc: lease of 192.168.42.132 obtained, lease time 3600
deleting routers
adding dns 192.168.42.129
获取到正确的IP地址后!ping www.baidu.com 测试!
[root@buildroot /etc/network]#ping www.baidu.com
PING www.baidu.com (180.101.49.11): 56 data bytes
64 bytes from 180.101.49.11: seq=0 ttl=51 time=14.582 ms
64 bytes from 180.101.49.11: seq=1 ttl=51 time=21.231 ms
64 bytes from 180.101.49.11: seq=2 ttl=51 time=20.914 ms
64 bytes from 180.101.49.11: seq=3 ttl=51 time=20.953 ms
^C
--- www.baidu.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 14.582/19.420/21.231 ms
此时网络已经接通!
六、设置开机自动加载rndis_host模块
以上设置比较繁琐,,并且每次开机都要重新设置!
/etc/init.d下新建文件S10modules
#!/bin/sh# Load other user-defined modulesfor file in /etc/init.d/*.modules ; do[ -x $file ] && $filedone# Load modules (for backward compatibility with VARs)if [ -f /etc/init.d/rc.modules ]; then/etc/init.d/rc.modulesfi
/etc/init.d下新建文件rndis_host.modules
#!/bin/shmodprobe rndis_host.ko
设置权限755
[root@buildroot /etc/init.d]#chmod 755 S10modules
[root@buildroot /etc/init.d]#chmod 755 rndis_host.modules
重启reboot
[ 2.929930] usb 1-1: new high-speed USB device number 2 using dwc_otg
[ 2.941021] Indeed it is in host mode hprt0 = 00001101
[ 3.131470] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 3.213589] usb 1-1: New USB device found, idVendor=04e8, idProduct=6863, bcdDevice= 4.00
[ 3.229033] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.240050] usb 1-1: Product: SAMSUNG_Android
[ 3.248262] usb 1-1: Manufacturer: SAMSUNG
[ 3.256080] usb 1-1: SerialNumber: b6a47799
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
[ 3.578345] usbcore: registered new interface driver cdc_ether
[ 3.596246] rndis_host 1-1:1.0 eth0: register 'rndis_host' at usb-20980000.usb-1, RNDIS device, 00:00:00:00:00:00
[ 3.615653] usbcore: registered new interface driver rndis_host
hello world
Initializing random number generator: OK
Saving random seed: [ 3.742622] random: dd: uninitialized urandom read (512 bytes read)
OK
Starting network: [ 4.116974] NET: Registered protocol family 10
[ 4.128752] Segment Routing with IPv6
udhcpc: started, v1.31.1
[ 4.257709] random: mktemp: uninitialized urandom read (6 bytes read)
udhcpc: sending discover
udhcpc: sending select for 192.168.42.132
udhcpc: lease of 192.168.42.132 obtained, lease time 3600
deleting routers
[ 4.440324] random: mktemp: uninitialized urandom read (6 bytes read)
adding dns 192.168.42.129
OKWelcome to Buildroot for eric
buildroot login: root
Password:
[root@buildroot ~]#
[root@buildroot ~]#
[root@buildroot ~]#ping www.baidu.com
PING www.baidu.com (180.101.49.12): 56 data bytes
64 bytes from 180.101.49.12: seq=0 ttl=51 time=19.564 ms
64 bytes from 180.101.49.12: seq=1 ttl=51 time=14.150 ms
64 bytes from 180.101.49.12: seq=2 ttl=51 time=19.795 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 14.150/17.836/19.795 ms
[root@buildroot ~]#
可以看到,开机后自动加载rndis_host 模块!
也可以,将rndis驱动,在内核编译的时候,设置成静态编译,就不需要动态加载。
还不支持热插拔,重新接入手机,需要再次初始化网络
[root@buildroot /etc/init.d]#./S40network restart
改进:
以上做法,只是手动配置加载rndis_host模块,buildroot是支持动态自动加载模块的,只是默认并未打开!打开后,就不需要手动创建S10modules了!
1、打开动态加载模块功能
make meunconfig
System configuration —>/dev management
选择
Dynamic using devtmpfs + mdev
/dev management (Dynamic using devtmpfs + mdev) --->
2、重新编译packet,make busybox。builtroot output/target/etc/init.d目录自动生成S10mdev
eric@eric-PC:~/Documents/work/linux-c/buildroot-2020.02.1/output/target/etc/init.d$ ls
rcK rcS S01syslogd S02klogd S02sysctl S10mdev S20urandom S40network S50userstart
3、重新编译生成镜像
-------------------------------------------仅此记录-------------------------------------------
树莓派zero,连接手机USB共享网络相关推荐
- Centos7命令行连接wifi网络,手机usb共享网络
Centos7命令行连接wifi网络,手机usb共享网络 无线网卡可用的情况下,查看网卡 激活 查看一下网卡状态 扫描可用wifi 连接指定wifi 获取ip 查看ip 使用以上方式连接手机热点有ip ...
- 黑苹果通过手机usb共享网络上网
下载要用到的驱动 http://www.joshuawise.com/horndis 安装驱动HoRNDIS 重启 连接安卓手机USB共享网络即可
- 20230214我华硕电脑拔掉网线,改为手机USB共享网络,上网,把centos搞得也能上网。
20230214在以前桥接,,centos能通过华硕电脑,再通过网线路由器,能上网了,,,centos能上网的基础上,,,, 我华硕电脑拔掉网线,改为手机USB共享网络,上网,则华硕电脑的ip地址也变 ...
- ubuntu查看usb和连接手机usb共享热点
ubuntu查看usb情况 输入命令 ifconfig 连接手机usb共享热点 输入命令 sudo dhclient usb0
- 龙梦迷你电脑福珑2.0通过手机USB共享网络联网
当房间里没有有线网络的时候,龙梦迷你电脑怎么联网?今天成功实现联网.方法如下所示.一个有流量的手机,手机具有USB共享网络功能.一根数据线,一端是手机接口,例如type-C接口,微USB接口,另一端是 ...
- 安卓手机USB共享网络步骤
首先需要把手机连接到电脑,在手机上打开USB网络共享. 打开设备管理器 在网络适配器中,找到Remote NDIS based Internet Sharing Device,右键更新驱动 选择第二项 ...
- 【Linux operation 29】Linux系统通过手机USB共享网络
1.手机通过usb连接电脑,手机端打开usb网络共享 2.终端中查看现有网络接口: ip addr 或 ifconfig 3.若只出现网卡接口,但网卡未启动可以使用命令启动 ifup usb0 或者i ...
- 为什么用手机USB共享网络,WIN10就变得异常卡顿?
安卓手机通过USB为电脑(Windows10)提供网络接入点时,系统程序会异常卡顿. 以下是解决方法的具体步骤: 0)同时按住"Win键"与"R". 1)输入d ...
- 电脑通过usb共享网络给手机上网
背景:手机无流量,电脑有网,想通过电脑共享网络给手机,在网络找了好几篇教程,但不够详细,或者就是手机USB共享网络给电脑的文章. 其他:通过该方法,手机流量全部走电脑宽带,甚至手机开飞行模式也可正常浏 ...
最新文章
- 云企业网的应用于功能详解
- VTK:绘制一个棋盘并用两个平面对其进行剪辑用法实战
- C# winform DataGridView 常见属性
- liunx常用命令笔记
- Hello,移动WEB—px,dp,dpr像素基础
- iOS在照片上添加水印
- 136_原始套接字_链路层MAC包_模仿他人飞秋,给自己主机上的飞秋【发送UDP数据】【只需要修改包含用户名、头像信息的数组】
- 全国计算机大赛游戏作品,计算机作品大赛优秀作品展示---数字动漫游戏栏目
- A DIRT-T APPROACH TO UNSUPERVISED DOMAIN ADAPTATION
- 深蓝学院-多传感器融合定位-第4章作业
- cadence——MOS晶体管I-V特性曲线仿真
- windows能装linux系统盘,用U盘安装linux系统(Windows环境下制作启动盘)
- Android开机速度优化简单回顾
- 怎样做音乐相册?简单又好看的音乐相册怎么做?
- PLC闪烁电路的实现
- 计算机ms高级应用科目一 科目二考什么,什么是科目一、科目二、科目三、科目四?全部都在这!...
- LoadLibrary下错误返回126错误码排查过程
- 开启hadoop之旅的大门–安装配置篇
- U盘容量由于刻录系统造成容量减少的解决方法
- js打开页面自动复制文本到剪贴板_浏览器剪贴板API的应用