【Linux】MX6ULL移植uboot过程详细分析(附NXP官方原理图)

本文介绍将NXP官方的uboot移植到正点原子的I.MX6ULL开发板上的详细流程。以此了解uboot移植的基本操作,为后续可能的深层定制打下基础。

目录

1、在U-Boot中添加自己的开发板

[1.1 复制修改mx6ull_14x14_evk_emmc_defconfig文件](#1.1 复制修改mx6ull_14x14_evk_emmc_defconfig文件)

[1.2 复制修改mx6ullevk.h文件](#1.2 复制修改mx6ullevk.h文件)

[1.3 复制修改板级文件夹](#1.3 复制修改板级文件夹)

[1.4 修改U-Boot 图形界面配置文件](#1.4 修改U-Boot 图形界面配置文件)

2、LCD驱动修改

3、网络驱动修改

[3.1 ENET1 的网络原理图](#3.1 ENET1 的网络原理图)

[3.2 PHY地址和驱动修改](#3.2 PHY地址和驱动修改)

[3.2.1 地址修改](#3.2.1 地址修改)

[3.2.2 驱动修改](#3.2.2 驱动修改)

[3.2.3 复位引脚修改](#3.2.3 复位引脚修改)


1、在U-Boot中添加自己的开发板

1.1 复制修改mx6ull_14x14_evk_emmc_defconfig文件

主要修改第一行开发板对应的板级文件夹路径。第四行开发板配置项的名称。

第四行的 CONFIG_TARGET_MX6UL_14X14_EVK=y 是下图路径中的 Kconfig 文件决定的,当 其被选中时,自动设置 SYS_BOARD(板卡名称)、SYS_VENDOR(厂商)、SYS_CONFIG_NAME(配置文件名)

1.2 复制修改mx6ullevk.h文件

该文件的主要功能就是配置或者裁剪uboot。如果需要某个功能的话就在里面添加这个功能对应的CONFIG_XXX 宏即可,如果不需要某个功能的话就删除掉对应的宏即可。

该文件中,可以设置DRAM大小、malloc内存池大小、使能串口功能、使能I2C功能、设置I2C速度、NAND分区设置、USB相关的宏定义、网络相关的宏定义、...

1.3 复制修改板级文件夹

进入mx6ull_alientek_emmc 目录中,将其中的mx6ullevk.c 文件重命名为mx6ull_alientek_e
mmc.c

然后修改mx6ull_alientek_emmc目录下的Makefile 、imximage.cfg 、Kconfig、MAINTAINERS这四个文件。只改名字即可(mx6ullevk → mx6ull_alientek_emmc)

1.4 修改U-Boot 图形界面配置文件

uboot 是支持图形界面配置,修改文件arch/arm/cpu/armv7/mx6/Kconfig。红色为新增部分。

  • config:在 U-Boot 的配置界面中,新增 "Support mx6ull_alientek_emmc" 这个选项,用户可以选择该板卡作为编译目标。
  • select MX6ULL:关联 IMX6ULL 芯片的架构配置(保证编译对应芯片的代码)
  • select DM/DM_THERMAL:关联设备模型(Driver Model)及热管理模块的配置(启用板卡需要的功能框架)。
  • source:将该板卡目录下的 Kconfig 引入到 U-Boot 的全局配置系统中,让板卡的专属硬件参数(如板名、厂商)能被配置系统识别。

到此为止,I.MX6U-ALPHA 开发板就已经添加到uboot 中了。主要做到工作是复制原厂相关文件,改了名称、路径,裁剪了uboot,并在图形配置界面中新增ALPHA 开发板的选项。此时的uboot编译后,对于ALPHA 开发板,LCD 驱动和网络驱动是有问题的(ALPHA 开发板和NXP官方使用的LCD和网络模块硬件不一样,所以驱动需要修改)。

2、LCD驱动修改

驱动的修改,一般是在下面两个文件中修改

LCD的驱动修改看两点:

1、LCD所使用的GPIO配置是否正确(若原理图上LCD和芯片引脚连接一致,则无需修改这部分)

2、LCD 配置参数是否正确(一般产品使用手册会有这些参数)

修改完成以后重新编译一遍uboot 并烧写到SD中启动。重启以后LCD驱动一般就会工作正常了,LCD 上会显示NXP的logo

3、网络驱动修改

**内部MAC+外部PHY 的分离式方案:**嵌入式领域的主流设计,核心是两者分工协作:MAC 负责协议层处理,PHY 负责物理层信号转换。

  • MAC: 以太网媒体访问控制器
  • PHY:以太网物理层(Physical Layer)芯片(网线端口就插在该芯片模块上)

拓展资料:OSI七层模型

3.1 ENET1 的网络原理图

正点原子的I.MX6U-ALPHA 开发板提供了ENET1 和ENET2 这两个网络接口。其都使用SR8201F 作为PHY 芯片。NXP 官方的I.MX6ULL EVK 开发板使用KSZ8081这颗PHY 芯片。以此为例,说明更换PHY芯片后如何调整网络驱动。

U14(SR8201F)的引脚标注了 LED0/PHYAD0 和 LED1/PHYAD1 ,这两个是 PHY 的地址配置引脚(PHYAD0 为地址低位,PHYAD1 为地址次低位)。其中,一个下拉到 GND,一个上拉到VCC_3V3。故二进制组合为 10,故器件地址为0x2

NXP官方的I.MX6ULL EVK 开发板原理图

对比上述原理图正点原子I.MX6U-ALPHA 开发板的ENET1 引脚与NXP 官方的I.MX6ULL EVK 开发板基本一样,主要是复位引脚不同。从图可以看出,正点原子I.MX6U-ALPHA 开发板的ENET1 复位引脚ENET1_RST 接到了I.M6ULL 的SNVS_TAMPER7 这个引脚上。

综上,网络驱动的修改有三点:1、复位引脚 2、PHY 器件地址 3、PHY 驱动

3.2 PHY地址和驱动修改

3.2.1 地址修改

打开mx6ull_alientek_emmc.h 发现两个网口对应的PHY默认地址和原理图对应,故无需修改

3.2.2 驱动修改

CONFIG_PHY_MICREL,这个宏用于使能uboot中Micrel公司的PHY驱动,KSZ8081这颗PHY芯片(NXP官方板子上的)就是Micrel公司生产的。现在使用的PHY芯片是SR8201F,那么就得将CONFIG_PHY_MICREL 改为CONFIG_PHY_REALTEK(SR8201F 就是Pin to Pin 替换Realtek 的RTL8201F 的,因此可以直接使用Realtek 的相关驱动)

3.2.3 复位引脚修改

**1、**注释4行代码,添加两行代码。IOX 开头的宏定义是74LV595 的相关GPIO,因为NXP 官方I.MX6ULL EVK 开发板使用74LV595 来扩展IO,两个网络的复位引脚就是由74LV595 来控制的。正点原子的I.MX6U-ALPHA 开发板并没有使用74LV595,故需注释掉。

ENET1 的复位引脚连接到SNVS_TAMPER7 上,对应的GPIO在原理图中搜索即可。

2、然后继续在该文件中删除IOX相关的配置和函数。

3、然后在fec1_pads 和fec2_pads 这 ENET1 和ENET2 这两个网口的IO 配置参数结构体数组的最后一行添加两个网口的复位IO 配置参数。

4、函数setup_iomux_fec 是根据fec1_pads 和fec2_pads 这两个网络IO 配置数组来初始化I.MX6ULL 的网络IO。需要在其中添加网络复位IO初始化的代码、复位PHY芯片的代码

(复位结束后至少延时150ms 才能正常使用SR8201F,这个在SR8201F 数据手册里面有详细要求,否则会导致uboot 无法识别SR8201F。)

至此网络的复位引脚驱动修改完成,重新编译uboot,然后将u-boot.bin 烧写到SD 卡中并启动。从uboot 启动信息中可以看到"Net: FEC1"这一行,提示当前使用的FEC1 这个网口,也就是ENET2。在uboot 中使用网络之前要先设置几个环境变量:

复制代码
setenv ipaddr 192.168.1.55 //开发板IP 地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡MAC 地址
setenv gatewayip 192.168.1.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.1.250 //服务器地址,也就是Ubuntu 地址(PC电脑)
saveenv //保存环境变量

然后通过ping 命令来测试一下网络连接,,有 host 192.168.1.250 is alive 这句,说明ping 主机成功,说明ENET2 网络工作正常。再测试一下ENETT1即可。

至此,I.MX6UALPHA开发板的两个网络都工作正常了,网络驱动修改成功。uboot 移植也完成了,uboot 的最终目的就是启动Linux 内核,所以需要通过启动Linux 内核来最终判断uboot 移植是否成功。

最后,移植 U-Boot 远不止修改 LCD 和网络,正点原子的 U-Boot 移植核心是基于 NXP 原厂复刻板做 LCD、网络等外设微调,帮开发者快速掌握基础流程,属于表层适配。实际工作中可能需围绕产品化需求深度定制:核心硬件上要调整 DDR 时序 / 容量、时钟晶振适配、存储介质切换(如 EMMC 转 SPI Flash)及引脚复用修改;外设需完善 USB、触摸屏等必选功能;还要设计启动介质优先级、开发 SD 卡 / OTA 升级功能,添加固件加密校验与专属环境变量管理;同时需开启看门狗、优化时序、添加异常容错机制,保障产品稳定性与鲁棒性。

相关推荐
树℡独4 小时前
ns-3仿真之应用层(五)
服务器·网络·tcp/ip·ns3
小小管写大大码5 小时前
如何让vscode变得更智能?vscode接入claude实现自动编程
运维·ide·vscode·自动化·编辑器·ai编程·腾讯云ai代码助手
嵩山小老虎5 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Fleshy数模5 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
zhang133830890755 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
a41324475 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
Configure-Handler6 小时前
buildroot System configuration
java·服务器·数据库
津津有味道6 小时前
易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令
服务器·网络协议·tcp·易语言
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.7 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
物联网软硬件开发-轨物科技7 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能