首页 > 其他分享 >u-boot网络移植

u-boot网络移植

时间:2024-05-14 20:19:22浏览次数:14  
标签:网口 boot 网络 pinctrl 修改 phy ethernet 如下 移植

修改网口配置信息

主要修改设备树的信息,设备树位于:arch/arm/dts/imx6ul-14x14-evk.dtsi

硬件电路图

网口原理图

修改fec2信息

未修改前的信息如下:
fec2原本

修改网口1器件的ID信息,网口1使用的ID是0

 &fec2 {
     pinctrl-names = "default";
     pinctrl-0 = <&pinctrl_enet2>;
     phy-mode = "rmii";
     phy-handle = <&ethphy1>;
     status = "okay";
 
     mdio {
         #address-cells = <1>;
         #size-cells = <0>;
        /* 网口1的设备ID是0设置为@0 */
        ethphy0: ethernet-phy@0 {
            /* reg的值要修改为0 */
            reg = <0>;
            micrel,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET_REF>;
            clock-names = "rmii-ref";
        };

        ethphy1: ethernet-phy@1 {
            reg = <1>;
            micrel,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET2_REF>;
            clock-names = "rmii-ref";
        };
    };
};

IO信息修改

注释掉SPI4的引脚信息

从上面的原理图可知网口1使用的复位引脚是GPIO5_IO07,网口2使用的复位引脚是GPIO5_IO08,在官网的u-boot里面这两个引脚被用于SPI4,所以我们需要去注释掉他,位置如下图所示:
SPI4设备树位置

修改如下:

pinctrl_spi4: spi4grp {
         fsl,pins = <
             MX6UL_PAD_BOOT_MODE0__GPIO5_IO10    0x70a1
             MX6UL_PAD_BOOT_MODE1__GPIO5_IO11    0x70a1
             /* 直接注释掉 */
             /* MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07   0x70a1
             MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08  0x80000000 */
         >;
};

还需要把SPI4修改的设备树信息进行修改,位置如下:
SPI4设备树的信息

修改如下:

spi4 {
    compatible = "spi-gpio";
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_spi4>;
    status = "okay";
    /* 注释掉GPIO5_IO08相关的信息 */
    /* pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; */
    gpio-sck = <&gpio5 11 0>;
    gpio-mosi = <&gpio5 10 0>;
    /* 注释掉GPIO5_IO07相关的信息 */
    /* cs-gpios = <&gpio5 7 0>; */
    num-chipselects = <1>;
    #address-cells = <1>;
    #size-cells = <0>;

    gpio_spi: gpio@0 {
        compatible = "fairchild,74hc595";
        gpio-controller;
        #gpio-cells = <2>;
        reg = <0>;
        registers-number = <1>;
        registers-default = /bits/ 8 <0x57>;
        spi-max-frequency = <100000>;
    };
};

修改网口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
         >;
     };

增加网口复位引脚的信息

引脚复位信息增加在下面的位置,如下:
网口复位引脚信息
下面是相关代码段,可以直接复制:

     pinctrl_enet1_reset: enet1resetgrp {
         fsl,pins = <
             MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0
         >;
     };
     pinctrl_enet2_reset: enet2resetgrp {
         fsl,pins = <
             MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0
         >;
     };

为网口的信息增加pinctrl信息

需要修改的位置如下:
网口设备树的信息

修改后的信息如下:

&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: ethernet-phy@0 {
            reg = <0>;
            /* 增加当前的PHY为smsc */
            smsc,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET_REF>;
            clock-names = "rmii-ref";

        };
        ethphy1: ethernet-phy@1 {
            reg = <1>;
            /* 增加当前的PHY为smsc */
            smsc,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET2_REF>;
            clock-names = "rmii-ref";
        };
    };
};

增加SMSC系列的芯片的支持

make menuconfig

选择Microchip(SMSC) Ethernet PHYs support修改配置
menuconfig_SMSC

重新编译烧录验证

export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export ARCH=arm
make -j4
#烧录
sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx bs=1k of=/dev/sdb seek=1

在板子上进行验证如下

在板子上启动可能会出现如下错误信息,这个信息是没有配置网口的地址导致的,下面进行配置即可:

Net:   Could not get PHY for FEC1: addr 1

Error: ethernet@20b4000 address not set.

Error: ethernet@20b4000 address not set.

Error: ethernet@20b4000 address not set.
Could not get PHY for FEC0: addr 0

Error: ethernet@20b4000 address not set.

Error: ethernet@20b4000 address not set.
Could not get PHY for FEC0: addr 0
No ethernet found.

u-boot默认使用网口2,我使用路由器与板子相连,板子的网关地址为192.168.2.1,先配置网络信息如下:

setenv ipaddr 192.168.2.230
setenv ethaddr 00:04:9f:04:d2:35
setenv eth1addr 00:04:9f:04:d2:36
setenv gatewayip 192.168.2.1
setenv netmask 255.255.255.0
saveenv

进行ping路由器

结果如下:

ping 192.168.2.1
Get shared mii bus on ethernet@2188000
ethernet@20b4000 Waiting for PHY auto negotiation to complete.... done
Using ethernet@20b4000 device

ARP Retry count exceeded; starting again
ping failed; host 192.168.2.1 is not alive

是由于PHY复位失败,所以需要修改drivers/net/phy/phy.c的genphy_config_aneg函数代码,位置如下:
genphy_config_aneg位置
修改结果如下:

int genphy_config_aneg(struct phy_device *phydev)
{
    int result;
    /* 新增加这条复位代码 */
    phy_reset(phydev);
    if (phydev->autoneg != AUTONEG_ENABLE)
        return genphy_setup_forced(phydev);

    result = genphy_config_advert(phydev);

    if (result < 0) /* error */
        return result;

    if (result == 0) {
        /*
         * Advertisment hasn't changed, but maybe aneg was never on to
         * begin with?  Or maybe phy was isolated?
         */
        int ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);

        if (ctl < 0)
            return ctl;

        if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
            result = 1; /* do restart aneg */
    }

    /*
     * Only restart aneg if we are advertising something different
     * than we were before.
     */
    if (result > 0)
        result = genphy_restart_aneg(phydev);

    return result;
}

标签:网口,boot,网络,pinctrl,修改,phy,ethernet,如下,移植
From: https://www.cnblogs.com/Hlc-/p/18192177

相关文章

  • 【JavaWeb】前后端分离SpringBoot项目快速排错指南
    1发起业务请求打开浏览器开发者工具,同时显示网络(Internet)和控制台(console)接着,清空控制台和网络的内容,如下图然后,点击你的业务按钮,发起请求。首先看控制台有没有报错信息,这是最直观的,看不懂英文就去翻译一下,百度一下如果控制台的信息并没有什么价值,或者指明是后端的问题,那么......
  • 基于胎心仪的胎儿心脏诊断神经网络
    具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI胎心率(FHR)对于评估胎儿的健康状况具有重要意义。然而,基于传统的分类标准并不准确。随着计算机信息技术的飞速发展,计算机技术对于胎儿电子监护(EFM)中的胎心率分析至关重要。胎心率分为正常、可疑和异常三类......
  • BiTCN:基于卷积网络的多元时间序列预测
    前言 本文将详细介绍了BiTCN,这是2023年3月在《Parameter-efficientdeepprobabilisticforecasting》一文中提出的模型。通过利用两个时间卷积网络(TCN),该模型可以编码过去和未来的协变量,同时保持计算效率。作者:MarcoPeixeiro本文转载自DeephubImba仅用于学术分享,若侵权请......
  • IDEA社区版(IDEA Community Edition)创建Springboot父子项目
    1.因为社区办不支持使用springSpringInitializr的方式创建项目,但是我们可以考虑使用别的方式达到效果:创建方式有3种:第一种:使用https://start.spring.io/官方URL创建项目,再导入到IDEACommunityEdition(后面简称:ideaC)。具体使用自行百度。缺点:没办法自定义springboot的......
  • 检查某个端口是否被udp网络程序占用
    代码分为2部分;1.随机生成一个未被udp占用的端口号2.启动一个udp程序,使用我们刚才找到的端口号 #include<iostream>#include<sys/socket.h>#include<netinet/in.h>#include<cstring>#include<cstdlib>#include<ctime>#include<unistd.h>......
  • macOS Ventura 13.6.7 (22G720) Boot ISO 原版可引导镜像下载
    macOSVentura13.6.7(22G720)BootISO原版可引导镜像下载5月14日凌晨,macOSSonoma14.5发布,同时带来了macOSVentru13.6.7安全更新。macOSVentura13.6及更新版本,如无特殊说明皆为安全更新,不再赘述。本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下......
  • macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载
    macOSMonterey12.7.5(21H1222)BootISO原版可引导镜像下载5月13日凌晨,macOSSonoma14.5发布,同时带来了macOSVentru13.6.7和macOSMonterey12.7.5安全更新。本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在......
  • 【SpringBoot】实现项目启动后执行的两个接口ApplicationRunner和CommandLineRunner
    开发中可能会有这样的场景,需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。两个启动加载接口分别是:CommandLineRunner和ApplicationRunner。Spring提供了接口InitializingBean,jdk提供了@PostCo......
  • 基于MATLAB手搓人工神经网络
    神经网络基本概念​ 神经网络,模拟生物神经网络,节点称为神经元。神经网络分层命名,直接接收输入数据的是输入层,输出结果的是输出层,输入层与输出层之间的是隐藏层。​ 前向传播:数据从输入层开始,逐层向前传播计算,直到输出层得到输出结果。​ 反向传播:将输出层输出的结果与真实值进......
  • springboot+vue创建_1
    Springboot+vue创建一、创建后台项目1.在文件夹创建一个空文件夹,在idea中打开它2.可以先修改一下file-->settings-->Maven里面的一下东西,改成自己的maven地址(以免后面pom.xml文件有问题)3.在sb_vue_mo中右键-->new-->Module,选择SpringInitializer之后自行修改我是选择了ja......