【迅为iMX6Q】开发板 u-boot 2020.04 RTL8211E 以太网驱动适配

news2024/11/19 0:38:06

相关参考

【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动

【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动

【迅为iMX6Q】开发板 u-boot 2022.04 SD卡 启动

开发环境

  • win10 64位

  • VMware Workstation Pro 16

  • ubuntu 22.04

  • 【迅为imx6q】开发板, 2G DDR

目标

  • 调通 u-boot 下的 以太网驱动,通过迅为imx6q 开发板原理图,发现以太网 PHY 使用的是:RTL8211E

在这里插入图片描述

适配方法

  • u-boot 2020.04 board 适配,源自 board/freescale/mx6sabresd/,默认以太网 PHY 不是 RTL8211E,而是 ATHEROSAR8031

  • 所以开机后, u-boot 打印提示找不到 PHY, 信息如:Net: Could not get PHY for FEC0: addr 0

U-Boot 2020.04-00020-ga68db489ce (Jan 08 2023 - 21:44:16 +0800)

CPU:   i.MX6Q rev1.3 996 MHz (running at 792 MHz)
CPU:   Extended Commercial temperature grade (-20C to 105C) at 32C
Reset cause: POR
Model: i.MX6 Quad Topeet Smart Device Board
Board: MX6-topeet
DRAM:  2 GiB
MMC:   FSL_SDHC: 1, FSL_SDHC: 2, FSL_SDHC: 3
Loading Environment from MMC... OK
No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024x768)
In:    serial
Out:   serial
Err:   serial
flash target is MMC:1
Net:   Could not get PHY for FEC0: addr 0
Could not get PHY for FEC0: addr 0
No ethernet found.

Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
  • 更改 PHY 的型号,可以通过 menuconfig 配置,当前直接在 头文件 include/configs/mx6sabre_common.h 中定义了 #define CONFIG_PHY_ATHEROS

修改一、增加 mx6q_topeet_common.h

  • 复制一份 include/configs/mx6sabre_common.hinclude/configs/mx6q_topeet_common.h

修改二、mx6q_topeet.h

  • include/configs/mx6q_topeet.h,更改包含的头文件:#include "mx6sabre_common.h" 改为 #include "mx6q_topeet_common.h"

在这里插入图片描述

在这里插入图片描述

修改三、增加RTL8211E 驱动宏定义

  • 修改 include/configs/mx6q_topeet_common.h

#define CONFIG_PHY_ATHEROS 改为 #define CONFIG_PHY_REALTEK

  • 新增 #define CONFIG_FEC_MXC_PHYADDR 0

在这里插入图片描述

修改四、 增加PHY 复位的 delay

  • 经过测试,发现以上修改 PHY 型号后,以太网驱动依旧提示找不到 PHY,需要修改设备树文件,增加 phy 复位的 delay

  • 修改 arch/arm/dts/imx6qdl-topeet.dtsi,如下

&fec {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet>;
	phy-mode = "rgmii";
	phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
	phy-reset-duration = <10>;
	phy-reset-post-delay = <100>;
	fsl,magic-packet;
	status = "okay";
};
  • 也就是在 @fec 设备树节点,增加
   phy-reset-duration = <10>;
   phy-reset-post-delay = <100>;

在这里插入图片描述

重新配置并编译

  • 重新配置并编译 u-boot,烧写到 sd 卡中验证

  • make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- mx6q_topeet_defconfig

  • make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j4

  • 通过 ubuntu 烧写到 sd 卡中

  • sudo dd if=u-boot-dtb.imx of=/dev/sdc bs=512 seek=2 && sync,注意 /dev/sdc 是 sd 卡在 ubuntu 下识别的设备,可能不一样,不要搞错

启动信息

  • 第一次启动 u-boot 后,需要设置一些 env 网络相关的参数,开发板需要通过网线,连接到【路由器】,或者通过交叉网线,直接连接到【电脑】。电脑与开发板,应该在同一个网段

  • 开机进入 u-boot 命令行,输入如下命令

  • 设置 ethaddr setenv ethaddr '0e:b4:00:52:24:0e'

  • 设置 serverip setenv serverip '192.168.1.100'

  • 设置 ipaddr setenv ipaddr '192.168.1.110'

  • 设置 netmask setenv netmask '255.255.255.0'

  • 设置 gatewayip setenv gatewayip '192.168.1.1'

  • 最后 saveenv 保存 env 设置,并 reset 重启

=> setenv ethaddr '0e:b4:00:52:24:0e'
=> setenv serverip '192.168.1.100'
=> setenv ipaddr '192.168.1.110'
=> setenv netmask '255.255.255.0'
=> setenv gatewayip '192.168.1.1'

=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK

=> reset
resetting ...

验证u-boot 下网络

  • 通过 ping 命令验证

  • ping 路由器网关地址,如

=> ping 192.168.1.1
Using ethernet@02188000 device
host 192.168.1.1 is alive
  • ping 电脑的 ip 地址
=> ping 192.168.1.100
Using ethernet@02188000 device
host 192.168.1.100 is alive
  • 说明【迅为iMX6Q】开发板 u-boot 2020.04 下的 以太网驱动,适配成功

u-boot 启动信息

U-Boot 2020.04-00021-g5802f0b622 (Jan 08 2023 - 21:48:15 +0800)

CPU:   i.MX6Q rev1.3 996 MHz (running at 792 MHz)
CPU:   Extended Commercial temperature grade (-20C to 105C) at 41C
Reset cause: POR
Model: i.MX6 Quad Topeet Smart Device Board
Board: MX6-topeet
DRAM:  2 GiB
MMC:   FSL_SDHC: 1, FSL_SDHC: 2, FSL_SDHC: 3
Loading Environment from MMC... OK
No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024x768)
In:    serial
Out:   serial
Err:   serial
flash target is MMC:1
Net:   eth0: ethernet@02188000 [PRIME]
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
=>
=>
=> printenv
baudrate=115200
board_name=TOPEET
board_rev=MX6Q
boot_fdt=try
bootargs=console=ttymxc0,115200 root=/dev/mmcblk1p3 rootwait rw
bootcmd=ext4load mmc 1:1 0x18000000 imx6q-topeet.dtb; ext4load mmc 1:1  0x12000000 zImage; bootz 0x12000000 - 0x18000000
bootcmd_mfg=run mfgtool_args;if iminfo ${initrd_addr}; then if test ${tee} = yes; then bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; else bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; fi; else echo "Run fastboot ..."; fastboot 0; fi;
bootdelay=3
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
dfu_alt_info=spl raw 0x400
dfu_alt_info_img=u-boot raw 0x10000
dfu_alt_info_spl=spl raw 0x400
dfuspi=dfu 0 sf 0:0:10000000:0
emmc_dev=3
emmcdev=2
epdc_waveform=epdc_splash.bin
ethact=ethernet@02188000
ethaddr=0e:b4:00:52:24:0e
ethprime=eth0
fastboot_dev=mmc1
fdt_addr=0x18000000
fdt_file=imx6q-topeet.dtb
fdt_high=0xffffffff
fdtcontroladdr=8df5f1a8
fileaddr=18000000
filesize=cedc
findfdt=if test $fdt_file = undefined; then if test $board_name = SABREAUTO && test $board_rev = MX6QP; then setenv fdt_file imx6qp-sabreauto.dtb; fi; if test $board_name = SABREAUTO && test $board_rev = MX6Q; then setenv fdt_file imx6q-sabreauto.dtb; fi; if test $board_name = SABREAUTO && test $board_rev = MX6DL; then setenv fdt_file imx6dl-sabreauto.dtb; fi; if test $board_name = SABRESD && test $board_rev = MX6QP; then setenv fdt_file imx6qp-sabresd.dtb; fi; if test $board_name = SABRESD && test $board_rev = MX6Q; then setenv fdt_file imx6q-sabresd.dtb; fi; if test $board_name = SABRESD && test $board_rev = MX6DL; then setenv fdt_file imx6dl-sabresd.dtb; fi; if test $fdt_file = undefined; then echo WARNING: Could not determine dtb to use; fi; fi;
findtee=if test $tee_file = undefined; then if test $board_name = SABREAUTO && test $board_rev = MX6QP; then setenv tee_file uTee-6qpauto; fi; if test $board_name = SABREAUTO && test $board_rev = MX6Q; then setenv tee_file uTee-6qauto; fi; if test $board_name = SABREAUTO && test $board_rev = MX6DL; then setenv tee_file uTee-6dlauto; fi; if test $board_name = SABRESD && test $board_rev = MX6QP; then setenv tee_file uTee-6qpsdb; fi; if test $board_name = SABRESD && test $board_rev = MX6Q; then setenv tee_file uTee-6qsdb; fi; if test $board_name = SABRESD && test $board_rev = MX6DL; then setenv tee_file uTee-6dlsdb; fi; if test $tee_file = undefined; then echo WARNING: Could not determine tee to use; fi; fi;
finduuid=part uuid mmc ${mmcdev}:2 uuid
gatewayip=192.168.1.1
get_cmd=dhcp
image=zImage
initrd_addr=0x12C00000
initrd_high=0xffffffff
ip_dyn=yes
ipaddr=192.168.1.110
kboot=bootz
loadaddr=0x12000000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadtee=fatload mmc ${mmcdev}:${mmcpart} ${tee_addr} ${tee_file}
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} ${smp} root=${mmcroot}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${tee} = yes; then run loadfdt; run loadtee; bootm ${tee_addr} - ${fdt_addr}; else if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;fi;
mmcdev=1
mmcpart=1
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} ${smp} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${tee} = yes; then ${get_cmd} ${tee_addr} ${tee_file}; ${get_cmd} ${fdt_addr} ${fdt_file}; bootm ${tee_addr} - ${fdt_addr}; else if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi; fi;
netmask=255.255.255.0
script=boot.scr
sd_dev=2
serial#=170da1d4ee695b4c
serverip=192.168.1.100
soc_type=imx6q
spi_bus=0
spi_uboot=0x400
splashimage=0x28000000
tee=no
tee_addr=0x20000000
tee_file=undefined
update_emmc_firmware=if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; if ${get_cmd} ${update_sd_firmware_filename}; then if mmc dev ${emmcdev} 1; then setexpr fw_sz ${filesize} / 0x200; setexpr fw_sz ${fw_sz} + 1; mmc write ${loadaddr} 0x2 ${fw_sz}; fi; fi
update_sd_firmware=if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; if mmc dev ${mmcdev}; then if ${get_cmd} ${update_sd_firmware_filename}; then setexpr fw_sz ${filesize} / 0x200; setexpr fw_sz ${fw_sz} + 1; mmc write ${loadaddr} 0x2 ${fw_sz}; fi; fi
weim_base=0x08000000
weim_uboot=0x08001000

Environment size: 4962/8188 bytes

小结

  • 适配 u-boot 下的以太网驱动,除了对照原理图,确认以太网驱动PHY 的 引脚配置,还需确认 u-boot 下配置的 PHY 型号是否一致,如【迅为imx6q】开发板,以太网 PHY 是 REALTEKRTL8211E

  • 以太网驱动 PHY,一般都需要 复位操作,增加delay 操作,新版本的u-boot,需要在设备树文件中增加。

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

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

相关文章

SAP Webservice 发布外网SAP端代理配置

前言 SAP Webservice接口发布外网的需求不算少见&#xff0c;一般是通过代理形式替换Webservice地址中的域名&#xff0c;但是完整的Webservice接口发布外网还需要以下步骤&#xff08;如果调用方在不做这些配置的情况下可以正常调用&#xff0c;则无需处理。&#xff09; 1. 配…

gravity 安装部署

gravity是由膜拜公司自主研发的不同数据库间数据同步工具。 官方介绍&#xff1a;https://github.com/moiot/gravity/blob/master/README-cn.md Gravity 是一款数据复制组件&#xff0c;提供全量、增量数据同步&#xff0c;以及向消息队列发布数据更新。 DRC 的设计目标是&a…

有电脑就可以干的工作有哪些?试试这些项目

现在几乎人人都有手机&#xff0c;吃饭时候看&#xff0c;睡觉的时候看&#xff0c;上个厕所也在看&#xff0c;有次坐地铁&#xff0c;发现很多上学的初中生、小学生都拿着手机&#xff0c;手机档次还挺高&#xff0c;都是最新的苹果、华为款的手机。反之再看看使用电脑的人又…

Linux——信号知识归纳(上)

一.信号概念&#xff08;一&#xff09;.大致认识信号是操作系统控制进程的一种方式&#xff0c;比如ctrl C、栈溢出程序崩溃、kill -9命令等底层都是操作系统发送信号给进程执行特定操作。因此&#xff0c;所有信号就底层而言都是操作系统发出的。同时&#xff0c;进程接收到信…

Java设计模式中桥接模式是什么/桥接模式有什么用,怎么运用桥接模式

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 5.5 桥接模式 5.5.1 定义 将抽象与实现分离&#xff0c;使他们可以独立变化&#xff0c;即用组合关系来代替继承关系实现&#xff0c;从而降低抽象与实现两个可变…

相参雷达(CSDN_0004_20220909)

文章编号&#xff1a;CSDN_0004_20220909 雷达信号处理中的一个基本操作是对样本进行积累&#xff0c;以提高SNR。积累的方式包括相参积累和非相参积累。相参积累是对复数信号&#xff08;既包括幅度又包括相位&#xff09;相加积累&#xff1b;非相参积累是对信号的幅度&#…

【时间复杂度与空间复杂度】衡量算法的标准,这篇文章让大家更深刻的理解时间复杂度和空间复杂度

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#xff0c;今天和大家一起讨论一下时间复杂度与空间复杂度&#xff0c;往往来说&#xff0c;这两者是衡量算法好坏的标准&#xff0c;举个简单的例子&#xff0c;你想吃核桃了&#xff0c;用牙能弄开&#xff0c;用夹子也能弄开…

SAP灵活工作流场景配置及Demo测试

首先确保对应流程模板处于激活状态,并且事件已经激活 1. 在Fiori app 管理工作流中配置流程场景 地址&#xff1a;/sap/bc/ui2/flp?sap-client100&sap-languageZH#Workflow-showList 选择创建的灵活工作流模板&#xff0c;点击添加&#xff0c;开始配置场景 维护基本属性及…

JavaSE学习day2_02, IDEA的使用(重点)

4. idea 4.1 什么是idea&#xff1f; 是Java的集成开发工具&#xff0c;该工具把编写代码&#xff0c;编译&#xff0c;运行&#xff0c;调试等都集中在一起了。目前绝大多数企业编程用的执行环境. 特点&#xff1a; 自动保存、自动编译。 我们在使用的时候主要注重于两步…

SpringCloud微服务!!

目录 1.系统架构的演变 2.微服务简介 1.什么是微服务&#xff1f; 2.实现微服务的技术方案有哪些&#xff1f; 3.什么是SpringCloud? 4.微服务技术点【重点】 4.1服务治理、服务注册、服务发现 4.2 Eureka注册中心 4.2.1 Eureka介绍 4.2.2 Eureka 使用入门 4.2.3 Eureka的…

13_1、Java的IO流之File类的使用

一、File类的理解1、File的对象代表着一个文件或者一个文件目录。2、File类在java.io包下。3、File类中涉及文件或文件目录相关的创建、删除、重命名、修改时间、文件大小等方法&#xff0c;并未涉及到对文件内部的内容的读取、写入等操作&#xff0c;如果需要对文件的内容进行…

2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」

PS&#xff1a;粉丝可以免费领源码&#xff0c;私信我或者评论666即可~~~~~~~~ 导读 | 世界杯虽已闭幕&#xff0c;但其带给我们的精彩&#xff0c;仿佛就在昨天&#xff0c;想一想&#xff0c;还是有一种爽劲&#xff0c;不知道大家是否也这样&#xff1f;转眼就到了2023年&a…

Java框架:Mybatis

文章目录一、Mybatis概述1.1概念1.2优点与缺点1.3MyBatis和Hibernate的区别1.4Mybatis的核心对象1.5Mybatis执行流程三、Mybatis的快速使用3.1开发环境3.2 创建一个maven项目3.3添加Maven依赖3.4MySQL创建user表3.5创建数据源database.properties文件3.6编写mybatis-config.xml…

H13-531云计算HCIE V2.0——1~400常错题和知识点总结

1~100 35、FusionStorage Block无法是被配置RAID的磁盘,一定要将RAID信息删除后, Fusionstrage block才能识别到这些磁盘? 错误 61、Ceilometer监控通过在计算节点部署Compute服务 84.&#xff08;多选&#xff09;在配置 FusionSphere OpenStack 时&#xff0c;可以用来实…

商务BD干多了,做一个无情的微信发消息机器人帮我发消息吧

1. 有没有那种做微信的伙伴&#xff0c;每天需要定点定时发消息&#xff1f; 2. 有没有那种做电商商务的朋友&#xff0c;每天需要发消息提醒达人商务们&#xff1f; 3. 有没有那种需要定时定点打卡&#xff0c;需要提醒自己要干啥的兄弟姐妹&#xff1f;** 那么有没有大冤种去…

如何获取电脑软件图标和app图标

如何获取电脑软件图标和app图标大家在写博客或者作图的时候经常会需要找到电脑软件图标或者app图标&#xff0c;如果从网上找有的图标并不清楚&#xff0c;今天给大家分享下&#xff0c;怎么快速的获取电脑软件图标和app图标&#xff0c;得到的图标也比较清楚。电脑软件图标获取…

【操作系统】操作系统的Buffer和Cache

文章目录1.Buffer和Cache的区别2.磁盘和文件写入操作案例3.磁盘和文件读取操作案例4.Cache和Buffer的命中案例1.Buffer和Cache的区别 &#xff08;1&#xff09;什么是Buffer Buffer指Linux内存的 Buffer cache&#xff08;缓冲区&#xff09;。Buffer为了让不同的速度的设备…

【迅为iMX6Q】开发板 Linux 5.15.71 SD卡 启动

开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板&#xff0c; 2G DDR linux-imx 下载 使用 NXP 官方提供的 linux-imx&#xff0c;代码地址为&#xff1a; https://github.com/nxp-imx/linux-imx 使用 git 下载 linux-imx&#xff0c; git cl…

Linux应用编程---6.无名管道

Linux应用编程—6.无名管道 6.1 pipe()函数使用详情 ​ 管道是进程之间进行通讯的一种方式。管道有两种&#xff0c;分别是&#xff1a;无名管道和有名管道。先看无名管道。管道创建函数是pipe()&#xff0c;在Linux终端输入man pipe。 图1 pipe()函数详情NAMEpipe, pipe2 - …

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…