RTL8211移植

news/2025/2/11 21:10:22/

RTL8211是嵌入式中常用的一种PHY芯片。对于网口驱动的移植,只要u-boot和kernel有支持的驱动,移植方法还是比较简单的。


u-boot中的RTL8211移植

对于PHY的移植,大多数情况下只需要修改config文件即可,但是也有例外,这时候我们就要仔细阅读芯片手册和原理图了。

在移植过程中,我们遇到没见过的驱动,这个时候多利用查找功能,例如:ctags、grep -rn等等。查找别的板子类似的驱动,根据已有的程序来修改我们自己的,可以使开发效率事半功倍。

$ vi include/configs/p1020ndae.h
//注释掉VSC7385部分代码,添加以下宏
#define CONFIG_PHYLIB_10G		/*以下四个宏,为RTL8211相关的宏*/
#define CONFIG_PHY_VITESSE
#define CONFIG_PHY_REALTEK
#define CONFIG_PHY_TERANETICS#if defined(CONFIG_TSEC_ENET)
#define CONFIG_IPADDR  		192.168.1.200		/*设置u-boot网络相关的参数 eth0*/
#define CONFIG_GATEWAYIP      	192.168.1.1
#define CONFIG_NETMASK 		255.255.255.0
#define CONFIG_ETHADDR 		AA:22:33:44:55:66
#define CONFIG_SERVERIP         192.168.1.223#define CONFIG_MII		/* MII PHY management */
#define CONFIG_TSEC1
#define CONFIG_TSEC1_NAME	"eTSEC1"
#define TSEC1_PHY_ADDR	2
#define TSEC1_FLAGS	(TSEC_GIGABIT | TSEC_REDUCED)
#define TSEC1_PHYIDX	0
#define CONFIG_HAS_ETH0
#define CONFIG_ETHPRIME	"eTSEC1"#define CONFIG_TSEC2
#define CONFIG_TSEC2_NAME	"eTSEC2"
#define TSEC2_PHY_ADDR	0
#define TSEC2_FLAGS	(TSEC_GIGABIT | TSEC_REDUCED)
#define TSEC2_PHYIDX	0
#define CONFIG_HAS_ETH1
/*#define CONFIG_ETHPRIME	"eTSEC2"*/
#define CONFIG_ETH1ADDR 		BB:22:33:44:55:66#if 0			/*tsec3没有使用,注释掉*/
#define CONFIG_TSEC3
#define CONFIG_TSEC3_NAME	"eTSEC3"
#define TSEC3_PHY_ADDR	1
#define TSEC3_FLAGS	(TSEC_GIGABIT | TSEC_REDUCED)
#define TSEC3_PHYIDX	0
#define CONFIG_HAS_ETH2
#define CONFIG_ETHPRIME	"eTSEC3"
#define CONFIG_ETH2ADDR 		33:22:33:44:55:66
#endif#define CONFIG_PHY_GIGE	1	/* Include GbE speed/duplex detection */
#endif

问题1

修改后的u-boot,启动后RTL8211识别了,但是ping不通。

通过检查硬件,示波器量GTX_CLK引脚,无波形,说明cpu没有输出波形,通过查手册

image

查看原理图,发现GTX_CLK是给eTSEC1输出时钟的,所以要在boot中初始化TSEC1_GTX_CLK125寄存器。

image

所以修改u-boot源码

vi arch/powerpc/include/asm/immap_85xx.h +2274
#define MPC85xx_PMUXCR_TSEC1_GTX_CLK125 0x00040000 +
vi board/freescale/p1020ndae/p1020ndae.c +304
//添加到tsec_eth_init下面
#ifdef CONFIG_TSEC1SET_STD_TSEC_INFO(tsec_info[num], 1);num++;setbits_be32(&gur->pmuxcr, MPC85xx_PMUXCR_TSEC1_GTX_CLK125);	+
#endif

重新编译,可以ping通了。

linux中的网卡移植

u-boot中已经对底层寄存器初始化完成了,kernel中会继承这些参数,但是还是要移植相应的驱动的。由于u-boot中移植好,我的linux中直接就能用,所以kernel驱动的移植,之后再完善吧。

总结

这里我们要想一下:

  • u-boot和linux的联系?
  • 为什么u-boot中网口调通,linux下的网口也通了?
  • u-boot和kernel的联系和区别?

http://www.ppmy.cn/news/173077.html

相关文章

RT-Thread ——RTC配置

RT-Thread ——RTC配置 STM32F103系列芯片的RTC功能存在一些缺陷。 一、显示时间戳 RTC(Real-Time Clock)译为实时时钟,因为它一般是集成电路,故也称为时钟芯片。它能提供精确的实时时间,可以用于产生年、月、日、时…

RT-Thread系统简介

前言 RT-Thread是一款国产的实时操作系统,我们首先从实时操作系统开始进行介绍,再展开RT-Thread操作系统。 实时操作系统介绍 实时操作系统诞生背景 为了解决两个问题: 一个是早期的CPU任务切换的开销太大,实时调度器可以避免…

RT-thread nano

1、nano与完整版区别 与 RT-Thread 完整版不同的是,Nano 不含 Scons 构建系统,不需要 Kconfig 以及 Env 配置工具,也去除了完整版特有的 device 框架和组件,仅是一个纯净的内核。 2、特点 易裁剪:Nano 的配置文件为…

RT-Thread系列一 初识

RT-Thread Master与Nano RT-Thread Master版本和RT-Thread Nano版本的关系: RT-Thread Master版本不仅仅是一个实时内核,还包含了丰富的中间层组件;RT-Thread Nano是RT-Thread Master之上进行剪裁后形成的精简版,去掉了一些组件…

《初次使用瑞昱 rtl8710 》

初步使用rtl8710 首次接触RTL8710 这一款模块,模块硬件可以在官网等方式找资料 环境搭建 硬件工具: USB线(正常的安卓手机线都可以)开发板一块J-link在线仿真器(某宝一大堆)软件:IAR &#xff…

LT8618SX中文简介

1.功能 RGB输入 –支持24位RGB,YUV和BT656/BT601/BT1120输入 –支持SDR和DDR数据采样 –可编程上升/下降边缘时钟输入 –支持高达148.5MHz DDR或297MHz SDR时钟输入 –支持1.8V和3.3V输入电压电平 HDMI发射器 –符合HDMI1.4和HDCP1.4 –分辨率高达4K30Hz –可编…

【stm32开发】stm32+oled最小系统板资料(原理图、PCB、示例代码)【六一】

🎉欢迎来到stm32专栏~stm32oled最小系统板 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:stm32专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能…

rt-thread can

rt-thread stm32f10x-HAL can的驱动和应用。源码暂时还不支持,自己通过F4修改了一版 源码地址:https://gitee.com/gitee.thomas/rt_can rtconfig.h配置 #define RT_USING_CAN #define RT_CAN_USING_HDR //关闭硬件过滤 源码自测已经通过,欢…