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 设备节点很像。其他地方就没什么好多的了,绑定文档已经讲解的很清楚了。

相关推荐
少妇的美梦2 分钟前
logstash教程
运维
chen94525 分钟前
k8s集群部署vector日志采集器
运维
chen94532 分钟前
aws ec2部署harbor,使用s3存储
运维
轻松Ai享生活5 小时前
5 节课深入学习Linux Cgroups
linux
christine-rr5 小时前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神5556 小时前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆6 小时前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs
qq_264220896 小时前
LVS负载均衡群集和LVS+Keepalived群集
运维·负载均衡·lvs
乌萨奇也要立志学C++6 小时前
【Linux】进程概念(二):进程查看与 fork 初探
linux·运维·服务器
雨落Liy6 小时前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡