Linux 网络驱动实验

本文章对Linux 网络驱动实验中的设备树进行介绍,Linux网络驱动程序比较复杂,只要学会应用。

1、I.MX6ULL****网络外设设备树
I.MX6ULL 有两个 10/100M 的网络 MAC 外设,因此 I.MX6ULL 网络驱动主要就是这两个网络 MAC 外设的驱动。
fec1 和 fec2 分别对应 I.MX6ULL 的 ENET1 和 ENET2

复制代码
示例代码 69.4.1.2 网络引脚 pinctrl 信息 
pinctrl_enet1: enet1grp { 
    fsl,pins = < 
        MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0 
        MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0 
        MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0 
        MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 
        MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 
        MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 
        MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 
        MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b009 
    >; 
}; 

pinctrl_enet2: enet2grp {  
    fsl,pins = < 
    MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0 
    MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0 
    MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0 
    MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0  
    MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0 
    MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0  
    MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0 
    MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0 
    MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0 
    MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b009 
    >; 
}; 

/*enet1 reset zuozhongkai*/ 
pinctrl_enet1_reset: enet1resetgrp { 
    fsl,pins = < 
        /* used for enet1 reset */  
        MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 
     >; 
}; 

/*enet2 reset zuozhongkai*/ 
pinctrl_enet2_reset: enet2resetgrp { 
    fsl,pins = < 
        /* used for enet2 reset */ 
        MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0 
>; 
}; 

&fec1 { 
    pinctrl-names = "default";  
    pinctrl-0 = <&pinctrl_enet1 
                &pinctrl_enet1_reset>; 
    phy-mode = "rmii"; 
    phy-handle = <&ethphy0>; 
    phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; 
    phy-reset-duration = <200>; 
    status = "okay"; 
}; 

&fec2 { 
    pinctrl-names = "default"; 
    pinctrl-0 = <&pinctrl_enet2 
                &pinctrl_enet2_reset>; 
    phy-mode = "rmii"; 
    phy-handle = <&ethphy1>; 
    phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; 
    phy-reset-duration = <200>; 
    status = "okay"; 
    mdio { 
        #address-cells = <1>; 
        #size-cells = <0>; 

    ethphy0: ethernet-phy@0 { 
        compatible = "ethernet-phy-ieee802.3-c22"; 
        reg = <0>; 
     }; 

    ethphy1: ethernet-phy@1 { 
        compatible = "ethernet-phy-ieee802.3-c22"; 
        reg = <1>;  
    }; 
    }; 
}; 

ENET1 网口的节点属性,设置 ENET1 所使用的引脚 pinctrl 节点信息,设置网络对应的 PHY 芯片接口为 RMII,这个要根据实际的硬件来设置。设置 PHY 芯片的句柄为 ethphy0,MDIO 节点会设置 PHY 信息。其他的属性信息就很好理解了,基本已经在上面讲解绑定文档的时候说过了。

ENET2 网口的节点属性,基本和 ENET1 网口一致,区别就是多了第 mdio 子节点,前面讲解绑定文档的时候说了,mido 子节点用于描述 MIDO 总线,在此子节点内会包含 PHY 节点信息。这里一共有两个 PHY 子节点:ethphy0 和 ethphy1,分别对应ENET1 和 ENET2 的 PHY 芯片。比如"ethphy0: ethernet-phy@0"就是 ENET1 的 PHY节点名字,"@"后面的 0 就是此 PHY 芯片的芯片地址,reg 属性也是描述 PHY 芯片地址的,这点和 IIC 设备节点很像。其他地方就没什么好多的了,绑定文档已经讲解的很清楚了。

相关推荐
叶落阁主8 分钟前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
0xDevNull7 小时前
Linux切换JDK版本详细教程
linux
进击的丸子7 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
茶杯梦轩8 小时前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
甲鱼9291 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao2 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件3 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux