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

相关推荐
热爱嵌入式的小许1 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
韩楚风5 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学5 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO5 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu75 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我5 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、5 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程5 小时前
Linux中环境变量
linux
我是哈哈hh6 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈6 小时前
C++——模板进阶、继承
java·服务器·c++