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 分钟前
QQ登录测试用例报告
运维·服务器·测试用例
9毫米的幻想44 分钟前
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
linux·运维·服务器·c语言·c++
刘什么洋啊Zz1 小时前
剖析IO原理和零拷贝机制
java·运维·网络
升讯威在线客服系统1 小时前
如何通过 Docker 在没有域名的情况下快速上线客服系统
java·运维·前端·python·docker·容器·.net
leoufung2 小时前
vim 多个关键字高亮插件介绍
linux·编辑器·vim
Karoku0663 小时前
【CI/CD】CI/CD环境搭建流程和持续集成环境配置
运维·ci/cd·docker·容器·kubernetes·prometheus
Nerd Nirvana5 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
勤奋的凯尔森同学6 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
丁卯4047 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库