i.MX6ULL开发板uboot-2025移植实战:从零适配SR8201F与RGB屏幕

张开发
2026/4/10 1:00:31 15 分钟阅读

分享文章

i.MX6ULL开发板uboot-2025移植实战:从零适配SR8201F与RGB屏幕
1. 环境准备与源码编译最近在给i.MX6ULL开发板移植uboot-2025时遇到了SR8201F网卡和RGB屏幕的适配问题。作为过来人我把完整踩坑过程记录下来希望能帮到同样在折腾这块板子的朋友。先说说我的硬件配置正点原子阿尔法开发板搭载SR8201F PHY芯片和7寸1024x600分辨率的RGB屏幕。软件环境用的是Ubuntu 22.04太老的系统会遇到openssl兼容性问题。交叉编译器选择的是arm官方的gcc-arm-11.2解压到/opt目录后记得临时添加PATH环境变量export PATH$PATH:/opt/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin下载uboot-imx-lf_v2025.04源码后需要先安装libgnutls28-dev依赖库否则编译时会报错。初次编译建议直接使用NXP官方配置make mx6ull_14x14_evk_emmc_defconfig make -j16这里有个小技巧在Makefile第273行直接声明ARCH和CROSS_COMPILE变量比每次命令行传参更方便。编译完成后用imxdownloader工具烧写到SD卡这时基础系统能跑起来但网络和显示还不可用。2. SR8201F网络驱动移植2.1 理解硬件连接SR8201F是典型的PHY芯片通过RMII接口与i.MX6ULL内置的MAC通信。查看原理图时要注意几个关键点数据引脚包括RXD0/RXD1、TXD0/TXD1、REF_CLK等复位引脚连接GPIO5_IO08低电平有效MDIO管理总线需要复用GPIO1_IO06和GPIO1_IO07这里有个坑i.MX6ULL的MDIO总线默认分配给FEC1所以FEC2的MDIO必须使用GPIO复用模式。如果照搬官方demo的配置会发现读不到PHY地址。2.2 设备树配置实战在imx6ul-14x14-evk.dtsi中添加以下关键配置pinctrl_enet2: enet2grp { fsl,pins MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0 MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0 /* 其他RMII数据引脚... */ ; }; pinctrl_enet2_reset: enet2resetgrp { fsl,pins MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0 ; };接着配置fec2节点特别注意phy-reset-post-delay要设200ms这是SR8201F芯片的硬性要求fec2 { pinctrl-names default; pinctrl-0 pinctrl_enet2 pinctrl_enet2_reset; phy-reset-gpios gpio5 8 GPIO_ACTIVE_LOW; phy-mode rmii; phy-handle ethphy2; phy-reset-post-delay 200; status okay; };2.3 驱动使能与测试在menuconfig中启用Realtek PHY驱动Device Drivers → Network device support → Ethernet PHY support → Realtek Ethernet PHYs编译烧写后在uboot控制台用mdio命令可以检测PHY芯片。设置IP地址后ping测试成功的瞬间真是成就感爆棚。如果遇到网卡不识别记得检查复位时序是否符合要求MDIO总线是否正常通信RMII参考时钟是否稳定3. RGB屏幕驱动适配3.1 显示时序参数解析7寸1024x600屏幕的参数配置很有讲究每个时序参数都影响显示效果display-timings { native-mode timing0; timing0: timing0 { clock-frequency 51200000; // 像素时钟51.2MHz hactive 1024; // 水平有效像素 vactive 600; // 垂直有效像素 hfront-porch 160; // 水平前沿 hback-porch 140; // 水平后沿 hsync-len 20; // 水平同步脉宽 vback-porch 20; // 垂直后沿 vfront-porch 12; // 垂直前沿 vsync-len 3; // 垂直同步脉宽 hsync-active 0; // 同步极性 vsync-active 0; de-active 1; // 数据使能极性 pixelclk-active 0; }; };3.2 常见问题排查第一次调试时我的屏幕出现花屏排查发现是pixelclk-active极性设反了。另外要注意bus-width必须与硬件连接一致24位RGBbits-per-pixel建议设为24时钟频率不能超过屏幕规格上限修改后重新编译uboot看到NXP的logo正常显示时所有熬夜都值了。如果显示异常建议用示波器检查HSYNC、VSYNC和DE信号的时序是否符合预期。4. 系统联调与优化完成网络和显示驱动后还需要处理一些收尾工作。比如在uboot环境变量中设置正确的console参数setenv bootargs consolettymxc0,115200 root/dev/mmcblk1p2 rootwait rw内核启动时可能会遇到epdc节点报错这是因为设备树匹配问题。解决方法是修改arch/arm/mach-imx/mx6/module_fuse.c将匹配属性改为fsl,imx7d-edpc。最后给个实用建议调试阶段可以启用uboot的mdio和mmc命令方便单独测试各个模块。网络功能正常后就可以用tftp加载内核镜像了这比反复插拔SD卡高效得多。

更多文章