imx6ull uboot移植

article/2025/10/6 15:52:41

以下内容来自:正点原子Linux驱动文档

一、简介

uboot移植主要是根据原厂的uboot移植:芯片厂商通常会做一块自己的评估板并发布BSP,当我们需要定制自己的开发板时可以根据自己的需求(硬件上的不同),对原厂的uboot裁剪等等。

注:BSP 通常包含uboot、Linux内核、设备树。

nxp官方imx6ull uboot 试编译

编译一个uboot工程主要有以下3条命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean								#清理工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig		#根据配置文件配置uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16									#编译uboot,j16 表示用16核编译

ARCH: 架构。
CROSS_COMPILE: 交叉编译器。

编译后会生成uboot.bin 等等文件。
在这里插入图片描述
使用imx6ull 官方uboot启动我们的板子会有些驱动存在问题,这是应为硬件的不同。例如LCD、网络等。

在uboot中添加自定义开发板

添加开发板默认配置文件

uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构和外设,比如 USB、 网络、 SD 卡等。
所以在编译前我们要根据自己的需求配置uboot。

在configs 目录下有很多配置文件,可想而知,每一个配置文件就对应一块开发板。
我们找到 mx6ull_14x14_evk_emmc_defconfig, 这是nxp官方的配置文件,我们就是参考它做修改。
拷贝并修改:

cp mx6ull_14x14_evk_emmc_defconfig mx6ull_zjh_emmc_defconfig

添加自己开发板的头文件

在include/configs 下拷贝mx6ullevk.h 并修改。

在这个头文件中有许多宏定义,这些宏基本用于配置uboot,也有一些I.MX6ULL 的配置项目。
如果我们想要禁用uboot的某些功能,在这个头文件中修改即可。

mx6ullevk.h 文件中基本都是“CONFIG_”开头的宏定义,这也说明 mx6ull_alientek_emmc.h 文件的主要功能就是配置或者裁剪 uboot。如果需要某个功能的话就在里面添加这个功能对应的 CONFIG_XXX 宏即可,如果不需要某个功能的话就删除掉对应的宏即可。

mx6ullevk.h 中包含了 mx6_common.h,如果没有在mx6ullevk.h中发现某个功能或命令,但uboot中又确实存在,可以去mx6_common.h 中寻找。

  • 设置DRAM大小: 宏PHYS_SDRAM_SIZE 是用来设置DRAM 大小。正点原子的 I.MX6U-ALPHA 开发板用的是 512MB DDR3。

  • 输出cpu信息: 定义宏 CONFIG_DISPLAY_CPUINFO, uboot 启动的时候可以输出 CPU 信息。

  • 输出板子信息: 定义宏 CONFIG_DISPLAY_BOARDINFO, uboot 启动的时候可以输出板子信息。

  • 设置内存池大小: CONFIG_SYS_MALLOC_LEN 为 malloc 内存池大小,这里设置为 16MB。

  • 定义宏 CONFIG_BOARD_EARLY_INIT_F,这样 board_init_f 函数就会调用board_early_init_f 函数。

  • 定义宏 CONFIG_BOARD_LATE_INIT,这样 board_init_r 函数就会调用board_late_init 函数。

  • 使能 I.MX6ULL 的串口功能: 宏 CONFIG_MXC_UART_BASE 表示串口寄存器基地址,这里使用的串口 1,基地址为 UART1_BASE, UART1_BASE 定义在文件arch/arm/include/asm/arch-mx6/imx-regs.h 中, imx-regs.h 是 I.MX6ULL 寄存器描述文件。

  • 。。。。(太多了,放弃,看原子驱动文档)

  • 控制I2C: 用于控制使能哪个 I2C, I2C 的速度为多少。
    在这里插入图片描述

  • NAND 的分区设置: CONFIG_SYS_BOOT_NAND

  • 宏 CONFIG_MFG_ENV_SETTINGS 定义了一些环境变量,使用 MfgTool 烧写系统时候会用到这里面的环境变量。

  • 通 过 条 件 编 译 来 设 置 宏 CONFIG_EXTRA_ENV_SETTINGS , 宏CONFIG_EXTRA_ENV_SETTINGS 也是设置一些环境变量,此宏会设置 bootargs 这个环境变量。

  • 设置宏 CONFIG_BOOTCOMMAND ,此宏就是设置环境变量 bootcmd 的值。

  • CONFIG_SYS_LOAD_ADDR: 表示 linux kernel 在 DRAM 中的加载地址,也就是 linux kernel 在 DRAM 中的存储首地址, CONFIG_LOADADDR=0X80800000。

  • 时钟频率: 宏 CONFIG_SYS_HZ 为系统时钟频率,这里为 1000Hz。

  • 栈大小 宏 CONFIG_STACKSIZE 为栈大小,这里为 128KB。

  • DRAM首地址: CONFIG_SYS_SDRAM_BASE 为 DRAM 的起始地址。

  • 宏 CONFIG_SYS_INIT_SP_OFFSET 和 CONFIG_SYS_INIT_SP_ADDR 与初始 SP 有关,第一个为初始 SP 偏移,第二个为初始 SP 地址。

  • 宏 CONFIG_MMCROOT 设置进入 linux 系统的根文件系统所在的分区 ,这里设置为"/dev/mmcblk1p2",也就是 EMMC 设备的第 2 个分区。第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统。

  • 网络相关: CONFIG_CMD_NET,比如使能ping、dhcp等功能。

  • 指定网口: CONFIG_FEC_ENET_DEV ,指定 uboot 所使用的网口, I.MX6ULL 有两个网口,为 0 的时候使用 ENET1,为 1 的时候使用 ENET2。

  • 第 344~END,剩下的都是一些配置宏,比如 CONFIG_VIDEO 宏用于开启 LCD,CONFIG_VIDEO_LOGO 使能 LOGO 显示, CONFIG_CMD_BMP 使能 BMP 图片显示指令。这样就可以在 uboot 中显示图片了,一般用于显示 logo。

  • CONFIG_CMD 开头的宏都是用于使能相应命令的,其他的以 CONFIG 开头的宏都是完成一些配置功能的。

添加开发板对应的板级文件夹

uboot中每一块板子都拥有一个板级文件夹,用来存放板级文件。比如开发板上的外设驱动文件等。

NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下,imx6ull 对应的板级文件夹是mx6ullevk。同样备份重命名。

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

1、修改板级文件夹目录下的 Makefile 文件

将文件名修改为刚刚改的文件,这样才会编译mx6ull_zjh_emmc.c这个文件。
在这里插入图片描述

2、修改 imximage.cfg 文件

PLUGIN 这一项路径改成我们自己文件夹的路径。
在这里插入图片描述

3、修改 Kconfig 文件

4、修改 MAINTAINERS 文件

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

uboot 是支持图形界面配置,关于 uboot 的图形界面配置下一章会详细的讲解。修改文件arch/arm/cpu/armv7/mx6/Kconfig,在207行加入如下内容:

config TARGET_MX6ULL_ZJH_EMMC
bool "Support mx6ull_zjh_emmc"
select MX6ULL
select DM
select DM_THERMAL

在最后一行的 endif 的前一行添加如下内容:

source "board/freescale/mx6ull_zjh_emmc/Kconfig"

开发板添加完成,接下来就是编译这个uboot。

LCD 驱动修改

一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的, xxx 为板子名称,比如 mx6ull_alientek_emmc.h 和 mx6ull_alientek_emmc.c 这两个文件。

一般修改 LCD 驱动重点注意以下几点:
①、 LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正确。
②、 LCD 背光引脚 GPIO 的配置。
③、 LCD 配置参数是否正确。

struct display_info_t const displays[] = {{.bus = MX6UL_LCDIF1_BASE_ADDR,.addr = 0,.pixfmt = 24,.detect = NULL,.enable = do_enable_parallel_lcd,.mode   = {.name                   = "TFT43AB",.xres           = 480,.yres           = 272,.pixclock       = 108695,.left_margin    = 8,.right_margin   = 4,.upper_margin   = 2,.lower_margin   = 4,.hsync_len      = 41,.vsync_len      = 10,.sync           = 0,.vmode          = FB_VMODE_NONINTERLACED
} } };

如上所示,在板级文件夹mx6ull_zjh_emmc/mx6ull_zjh_emmc.c中定义了变量 displays,类型为 display_info_t,这个结构体是 LCD信息结构体,其中包括了 LCD 的分辨率,像素格式, LCD 的各个参数等。display_info_t 定义在文件 arch/arm/include/asm/imx-common/video.h 中,定义如下:

struct display_info_t {int     bus;int     addr;int     pixfmt;			//像素格式的位数,如RGB888 就是24位int     (*detect)(struct display_info_t const *dev);void    (*enable)(struct display_info_t const *dev);struct  fb_videomode mode;
};

结构体 display_info_t 中还有个 mode 成员变量,此成员变量也是个结构体,为 fb_videomode,定义在文件 include/linux/fb.h 中,定义如下:

struct fb_videomode {const char *name;       /* LCD 名字,要和环境变量中的 panel 相等。 */u32 refresh;            u32 xres;				/* LCD X 轴和 Y 轴像素数量。 */	u32 yres;u32 pixclock;			/* 像素时钟,每个像素时钟周期的长度,单位为皮秒。 */u32 left_margin;u32 right_margin;u32 upper_margin;u32 lower_margin;u32 hsync_len;u32 vsync_len;u32 sync;u32 vmode;u32 flag;
};

在这里插入图片描述

总结

①、不管是购买的开发板还是自己做的开发板,基本都是参考半导体厂商的 dmeo 板,而半导体厂商会在他们自己的开发板上移植好 uboot、linux kernel 和 rootfs 等,最终制作好 BSP包提供给用户。
我们可以在官方提供的 BSP 包的基础上添加我们的板子,也就是俗称的移植。
②、我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的 demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到 uboot 下驱动的移植。
③、一般 uboot 中需要解决串口、NAND、EMMC 或 SD 卡、网络和 LCD 驱动,因为 uboot的主要目的就是启动 Linux 内核,所以不需要考虑太多的外设驱动。
④、在 uboot 中添加自己的板子信息,根据自己板子的实际情况来修改 uboot 中的驱动。


http://chatgpt.dhexx.cn/article/6vEuJHMB.shtml

相关文章

全志V3S嵌入式驱动开发(uboot移植)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 安装了ubuntu操作系统,有了开发板,下面就可以进行我们的开发工作了。第一步,我们要面临的问题就是uboot移植。一般来说,嵌入式的基础环境就是uboot、linux和rootfs。uboot完成一…

2021-09-14 uboot移植开发

引言:最近要改动uboot,实现像微软PC上,u盘一键刷机或手机上安全模式下刷机的操作 专门去好好研究了点uboot的启动过程;以下为总结: 嵌入式系统 微软-PC ——…

iTOP4412 uboot移植教程

好多刚开始学习uboot移植的同学总是觉得uboot好难,但是再难的问题如果把它一步步拆开,一个个解决,问题也就将迎刃而解。做uboot移植,我们首先就得了解uboot的编译流程,这里以在iTOP4412精英版2G内存的板子上移植u-boot…

<Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分)

<Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分) 第一部分链接:系统移植-之-uboot移植第一部分 第一部分主要讲解了,uboot移植过程中使用的一些工具的安装,以及测试nxp远程uboot&a…

X210开发板(S5PV210芯片)uboot移植DM9000驱动移植

前言 本文是介绍在uboot中如何移植DM9000的驱动,并不深入去讲解DM9000芯片的操作时序和内部寄存器,想要读懂驱动代码要仔细阅读DM9000芯片的数据手册。移植的基础是手里有DM9000芯片可以用的驱动代码,只需要根据开发板中DM9000芯片的接线方式…

嵌入式linux UBoot移植篇

如何在U-boot添加自己的linux板卡并启动呢? uboot 的移植并不是说我们完完全全的从零开始将 uboot 移植到我们现在所使用的开发板或者开发平台上。这个对于我们来说基本是不可能的,这个工作一般是半导体厂商做的, 半导体厂商负责将 uboot 移…

Uboot移植流程

linux-Bootloader(Uboot)移植流程 前言 最近在做ZigBee的温室大棚项目,将自己学习的过程和经验分享给大家。本文基于linux3.4.39内核版本,s5p6818开发板实现。 1、uboot启动简介 uboot启动的过程比较复杂,这里就只…

IMX6ULL Uboot 移植

使用的开发板:正点原子ALPHA V2.2 Uboot简介 在学习STM32的过程中使用过IAP在线升级就会知道,有引导程序APP程序,即bootloader程序APP。在学习嵌入式Linux的时候也一样,这个引导程序就是Uboot. uboot移植主要是根据原厂的uboot移…

二、uboot移植

二、uboot移植 版本作者时间备注V 1.0bug设计工程师2021/11/10创建文件软件网盘链接0交叉编译工具链接:https://pan.baidu.com/s/1yFO2NDMet9_b1E1q1rMwEA提取码:42kluboot源码同上linux源码同上文件系统工具同上tftp工具同上2.1 简单说明 uboot制作结束会生成 u-boot-etc44…

linux-uboot 移植四 uboot的移植

概述 前边的章节中介绍到如果要移植uboot的话,最好的参考就是由官方提供的demo。 1、移植 1.1 添加board对应的板级文件夹 uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。 NXP 的 I.MX 系列芯片的所有板级文件…

[uboot 移植]uboot 移植过程

文章目录 uboot 移植1 修改顶层 Makefile2 在 board 文件夹下添加开发板对应的板级文件2.1 imximage_lpddr2.cfg 和 imximage.cfg 文件2.2 plugin.S 文件2.3 Kconfig 文件2.4 igkboard.c 文件2.5 MAINTAINERS 文件2.6 Makefile 文件 3 添加 igkboard_defconfig 配置文件4 添加开…

UBoot 移植

1 NXP官方开发板uboot编译测试 1 查找 NXP 官方的开发板默认配置文件 因为我们的开发板是参考 NXP 官方的 I.MX6ULL EVK 开发板做的硬件,因此我们在移植 uboot 的时候就可以以 NXP 官方的 I.MX6ULL EVK 开发板为蓝本。 在 NXP 官方 I.MX6UL/6ULL 默认配置文件中找…

大话uboot 移植

结合作者多年的移植经验,尽量简单的为大家描述一个uboot 的移植过程。希望通过描述,给初入移植行道的你带来美好的希望。接下来,我们通过以下几个方面来描述。 1. arm soc 的启动方式 在描述soc 前,我们先看下一个简单的arm soc:…

uboot移植步骤

Uboot移植具体步骤(本例子为Samsung origen板) 第一步:准备源码 网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/ 在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师) 在Linux系统下解压 tar xf 压缩包名 第二步:修改源码 1.抄板:将和你板子兼容…

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 🍏 uboot下载 🍏 uboot默认配置 🍏 uboot图形界面配置 🍏 uboot编译 🍏 烧录bin…

U-Boot 移植初探

1. NXP官方开发板uboot编译测试 uboot移植不需要从零开始将uboot移植到使用的开发板上。因为半导体厂商通常都会自己做一个开发板, 将uboot移植到他们自己的原厂开发板上,再将这个uboot(原厂BSP 包)发布出去。因此使用自已的开发…

U-Boot移植

一、U-Boot Linux 系统要启动就必须需要一个 bootloader 程序,芯片上电以后先运行一段bootloader程序。 bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, eMMC 等)拷贝到 DDR 中&…

uboot移植

一、我们知道uboot就是一个Bootloader。但是,arm不像我们的pc机一样,用一个老毛桃随便找一个网站下一个windows镜像就可以直接装了。 我们的uboot对应的就是老毛桃里面刷的引导程序。 虽然uboo支持很多架构很多不同的厂家的板子,但是UBOOT它…

【Linux】系统移植篇四--uboot移植

系统移植篇四--uboot移植 一、uboot源码结构1、uboot源码获取2、uboot特点3、uboot源码结构 二、uboot的配置与编译1、uboot配置2、uboot编译 前言:本篇主要介绍uboot的一些结构与相关配置,uboot是一款免费开源的芯片启动软件,代码完全开源&a…

uboot移植过程

uboot移植过程 IMX6ULL 文章目录 uboot移植过程 IMX6ULL 前言一、从原厂中移植uboot进行测试二、在U-Boot中添加自己的硬件1. 添加默认配置文件2. 添加对应的头文件3. 添加对应的板级文件夹3.1 修改Makefile文件3.2 修改 mx6ull_alientek 目录下的 imximage.cfg 文件3.3 修改 m…