7、Lctech Pi(F1C200S)开启RNDIS,通过USB与电脑联网(CherryPi,Mangopi,F1C100S)

本次主要参考:
荔枝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文件中,修改如下:
在第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;

扫描二维码关注公众号,回复: 15244958 查看本文章

修改后如下:在这里插入图片描述
在第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);
}

修改后如下:
在这里插入图片描述
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、然后将开发板与电脑配置成同一个网段,就可以ping通。

QQ:763314235,会在第一时间处理。

猜你喜欢

转载自blog.csdn.net/GJF712/article/details/126574807
今日推荐