Planck-Pi 开启 Gadget RNDIS 教程

article/2025/9/9 8:23:06

文章目录

  • 前言
  • RNDIS介绍
  • 配置教程
    • 1、内核配置
    • 2、设备树配置
    • 3、RNDIS 配置
    • 4、实体机设置
    • 5、后记

前言

本教程硬件基于稚晖君开源的 Planck-Pi ,开源地址: peng-zhihui / Planck-Pi
本教程系统基于 U-Boot 2018.01 、5.2 Linux内核 、根文件系统由 buildroot-2022.05 构建。

RNDIS介绍

RNDIS 是 Remote Network Driver Interface Specification(远程网络驱动程序接口规范) 的首字母缩写,实际上的作用为 TCP/IP over USB,也即视 USB 设备(如手机)为网卡,是基于USB实现RNDIS实际上就是TCP/IP over USB,从而使 Windows 可以通过 USB 设备连接网络。

简单来说开启RNDIS,Planck-Pi通过usb连接Windows(或Linux)后会被识别为一张虚拟网卡,之后通过配置默认网关和DNS服务器即可实现板卡和电脑共享网络。

配置教程

1、内核配置

首先进入Linux内核文件夹


使用 make menuconfig命令配置内核(教程默认已经配置好编译链,并且将其写入 Makefile 文件)


内核配置目录

  • Networking support
    • Networking options
  • Device Drivers
    • Network device support
    • USB support
      • MUSB Mode Selection
      • USB Physical Layer drivers
      • USB Gadget Support

找到 Networking support 选项,勾选并进入


进入 Networking options 选项


勾选以下选项

  • Packet socket
  • Unix domain sockets
  • TCP/IP networking
  • IP: kernel level autoconfiguration
  • IP: DHCP support
  • IP: BOOTP support
  • DNS Resolver support

如图所示


退回到最开始的菜单

找到 Device Drivers 选项并进入

找到 Device Drivers 选项
找到 Network device support 选项,勾选并进入

勾选以下选项

  • Network core driver support
  • Ethernet driver support
  • USB Network Adapters


退回到 Device Drivers 目录

勾选 USB support 并进入该选项

勾选 USB support
勾选以下选项

  • Support for Host-side USB
  • Enable USB persist by default
  • Dynamic USB minor allocation
  • OTG support
  • EHCI HCD (USB 2.0) support
  • Generic EHCI driver for a platform device
  • OHCI HCD (USB 1.1) support
  • Generic OHCI driver for a platform device
  • USB Mass Storage support
  • Inventra Highspeed Dual Role Controller
  • Allwinner (sunxi)
  • USB Gadget Support

如图所示

进入 MUSB Mode Selection 选项,选择 Dual Role mode


选择 Dual Role mode
进入 USB Physical Layer drivers 选项,勾选 NOP USB Transceiver Driver


进入 USB Gadget Support 选项, 勾选以下选项

  • Serial gadget console support
  • USB Gadget functions configurable through configfs
  • Generic serial bulk in/out
  • Abstract Control Model (CDC ACM)
  • Object Exchange Model (CDC OBEX)
  • Network Control Model (CDC NCM)
  • Ethernet Control Model (CDC ECM)
  • Ethernet Control Model (CDC ECM) subset
  • RNDIS
  • Ethernet Emulation Model (EEM)
  • Function filesystem (FunctionFS)

如图所示


选择 Save 选项保存退出即可,会自动生成 .config 文件。

如果嫌配置太麻烦,可以使用我已经配置好的 .config 文件, 将其放入Linux内核文件夹。
执行make menuconfig后保存退出即可。

配置好 .config 文件之后,执行 make clean && make -j16 命令,此时

./arch/arm/boot/zImage

路径下会生成内核 img 文件,将其放入 sd 卡的第一分区即可。

2、设备树配置

如果你使用的是 4.14 的内核,那么你不用做任何修改,设备树中已经默认配置好USB了。
如果你使用的是 5.2 的内核,那么你需要在设备树中配置好USB。
首先打开 suniv-f1c100s.dtsi 文件

./arch/arm/boot/dts/suniv-f1c100s.dtsi

找到214行附近 uart2: serial@1c25800
在下面添加

usb_otg: usb@1c13000 {compatible = "allwinner,suniv-f1c100s-musb";reg = <0x01c13000 0x0400>;clocks = <&ccu CLK_BUS_OTG>;resets = <&ccu RST_BUS_OTG>;interrupts = <26>;interrupt-names = "mc";phys = <&usbphy 0>;phy-names = "usb";extcon = <&usbphy 0>;allwinner,sram = <&otg_sram 1>;status = "disabled";
};usbphy: phy@1c13400 {compatible = "allwinner,suniv-f1c100s-usb-phy";reg = <0x01c13400 0x10>;reg-names = "phy_ctrl";clocks = <&ccu CLK_USB_PHY0>;clock-names = "usb0_phy";resets = <&ccu RST_USB_PHY0>;reset-names = "usb0_reset";#phy-cells = <1>;status = "disabled";};

如图所示


打开 suniv-f1c100s-licheepi-nano.dts 文件

./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts

在最下面添加

&otg_sram {status = "okay";
};&usb_otg {dr_mode = "otg";status = "okay";
};&usbphy {usb0_id_det = <&pio 4 2 GPIO_ACTIVE_HIGH>; /* PE2 */status = "okay";
};

如图所示

保存后回到Linux内核目录
执行 make dtbs -j16

./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb

路径下会生成设备树文件,将其放入 sd 卡的第一分区。

3、RNDIS 配置

将sd插入板卡上,正插 Type-C 接口,此时电脑会识别到串口


启动串口调试终端,使用串口进入系统。


可以看到网络启动成功

但此时使用 ip a 还看不到虚拟网卡。我们需要开启 RNDIS 功能。

在终端输入以下命令

mount -t configfs none /sys/kernel/config
cd /sys/kernel/config/usb_gadget/
mkdir gg
cd gg

可以看到以下结果

接着输入以下命令

echo "0x0502" > idVendor
echo "0x3235" > idProduct
mkdir functions/rndis.rn0
mkdir configs/c1.1
ln -s functions/rndis.rn0 configs/c1.1/
echo "musb-hdrc.1.auto" > UDC


此时再执行 ip a 命令就可以看见虚拟网卡了。


但是如果此时我们重启板卡,这些设置就都消失了。
需要将这些配置写入系统的自启动文件中。
输入命令

cd /etc/init.d/


可以看到这些就是系统的自启动文件,我们创建一个文件,让他在 S40network 之前启动

vi S39rndis

输入如下内容

#!/bin/sh -emount -t configfs none /sys/kernel/configcd /sys/kernel/config/usb_gadget/mkdir ggcd gg/echo "0x0502" > idVendorecho "0x3235" > idProductmkdir functions/rndis.rn0mkdir configs/c1.1ln -s functions/rndis.rn0 configs/c1.1/echo "musb-hdrc.1.auto" > UDCecho "domain Home" >> /etc/resolv.conf
echo "nameserver 192.168.1.1" >> /etc/resolv.conf

保存退出


可以看出此时该文件还没有执行权限
我们输入命令

chmod 777 /etc/init.d/S39rndis


此时该文件便可自启动了
我们重启板卡


可以看到虚拟网卡已经自启动了
但是此时如果用板卡 ping 电脑的 ip 还是 ping 不通的

可以看到虚拟网卡还没有设置 ip
我们先切换到 /etc/network 目录

cd /etc/network

编辑 interfaces 文件

vi interfaces

将文件内容修改为

auto lo
iface lo inet loopbackallow-hotplug usb0
auto usb0
iface usb0 inet static
address 192.168.5.100
netmask 255.255.255.0
gateway 192.168.5.101

保存退出

此时板卡上的配置就已经配置完了。

4、实体机设置

此时我们把板卡上的数据线拔下来,反插到 Type-C 接口上,注意板卡上 OTG 的跳线帽不要插。
因为是反插,此时板卡的串口 0 是连接不上了(可以将串口切换到串口 2 调试,但是比较麻烦,就不演示了)。
系统启动之后,我们在 linux 虚拟机(或实体机)上执行 ip a 就可以看到虚拟出来的网卡。


我们需要给实体机的这块虚拟网卡也配置 ip,我用的是 archlinux ,这里就用 archlinux 举例,其他系统参考本教程或者网上自行找教程。

首先我们打开 /etc/dhcpcd.conf 文件

nvim /etc/dhcpcd.conf

在文件的末尾加上

interface enp6s0f4u2 # 这里写的是虚拟网卡名称,使用 ip a 命令可以查到
static ip_address=192.168.5.101/24 # 这里的地址与前面我们板卡上 /etc/network/interfaces 文件中 gateway 的地址相对应
static domain_name_servers=192.168.5.1 114.114.114.114 # 这里的地址要在同一个网段

保存退出,此时网卡的静态 ip 就修改好了。

重新把插板卡,然后使用 ip a 命令查看

此时我们可以来 ping 一下板卡的 ip 看能不能 ping

已经可以 ping
既然可以 ping 通,那我们就可以使用 ssh 来连接板卡了(要提前在板卡上配置好ssh ,可以在用 buildroot 构建根文件系统时将 openssh 选上)

成功进入系统

但是此时我们通过 sshping 百度还是 ping 不通的,这是因为出于安全考虑,Linux系统默认是禁止数据包转发的。
所谓我们在主机的命令行执行

sudo echo "1" > /proc/sys/net/ipv4/ip_forward
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE  #(wlan0 根据实际情况调整)

如果执行不了可以使用 root 用户执行,也可以将其写入开机脚本使其开机自动执行。

此时我们的板卡就实现l和实体机共享网络

5、后记

通过 USB Gadget 不仅能开启 RNDIS ,还可以同时虚拟出一个串口,这就实现了反插 Type-C同时拥有虚拟串口和虚拟网卡的功能,感兴趣的可以自行研究如何开启。


http://chatgpt.dhexx.cn/article/VNq8W4R7.shtml

相关文章

Win7安装RNDIS驱动

转自&#xff1a;Win7安装RNDIS驱动的最好办法 - 系统之家 RNDIS也叫远端网络驱动接口协议&#xff0c;设备通过USB方式同主机连接&#xff0c;模拟网络连接以便用于下载和调试工作。RNDIS在Win7系统中扮有很重要的作用&#xff0c;但是很多用户表示Win7插上符合RNDIS的设备时…

STM32驱动开发(二)--USB Device RNDIS虚拟网卡(usb hound抓包完整数据流分析)

一、简介   抓包工具&#xff1a;usb hound&#xff0c;本例使用安卓手机作为device, 使用RNDIS功能连接电脑虚拟网卡。抓取完整数据流包按流程进行分析。数据流程熟悉之后&#xff0c;查看stm32或者其他厂家的USB库开发RNDIS设备代码也能懂大概。 二、USB标准请求相关概念 …

Android USB RNDIS

android 系统设置 网络与互联网>热点和网络共享>USB网络共享 在linux 系统上USB网络共享正常&#xff0c;但是在windows上无法访问网络&#xff0c; Window平台默认时没有打开RNDIS驱动适配器的。 以下纪录windows下面添加RNDIS驱动适配器的步骤。 1.打开设备管理器 手机…

USB RNDIS实现

RNDIS是指Remote NDIS&#xff0c;基于USB实现RNDIS实际上就是TCP/IP over USB&#xff0c;就是在USB设备上跑TCP/IP&#xff0c;让USB设备看上去像一块网卡。 同样&#xff0c;在WinCE中实现USB RNDIS功能&#xff0c;首先具备以下条件&#xff1a; 1. 支持USB Client并且USB驱…

STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

STM32驱动开发&#xff08;二&#xff09;–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一、简介   本文基于stm32 Rndis实例&#xff0c;github开源, 使用STM32F407单板。结合协议讲解stm32中USB虚拟网卡驱动的实现。达到外部主机&#xff08;手机&#xff09;通过USB接…

LuatOS-Air AT应用指南--RNDIS

简介 RNDIS是指Remote NDIS&#xff0c;基于USB实现RNDIS实际上就是TCP/IP over USB&#xff0c;就是在USB设备上跑TCP/IP&#xff0c;让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。 Window系统 window系统支持RNDIS直接用usb连接就可以使用&a…

首创STM32 USB主机驱动4G rndis设备

1、4G模块使用技术现状与难题 4G模块支持的对外通信接口有串口和USB接口&#xff0c;串口一般使用AT指令的方式&#xff0c;这个在MCU类产品上面使用的很多&#xff0c;USB接口主用于在连接APU应用处理器上面&#xff0c;由LINUX操作系统来驱动 &#xff0c;把4G模块实现成一个…

Linux配置USB RNDIS

一台Linux即可充当USB的device端&#xff0c;也可以由另一台Linux来充当USB的Host端。在与以太网不同&#xff0c;在USB网络里各终端不是对等的&#xff0c;即USB Host端和USB Device端的所需要软件和硬件接口不一样。 Linux充当USB Host Linux开发板当USB Host时&#xff0c…

Air780E模块RNDIS应用开发指南

目录 简介Window系统Linux系统常见问题 简介 RNDIS是指Remote NDIS&#xff0c;基于USB实现RNDIS实际上就是TCP/IP over USB&#xff0c;就是在USB设备上跑TCP/IP&#xff0c;让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。 Window系统 windo…

windows系统RNDIS驱动手动安装

windows系统中RNDIS自动当成串口&#xff0c;按网上的更新驱动的方式无法更新为RNDIS&#xff0c;所以采用手动更新的方式&#xff0c;亲测win7和win10可用 在设备管理器选择需要更新RNDIS驱动的设备 **注意&#xff1a;**一定要选择正确的设备&#xff0c;选择错误的话无法成…

指南-安卓/Linux应用指南-RNDIS

目录 Window系统Linux系统IPV6使用方法如何禁用RNDIS功能常见问题相关资料以及购买链接 Window系统 window系统支持RNDIS直接用usb连接就可以使用&#xff0c;模块会虚拟一个网卡。 Linux系统 目前linux大部分发行版本都已经默认支持RNDIS驱动了&#xff0c;只要通过USB连接…

win10安装RNDIS驱动

1. 安装RNDIS驱动 1.1 插上usb rndis device后,PC端提示: 1.2 安装RNDIS驱动 在“RNDIS”上右击选择“更新设备驱动程序”,再选择“浏览我的计算机以查找驱动程序软件”,接着选择“让我从计算机上的可用驱动程序列表中选择”,然后选择“网络适配器”,最后选择"Mic…

【usb】安卓usb网络共享(RNDIS)

一、RNDIS简介 微软官方对RNDIS的介绍说白了&#xff0c;就是将安卓设备作为一个网卡&#xff0c;通过USB连接到电脑上&#xff0c;供电脑上网。 二、使用指导 首先为了验证电脑上网确实走的是usb。先把你电脑上的网卡及网线拔了&#xff0c;wifi关了。并且确保此时电脑无法…

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展&#xff0c;软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节&#xff0c;因此&#xff0c;软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

ISTQB初级认证-知识点及脑图总结

前言 此文章为本人利用课余时间进行的ISTQB初级认证知识和考点的总结。总结过程主要参考了“ISTQB测试人员认证初级大纲&#xff08;2011版&#xff09;”&#xff0c;由于作者能力与精力有限&#xff0c;此篇文章可能会存在纰漏&#xff0c;望见谅并及时指出。谢谢&#xff0…

ISTQB认证-关于ISTQB一些知识点总结

如果要转载请注明 原文链接哦&#xff01; http://blog.csdn.net/maxdong24 ISTQB知识点总结&#xff1a; 注释&#xff1a; K1&#xff1a;表示一般理解 K2&#xff1a;表示一般掌握 K3&#xff1a;表示重点掌握并能够应用 1.导致软件缺陷的原因&#xff08;K2&#xff09…

ISTQB高级国际认证试题及答案(一)

题目 #1 &#xff08;3 分&#xff09;选择2个答案 您是旅游信息手机应用项目的测试经理。近期该项目切换到敏捷流程和测试驱动开发&#xff08;TDD&#xff09;。每个开发周期持续15天&#xff0c;在第7天之后开始每日构建。第10天以后&#xff0c;不会再有新的功能加入。开发…

听说软件测试工程师们都在考ISTQB?

各位忙于测试的小伙伴们&#xff0c;还在为不知道怎么学习&#xff0c;不知道学习的方向而苦恼吗&#xff1f; 那就随小编一起看一看北汇信息的测试工程师们在学什么吧&#xff01; 北汇信息专注于汽车电子测试&#xff0c;涵盖MiL、SiL、PiL、HiL、ViL等不同阶段&#xff0c…

ISTQB基础级备考攻略

ISTQB基础级备考攻略 ISTQB有用吗怎么考怎么准备 ISTQB有用吗 仁者见仁&#xff0c;智者见智。测试领域的证书不是太多&#xff0c;想拿证书撑撑场子顺便巩固下理论基础&#xff0c;常见的两个&#xff1a;ISTQB、国考软件测评师。 怎么考 直接复制的官网&#xff1a; 基础…

【最全】ISTQB- FL模拟题(含答案)

【注&#xff1a;摘于官网】 1、以下哪一项是对测试条件的最佳描述&#xff1f;&#xff08;b&#xff09; a) 需求文档明确或隐含说明的组件或系统的属性。——特性的定义 b) 测试依据的一部分&#xff0c;其与实现特定测试目标相关。 c) 当软件在特定条件下使用时&#xf…