当前位置: 首页 > news >正文

U-Boot的移植流程

在这里插入图片描述

U-Boot的简化版启动流程:

1、设置状态寄存器 cpsr ,使CPU进入 SVC 特权模式,并且禁止 FIQ 和 IRQ;

2、关闭看门狗、中断、MMU、Cache;

3、初始化部分寄存器和外设(时钟、串口、Flash、内存);

4、自搬移uboot到内存中运行;

5、设置栈空间并初始化global_data;

6、剩余大部分硬件的初始化;

7、搬移Linux内核到内存;

U-Boot移植

  1. 从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 屏幕驱动是否正常(问题不大)
    • 网络驱动是否正常(核心部分)
  2. 先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_alientek_emmc_defconfig
    • 修改其中的一些命名
  3. 添加开发板对应的头文件。在目录 include/configs 下添加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制 include/configs/mx6ullevk.h,并重命名为 mx6ull_alientek_emmc.h
  4. 添加开发板对应的板级文件。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 文件
  5. 修改 U-Boot 图形界面配置文件
  6. LCD驱动修改。一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的,xxx 为板子名称,比如 mx6ull_alientek_emmc.h 和 mx6ull_alientek_emmc.c 这两个文件。
    • 一般修改 LCD 驱动重点注意以下几点:
    • LCD 所使用的 GPIO,查看 uboot 中 LCD 的 IO 配置是否正确。
    • LCD 背光引脚 GPIO 的配置。
    • LCD 配置参数是否正确。
  7. 网络驱动修改
  8. uboot 中有两个非常重要的环境变量 bootcmd 和 bootargs,接下来看一下这两个环境变量。bootcmd 和 bootagrs 是采用类似 shell 脚本语言编写的,里面有很多的变量引用,这些变量其实都 是 环 境 变 量 , 有 很 多 是 NXP 自 己 定 义 的 。 文 件 mx6ull_alientek_emmc.h 中的宏CONFIG_EXTRA_ENV_SETTINGS 保存着这些环境变量的默认值
    在这里插入图片描述
    参考链接1
    参考链接2
http://www.lryc.cn/news/465439.html

相关文章:

  • xRDP – 在 Ubuntu 18.04、20.04、22.04、22.10、23.04(脚本版本 1.4.7)上轻松安装 xRDP
  • [Linux网络编程]04-多进程/多线程并发服务器思路分析及实现(进程,信号,socket,线程...)
  • 《OpenCV计算机视觉》—— 年龄与性别预测
  • 详解23种设计模式——第一部分:概述+创建型模式
  • semi-Naive Bayesian(半朴素贝叶斯)
  • 大语言模型(LLM)入门级选手初学教程
  • HTML 实例/测验之HTML 基础一口气讲完!(o-ωq)).oO 困
  • c语言基础程序——经典100道实例。
  • 火星求生CE修改金钱,无限资金
  • linux 内存管理-slab分配器
  • docker-compose部署gitlab(亲测有效)
  • Leetcode 赎金信
  • S7--环境搭建基本操作
  • webAPI中的排他思想、自定义属性操作、节点操作(配大量案例练习)
  • 101、QT摄像头录制视频问题
  • FairGuard游戏加固全面适配纯血鸿蒙NEXT
  • 鲸信私有化即时通信如何平衡安全性与易用性之间的关系?
  • vivado 接口带宽验证
  • Qt中使用线程之QThread
  • 多IP连接
  • Linux重点yum源配置
  • 289.生命游戏
  • 如何保证Redis和数据库的数据一致性
  • Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)
  • 【LangChain系列2】【Model I/O详解】
  • 动态规划-子数组系列——1567.乘积为正数的最长子数组
  • Linux 运行执行文件并将日志输出保存到文本文件中
  • 注册安全分析报告:北外网校
  • 预警期刊命运逆袭到毕业好刊,仅45天!闭眼冲速度,发文量暴增!
  • 【LeetCode每日一题】——523.连续的子数组和