本次主要参考:
荔枝nano开启RNDIS驱动,无需补丁。
https://github.com/peng-zhihui/Planck-Pi#head23
https://github.com/mangopi-sbc/buildroot-mangopi-r
https://www.cnblogs.com/listenscience/p/13758272.html
(如果方便请给这几位大佬一个关注)
注意代码块之间的空行
本次是摸索出来的,如果用到项目需慎重,有不足之处,欢迎指出。
1、修改驱动文件
1.1、在drivers/phy/allwinner/phy-sun4i-usb.c文件中,修改如下:
在第101行,插入如下代码:
suniv_f1c100s_phy,
插入后如下:
在第862行,添加如下代码:
static const struct sun4i_usb_phy_cfg suniv_f1c100s_cfg = {
.num_phys = 1,
.type = suniv_f1c100s_phy,
.disc_thresh = 3,
.phyctl_offset = REG_PHYCTL_A10,
.dedicated_clocks = true,
};
添加后如下:
在第985行,插入如下代码:
{ .compatible = “allwinner,suniv-f1c100s-usb-phy”, .data = &suniv_f1c100s_cfg },
插入后如下:
1.2、在drivers/usb/musb/sunxi.c文件中,修改如下:
在第647~657行中间,代码修改如下:
/* SUNIV OTG supports only 3 endpoints */
#define SUNXI_MUSB_MAX_EP_NUM_SUNIV 4
static struct musb_fifo_cfg sunxi_musb_mode_cfg_suniv[] = {
MUSB_EP_FIFO_SINGLE(1, FIFO_TX, 512),
MUSB_EP_FIFO_SINGLE(1, FIFO_RX, 512),
MUSB_EP_FIFO_SINGLE(2, FIFO_TX, 512),
MUSB_EP_FIFO_SINGLE(2, FIFO_RX, 512),
MUSB_EP_FIFO_SINGLE(3, FIFO_TX, 512),
MUSB_EP_FIFO_SINGLE(3, FIFO_RX, 512),
};
修改后如下:
在第677~684行中间,代码修改如下:
static struct musb_hdrc_config sunxi_musb_hdrc_config_suniv = {
.fifo_cfg = sunxi_musb_mode_cfg_suniv,
.fifo_cfg_size = ARRAY_SIZE(sunxi_musb_mode_cfg_suniv),
.multipoint = true,
.dyn_fifo = true,
.num_eps = SUNXI_MUSB_MAX_EP_NUM_SUNIV,
.ram_bits = SUNXI_MUSB_RAM_BITS,
};
修改后如下:
在第728~733行中间,代码修改如下:
if (!of_device_is_compatible(np, “allwinner,sun8i-h3-musb”))
pdata.config = &sunxi_musb_hdrc_config_h3;
else if (of_device_is_compatible(np, “allwinner,suniv-f1c100s-musb”))
pdata.config = &sunxi_musb_hdrc_config_suniv;
else
pdata.config = &sunxi_musb_hdrc_config;
修改后如下:
在第739~741行中间,代码修改如下:
if (of_device_is_compatible(np, “allwinner,sun4i-a10-musb”) ||
of_device_is_compatible(np, “allwinner,suniv-f1c100s-musb”))
set_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags);
修改后如下:
在第746~751行中间,代码修改如下:
if (of_device_is_compatible(np, “allwinner,sun8i-a33-musb”) ||
of_device_is_compatible(np, “allwinner,sun8i-h3-musb”) ||
of_device_is_compatible(np, “allwinner,suniv-f1c100s-musb”)) {
set_bit(SUNXI_MUSB_FL_HAS_RESET, &glue->flags);
set_bit(SUNXI_MUSB_FL_NO_CONFIGDATA, &glue->flags);
}
修改后如下:
在第841行,插入代码如下:
{ .compatible = “allwinner,suniv-f1c100s-musb”, },
修改后如下:
2、配置设备树
2.1、修改suniv-f1c100s.dtsi文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s.dtsi文件。
在第9行插入如下代码:
#include “sunxi-common-regulators.dtsi”
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/dma/sun4i-a10.h>
插入代码后,如下:
在第289行插入如下代码:
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";
};
插入后如下:
2.2、修改suniv-f1c100s-licheepi-nano.dts文件
打开linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts文件。
在文件最后插入如下代码:
&otg_sram {
status = "okay";
};
&usb_otg {
dr_mode = "peripheral";
status = "okay";
};
&usbphy {
/* usb0_id_det = <&pio 4 2 GPIO_ACTIVE_HIGH>; */ /* PE2 */
status = "okay";
};
插入后如下:
3.选择usb驱动添加到内核:
在内核顶层目录下,输入make menuconfig,进行如下配置
Device Drivers --->
[*] USB support --->
<*> Inventra Highspeed Dual Role Controller
MUSB Mode Selection (Dual Role mode) ---> (这里要配置为Dual Role mode)
*** Platform Glue Layer ***
<*> Allwinner (sunxi)
*** MUSB DMA mode ***
[ ] Disable DMA (always use PIO)
USB Physical Layer drivers --->
<*> NOP USB Transceiver Driver
<*> USB Gadget Support --->
<*> USB Gadget functions configurable through configfs
[*] Ethernet Control Model (CDC ECM)
[*] Ethernet Control Model (CDC ECM) subset
[*] RNDIS
[*] Ethernet Emulation Model (EEM)
[*] Function filesystem (FunctionFS)
USB Gadget precomposed configurations --->
<*> Ethernet Gadget (with CDC Ethernet support)
[*] RNDIS support
<*> CDC Composite Device (Ethernet and ACM)
然后保存退出内核配置
4、最后按照之前的方法编译,并将新的内核与设备树文件,按照之前的方法在板子上运行,运行后不要拔下开发板与电脑连接的USB线。
开发板运行起来之后,在开发板命令行终端输入如下命令:
vi /etc/network/interfaces
在文件的最后插入如下代码:
allow-hotplug usb0
auto usb0
iface usb0 inet static
address 192.168.5.100
netmask 255.255.255.0
gateway 192.168.5.1
插入后,如下:
5、win7安装相关驱动
打开电脑设备管理器,在其他设备条目中,会看到RNDIS/Ethernet Gadget有感叹号。
驱动安装步骤如下:
5.1、右击RNDIS/Ethernet Gadget条目,选中更新驱动程序软件;
5.2、点击------浏览计算机以查找驱动程序软件;
5.3、点击------从计算机的设备驱动程序列表中选择;
5.4、选择网络适配器,并点击下一步;
5.5、厂商选择Microsoft Corporation,网络适配器选择Remote NDIS Compatible Device(实际测试选择Remote NDIS based Internet Share Device也可以),然后点击下一步,如有警告弹窗,点击是,等待安装完成。
6、win10安装相关驱动
当设备插入WIN10系统时,有的时候会识别为虚拟串口,更新以下驱动,可以实现USB网络功能(RNDIS)。
7、然后将开发板与电脑配置成同一个网段,一定要关闭电脑防火墙或者设置ip白名单,然后开发板与电脑就可以相互ping通。文章来源:https://www.toymoban.com/news/detail-518959.html
QQ:763314235,会在第一时间处理。文章来源地址https://www.toymoban.com/news/detail-518959.html
到了这里,关于7、Lctech Pi(F1C200S)开启RNDIS,通过USB与电脑联网(CherryPi,Mangopi,F1C100S)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!