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

相关推荐
Ruiery3 小时前
Linux 6.6内核 CPU 深度解析(七):调度器启动 — 从单核到多核,调度器分阶段点亮
linux·运维·服务器
50万马克的面包3 小时前
CSDN-栈队列数组-知识点整理
linux·运维·服务器
MicrosoftCloud3 小时前
用户权限 04|/etc/sudoers 安全配置:从最小授权到「别把 ALL 随便给人」
运维·安全·ubuntu·sudo·sudoers
wjkjpcba4 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭4 小时前
达梦事物特性及MVCC
linux·运维·数据库
91刘仁德6 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
亚川楼宇自控系统数据中心厂家6 小时前
实验室智能化管理系统|人环物智一体化管控平台
运维
羔羊++6 小时前
18_实验十七_其他命令与自定义启动变量
linux
zmsup7 小时前
Agent 上下文调优:结合 OpsArk 运维智能体,设计模型每一步真正需要的信息
运维·agent·上下文压缩·运维智能体·上下文调优
DYWorker0018 小时前
Linux驱动:RK3568 GMAC + YT8531C 千兆以太网全流程解剖
linux