树莓派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共享网络相关推荐

  1. Centos7命令行连接wifi网络,手机usb共享网络

    Centos7命令行连接wifi网络,手机usb共享网络 无线网卡可用的情况下,查看网卡 激活 查看一下网卡状态 扫描可用wifi 连接指定wifi 获取ip 查看ip 使用以上方式连接手机热点有ip ...

  2. 黑苹果通过手机usb共享网络上网

    下载要用到的驱动 http://www.joshuawise.com/horndis 安装驱动HoRNDIS 重启 连接安卓手机USB共享网络即可

  3. 20230214我华硕电脑拔掉网线,改为手机USB共享网络,上网,把centos搞得也能上网。

    20230214在以前桥接,,centos能通过华硕电脑,再通过网线路由器,能上网了,,,centos能上网的基础上,,,, 我华硕电脑拔掉网线,改为手机USB共享网络,上网,则华硕电脑的ip地址也变 ...

  4. ubuntu查看usb和连接手机usb共享热点

    ubuntu查看usb情况 输入命令 ifconfig 连接手机usb共享热点 输入命令 sudo dhclient usb0

  5. 龙梦迷你电脑福珑2.0通过手机USB共享网络联网

    当房间里没有有线网络的时候,龙梦迷你电脑怎么联网?今天成功实现联网.方法如下所示.一个有流量的手机,手机具有USB共享网络功能.一根数据线,一端是手机接口,例如type-C接口,微USB接口,另一端是 ...

  6. 安卓手机USB共享网络步骤

    首先需要把手机连接到电脑,在手机上打开USB网络共享. 打开设备管理器 在网络适配器中,找到Remote NDIS based Internet Sharing Device,右键更新驱动 选择第二项 ...

  7. 【Linux operation 29】Linux系统通过手机USB共享网络

    1.手机通过usb连接电脑,手机端打开usb网络共享 2.终端中查看现有网络接口: ip addr 或 ifconfig 3.若只出现网卡接口,但网卡未启动可以使用命令启动 ifup usb0 或者i ...

  8. 为什么用手机USB共享网络,WIN10就变得异常卡顿?

    安卓手机通过USB为电脑(Windows10)提供网络接入点时,系统程序会异常卡顿. 以下是解决方法的具体步骤: 0)同时按住"Win键"与"R". 1)输入d ...

  9. 电脑通过usb共享网络给手机上网

    背景:手机无流量,电脑有网,想通过电脑共享网络给手机,在网络找了好几篇教程,但不够详细,或者就是手机USB共享网络给电脑的文章. 其他:通过该方法,手机流量全部走电脑宽带,甚至手机开飞行模式也可正常浏 ...

最新文章

  1. 云企业网的应用于功能详解
  2. VTK:绘制一个棋盘并用两个平面对其进行剪辑用法实战
  3. C# winform DataGridView 常见属性
  4. liunx常用命令笔记
  5. Hello,移动WEB—px,dp,dpr像素基础
  6. iOS在照片上添加水印
  7. 136_原始套接字_链路层MAC包_模仿他人飞秋,给自己主机上的飞秋【发送UDP数据】【只需要修改包含用户名、头像信息的数组】
  8. 全国计算机大赛游戏作品,计算机作品大赛优秀作品展示---数字动漫游戏栏目
  9. A DIRT-T APPROACH TO UNSUPERVISED DOMAIN ADAPTATION
  10. 深蓝学院-多传感器融合定位-第4章作业
  11. cadence——MOS晶体管I-V特性曲线仿真
  12. windows能装linux系统盘,用U盘安装linux系统(Windows环境下制作启动盘)
  13. Android开机速度优化简单回顾
  14. 怎样做音乐相册?简单又好看的音乐相册怎么做?
  15. PLC闪烁电路的实现
  16. 计算机ms高级应用科目一 科目二考什么,什么是科目一、科目二、科目三、科目四?全部都在这!...
  17. LoadLibrary下错误返回126错误码排查过程
  18. 开启hadoop之旅的大门–安装配置篇
  19. U盘容量由于刻录系统造成容量减少的解决方法
  20. js打开页面自动复制文本到剪贴板_浏览器剪贴板API的应用

热门文章

  1. 8086 汇编程序报错信息解释
  2. 将Java中的PPT(X)转换为PDF和图像
  3. python二维数组画出_python二维数组画图
  4. 一个很简单的JavaMVC架构的二手车交易系统
  5. 【开发者必看】【Health kit】运动健康服务典型问题合集
  6. 在Oracle中实现数据库的复制
  7. CAD手机看图软件中多线段编辑详解
  8. 基于Exynos4412的嵌入式Linux的几种启动方式分析
  9. Mac照片后期处理软件软件:Capture One 21 Pro
  10. Ubuntu 16.04/Mac安装VSCode