首页 > 系统相关 >IMX6ULL Linux内核网络驱动修改

IMX6ULL Linux内核网络驱动修改

时间:2024-05-19 09:11:58浏览次数:28  
标签:ethphy0 PHY 引脚 pinctrl 修改 phy 内核 Linux IMX6ULL

IMX6ULL 网络驱动修改

主要修改arch/arm/boot/dts/imx6ul-14x14-evk.dtsi设备树文件即可,修改方式和u-boot的设备树修改一致。

硬件电路

网口原理图

设备树修改

需要修改的设备树位置:arch/arm/boot/dts/imx6ul-14x14-evk.dtsi

增加复位引脚信息

从上面的原理图可知网口1使用的复位引脚是GPIO5_IO07,网口2使用的复位引脚是GPIO5_IO08,在官方的例程中,这两个引脚被用于SPI4,所以我们SPI4里面这两个引脚的相关信息,修改如下图所示。

SPI4引脚

还需要屏蔽掉pinctrl_spi4里面相关的信息,修改如下:

pinctrl_spi4

添加网口复位的pinctrl描述,增加位置如下:
pinctrl_enet_reset
相关代码段:

     pinctrl_enet1_reset: enet1resetgrp {
         fsl,pins = <
             MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0
         >;
     };

     pinctrl_enet2_reset: enet2resetgrp {
         fsl,pins = <
             MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0
         >;
     };

修改网口TX时钟的电器属性值

修改的位置如下:
网口时钟引脚的电器属性值

需要把0x4001b031修改为:0x4001b009

修改结果如下:

     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
             /* 0x4001b031修改为0x4001b009 */
             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
             /* 0x4001b031修改为0x4001b009 */
             MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2  0x4001b009
         >;
     };

修改fec信息

fec是6ull描述网络的节点,修改位置如下:

fec

  1. 从节点上面的信息我们可以看见ethphy0使用的PHY地址为2,ethphy1使用的PHY地址是1,但是我们的ethphy0使用的PHY地址为0,ethphy1使用的PHY地址是1,所以我们需要修改ethphy0的PHY地址。
  2. 设备树上写的ethphy0和ethphy1使用的PHY芯片为micrel的芯片,我们使用的是LAN7820A,是smsc家的芯片,所以我们也需要修改这个。
  3. 我们还需要增加相关的复位引脚信息

综上修改如下:

&fec1 {
    pinctrl-names = "default";
    /* 增加pinctrl_enet1_reset */
    pinctrl-0 = <&pinctrl_enet1 &pinctrl_enet1_reset>;
    phy-mode = "rmii";
    phy-handle = <&ethphy0>;
    /* 设置复位有效电平和持续时间 */
    phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;
    phy-rest-duration = <200>;
    status = "okay";
};
&fec2 {
    pinctrl-names = "default";
    /* 增加pinctrl_enet2_reset */
    pinctrl-0 = <&pinctrl_enet2 &pinctrl_enet2_reset>;
    phy-mode = "rmii";
    phy-handle = <&ethphy1>;
    /* 设置复位有效电平和持续时间 */
    phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
    phy-rest-duration = <200>;
    status = "okay";
    mdio {
        #address-cells = <1>;
        #size-cells = <0>;
        /* 修改ethphy0的PHY地址为0,下面的reg也要设置为0 */
        ethphy0: ethernet-phy@0 {
            reg = <0>;
            /* 修改为使用smsc的芯片 */
            smsc,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET_REF>;
            clock-names = "rmii-ref";

        };
        ethphy1: ethernet-phy@1 {
            reg = <1>;
            /* 修改为使用smsc的芯片 */
            smsc,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET2_REF>;
            clock-names = "rmii-ref";
        };
    };
};

标签:ethphy0,PHY,引脚,pinctrl,修改,phy,内核,Linux,IMX6ULL
From: https://www.cnblogs.com/Hlc-/p/18200017

相关文章

  • linux:权限
    在使用windows系统时我们可以在文件资源管理器中找到用户目录,一般个人计算机只有一个用户,就是计算机拥有者,个人使用计算机也没有创建多个用户的需求场景,但是不妨碍它存在,不同用户的权限不同,比如有些目录的读写操作只有管理员才可以使用,而普通用户使用时会被拒绝,这就是......
  • [20240516]建立完善vim bccalc_linux.vim插件.txt
    [20240516]建立完善vimbccalc_linux.vim插件.txt--//同步对linux版本做了修改,我自己很少使用,没有测试.--//安装很简单的拷贝到plugin,目录.$catbccalc_linux.vim""calculateexpressionenteredoncommandlineandgiveanswer,e.g.:"":Calculatesin(3)+sin(4)^2......
  • Linux集群管理
    1.ssh密钥认证全过程 2.Ansible自动化运维:批量管理,批量分发,批量执行,维护。。Ansible是python写的.  3.Ansible管理架构Inventory主机清单:被管理主机的ip列表,分类.ad-hoc模式:命令行批量管理(使用ans模块),临时任务.playbook剧本模式:类似于把操作写出脚......
  • Linux 文件系统(三) --- overlayfs简介
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  对于overlay文件系统来说,我以前只是听过,具体貌似docker里面使用了相关技术,但是也仅仅限于听过了。  最近,由于需要通过tar来备份一个系......
  • Linux常用命令之文件相关操作
    Linux读写操作常用命令:1、open:打开文件,可创建文件、设置文件读写模式intopen(constchar*pathname,intflags,mode_tmode);2、creat:创建新文件intcreat(constchar*pathname,mode_tmode);3、openat:可指定目录创建新文件intopenat(intdirfd,constchar*path......
  • Linux系统安全配置基线
    https://www.cnblogs.com/sun-sunshine123/p/7119472.html一:共享账号检查配置名称:用户账号分配检查,避免共享账号存在配置要求:1、系统需按照实际用户分配账号;2、避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享。操作指南:参考配置操作:cat/etc/pas......
  • Linux/Golang/glibC系统调用
    Linux/Golang/glibC系统调用本文主要通过分析Linux环境下Golang的系统调用,以此阐明整个流程有时候涉略过多,反而遭到质疑~,写点文章证明自己实力也好Golang系统调用找个函数来分析https://pkg.go.dev/os/exec#Cmd.Wait源码文件在src/os目录下的:exec.go->exec_unix.go->......
  • 内核APC执行过程
    3.内核APC执行过程说明未文档化但是导出,所以需要提前声明具体看下面的代码中的struct.hKeInitializeApc参数//初始化apc函数VOIDKeInitializeApc( __outPRKAPCApc,//使用`PKAPCpKapc`初始化 __inPRKTHREADThread,//内核中填当前线程即可 __inKAPC_ENVIRONMENTEnv......
  • linux网络配置
    使用netplan(适用于Ubuntu18.04及以后版本)编辑netplan配置文件Netplan配置文件位于/etc/netplan/目录中,文件名通常以.yaml结尾。打开该文件进行编辑:sudonano/etc/netplan/01-netcfg.yaml配置示例以下是一个netplan配置示例,其中eth0接口的IP地址设置为192......
  • 在Linux中,什么是操作系统?
    操作系统(OperatingSystem,OS)是管理和抽象计算机硬件资源,为用户和应用程序提供运行环境的系统软件。它是计算机系统中最关键的软件之一,充当硬件和用户、应用程序之间的中间层。以下是操作系统的一些核心概念和功能:1.核心功能:进程管理:操作系统负责创建、调度、同步、通信和终......