u-boot网络移植

news/2024/9/22 1:42:26

修改网口配置信息

主要修改设备树的信息,设备树位于: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    0x70a1MX6UL_PAD_BOOT_MODE1__GPIO5_IO11    0x70a1/* 直接注释掉 *//* MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07   0x70a1MX6UL_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  0x1b0b0MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER  0x1b0b0MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN  0x1b0b0MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0MX6UL_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     0x1b0b0MX6UL_PAD_GPIO1_IO06__ENET2_MDIO    0x1b0b0MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN  0x1b0b0MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER  0x1b0b0MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN  0x1b0b0MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0MX6UL_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 1Error: ethernet@20b4000 address not set.Error: ethernet@20b4000 address not set.Error: ethernet@20b4000 address not set.
Could not get PHY for FEC0: addr 0Error: 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 deviceARP 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C#循环体特点

C#循环体特点 while 先判断条件,后执行循环体每次执行,均需先验证条件,比如读取每一行数据前检查是否有数据 do...while 先执行1次循环体,再判断条件,第一次执行无需验证条件,比如输入密码,若错误则重新输入 for 与循环次数有关的元素都放在(::)里面,已知循环次数,…

【Azure Contianer Apps】在云上使用容器应用时收集日志遇见延迟问题

问题描述 把应用部署到Azure Container Apps(容器应用),可以在Container App Environemnt级别设置诊断日志,把日志收集到Event Hub / Log Analystic Workspace / Storage Account中。 虽然,这样能把日志导出到目标源中。但在检查日志时候,发现延迟很大,通常要等待7-10分钟…

Rust winit 0.30.0版本简介

不久前,Rust著名的跨平台窗体管理库winit发布了它的0.30.0版本,较之前的0.2x.x版本,新增了19个的模块API,改动大约19个模块API,移除了大约8个模块API。可见本次升级改动之大,主要是对事件循环、窗口管理的重构。鉴于目前网上较多的文章都是基于0.2x版本的winit的代码,存…

4-常用标签

标题标签<h1> - <h6>为了使网页更具有语义化,我们经常会在页面中用到标题标签。HTML提供了6个等级的网页标题加了标题的文字会变的加粗,字号也会一次变大。 一个标题独占一行段落和换行标签在网页中,要把文字有条理地显示出来,就需要将这些文字分段显示。在HTM…

智慧安防系统:构建更安全的社区环境

随着科技的不断进步,人们的生活质量得到了显著提高。然而,与此同时,社会治安问题也日益凸显。为了维护社会的和谐稳定,提高人们的生活安全感,智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分析、建设目标、建设内容、技术方案、安全设计以及结语…

桌面图标间距Bug:Win10/Win11桌面图标占用空间变成长方形怎么办?

在使用Windows 10或Windows 11操作系统时,桌面图标的间距突然变得很大,变成了长方形。阅读全文:https://itxiaozhang.com/win10-win11-desktop-icon-bug-rectangular-fix/ 此教程配合视频学习效果最佳,视频教程在文章末尾。问题描述 在使用Windows 10或Windows 11操作系统时…

量化交易:财务选股RSRS择时的策略

哈喽,大家好,我是木头左!引言 本文将介绍一种结合财务指标选股和RSRS(Risk-Adjusted Return to Strength Ratio)择时的策略,旨在帮助投资者在复杂的市场环境中做出更明智的决策。 感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流! 策略原理 财务指标选…

流畅的python--第三章

字典 示例3-1-1字典推导式示例3-1-2映射拆包 在调用函数时,不止一个参数可以使用**。但是所有键都要是字符串,而且在所有参数中,是唯一的(因为关键字参数不可重复)。示例3-1-3使用|合并映射 合并映射遵循重复键情况下后键覆盖前键的规律。可哈希 如果一个对象的哈希码在整…