网站建设深圳赶集网,短网址生成器下载,外贸网站运营是做什么的,长春兼职文章目录 前言RNDIS介绍配置教程1、内核配置2、设备树配置3、RNDIS 配置4、实体机设置5、后记 前言
本教程硬件基于稚晖君开源的 Planck-Pi #xff0c;开源地址#xff1a; peng-zhihui / Planck-Pi 本教程系统基于 U-Boot 2018.01 、5.2 Linux内核 、根文件系统由 buildr… 文章目录 前言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 设备连接网络。
简单来说开启RNDISPlanck-Pi通过usb连接Windows或Linux后会被识别为一张虚拟网卡之后通过配置默认网关和DNS服务器即可实现板卡和电脑共享网络。
配置教程
1、内核配置
首先进入Linux内核文件夹 使用 make menuconfig命令配置内核教程默认已经配置好编译链并且将其写入 Makefile 文件 内核配置目录
Networking support Networking options Device Drivers Network device supportUSB support MUSB Mode SelectionUSB Physical Layer driversUSB 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 选项并进入 找到 Network device support 选项勾选并进入 勾选以下选项 Network core driver support Ethernet driver support USB Network Adapters 退回到 Device Drivers 目录
勾选 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 进入 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: serial1c25800 在下面添加
usb_otg: usb1c13000 {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: phy1c13400 {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_address192.168.5.101/24 # 这里的地址与前面我们板卡上 /etc/network/interfaces 文件中 gateway 的地址相对应
static domain_name_servers192.168.5.1 114.114.114.114 # 这里的地址要在同一个网段保存退出此时网卡的静态 ip 就修改好了。
重新把插板卡然后使用 ip a 命令查看 此时我们可以来 ping 一下板卡的 ip 看能不能 ping 通 已经可以 ping 通 既然可以 ping 通那我们就可以使用 ssh 来连接板卡了要提前在板卡上配置好ssh 可以在用 buildroot 构建根文件系统时将 openssh 选上 成功进入系统
但是此时我们通过 ssh 来 ping 百度还是 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同时拥有虚拟串口和虚拟网卡的功能感兴趣的可以自行研究如何开启。