U-Boot的简化版启动流程:
1、设置状态寄存器 cpsr ,使CPU进入 SVC 特权模式,并且禁止 FIQ 和 IRQ;
2、关闭看门狗、中断、MMU、Cache;
3、初始化部分寄存器和外设(时钟、串口、Flash、内存);
4、自搬移uboot到内存中运行;
5、设置栈空间并初始化global_data;
6、剩余大部分硬件的初始化;
7、搬移Linux内核到内存;
U-Boot移植
- 从NXP官方提供的配置文件中找到相关联的配置文件:
imx6ull_14×14_emmc_deconfig
作为默认配置文件蓝本- 编译完成以后会生成 u-boot.bin、u-boot.imx 等文件,但是这些文件是 NXP 官方 I.MX6ULL EVK 开发板。
- 将 imxdownload 软件拷贝到 uboot 源码根目录下,然后使用 imxdownload 软件将 u-boot.bin 烧写到 SD 卡中
- 设置开发板从SD卡中启动,加载uboot
- uboot 成功加载之后通常需要检查:
- SD 卡和 EMMC 驱动是否正常(常规情况下都是正常的)
- LCD 屏幕驱动是否正常(问题不大)
- 网络驱动是否正常(核心部分)
- 先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_alientek_emmc_defconfig
- 修改其中的一些命名
- 添加开发板对应的头文件。在目录 include/configs 下添加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制 include/configs/mx6ullevk.h,并重命名为 mx6ull_alientek_emmc.h
- 添加开发板对应的板级文件。uboot 中每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等等。NXP 的 I.MX 系列芯片的所有板级文件夹都存放在 board/freescale 目录下,在这个目录下有个名为 mx6ullevk 的文件夹,这个文件夹就是 NXP 官方 I.MX6ULL EVK 开发板的板级文件夹。复制 mx6ullevk,将其重命名为 mx6ull_alientek_emmc
- 修改 mx6ull_alientek_emmc 目录下的 Makefile 文件
- 修改 mx6ull_alientek_emmc 目录下的 imximage.cfg 文件
- 修改 mx6ull_alientek_emmc 目录下的 Kconfig 文件
- 修改 mx6ull_alientek_emmc 目录下的 MAINTAINERS 文件
- 修改 U-Boot 图形界面配置文件
- LCD驱动修改。一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的,xxx 为板子名称,比如 mx6ull_alientek_emmc.h 和 mx6ull_alientek_emmc.c 这两个文件。
- 一般修改 LCD 驱动重点注意以下几点:
- LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正确。
- LCD 背光引脚 GPIO 的配置。
- LCD 配置参数是否正确。
- 网络驱动修改。
- uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs,接下来看一下这两个环境变量。bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的,里面有很多的变量引用,这些变量其实都 是 环 境 变 量 , 有 很 多 是 NXP 自 己 定 义 的 。 文 件 mx6ull_alientek_emmc.h 中的宏CONFIG_EXTRA_ENV_SETTINGS 保存着这些环境变量的默认值
参考链接1
参考链接2