U-boot启动过程概述

   U-Boot(Universal Boot Loader),即通用Bootloader,是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。是遵循GPL条款的开放源代码项目。
      Bootloader不属于操作系统内核,这一部分代码不具有可移植性,在移植操作系统时,这部分代码必须加以改写:Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。

U-boot启动的最终目的:启动内核

两种情况:1.从XIP设备(Flash)XIP代表"Execute In Place",它是一种技术,允许嵌入式系统直接在非易失性存储器(如闪存)中执行程序,而无需将程序复制到随机存取存储器(RAM)中。

                    2.非XIP设备:将U-Boot指令赋值进内存里面。

  1. 初始化内存
  2. CPU从Flash(闪存芯片)中读内核或者通过EMMC控制器,将内核拷贝到RAM(内存)。
  3. 初始化硬件(比如时钟等)

一、阶段一:硬件设备的初始化

1.关闭MMU( Memory Management Unit,内存管理单元)

  1. 暂停操作系统或内核:在关闭 MMU 之前,通常需要停止操作系统或内核的正常运行,以免发生意外。

  2. 设置页表:在关闭 MMU 之前,通常需要设置一个简单的页表或地址映射表,将物理地址映射到逻辑地址。

  3. 关闭 MMU:针对特定的处理器架构和硬件平台,相应的指令可能会被用来关闭 MMU。例如,在 ARM 架构中,可以使用相应的寄存器设置指令来关闭 MMU。

  4. 禁用缓存:在关闭 MMU 后,也通常需要禁用缓存以确保内存访问的一致性。

  5. 初始化硬件设备:一旦 MMU 关闭,可以进行硬件设备的初始化操作,这可能涉及对不同设备寄存器的配置、初始化硬件中断、设置时钟等。

2.禁用CACHE(缓存)

  1. 禁用缓存:在某些处理器架构中,通过设置相应的寄存器或配置位来禁用缓存功能。对于不同的处理器架构可能会有不同的寄存器或指令来实现。

  2. 刷新缓存:在关闭缓存之前,通常需要确保缓存中的数据被刷新到内存。这是为了避免数据丢失或不一致性的问题。

  3. 关闭缓存一致性:某些处理器可能有缓存一致性相关的机制,需要根据需求关闭这些机制以确保适当的操作顺序。

  4. 确认关闭:在执行完关闭缓存的操作后,需要进行验证以确保缓存被正确禁用。

3.设置系统时钟比例、关闭看门狗

4.初始化外部存储器KSDRAM

  1. 确保硬件连接正确:首先确保外部存储器正确连接到系统中,并且所有必要的引脚和信号线都连接正确。

  2. 配置引脚复用:如果外部存储器控制器的引脚具有多个功能(复用功能),需设置正确的引脚复用以将控制器与外部存储器连接。

  3. 配置存储器控制器:根据外部存储器的规格和要求,配置存储器控制器。这可能涉及时序设置、数据宽度、频率设置等。

  4. 初始化存储器:在存储器控制器配置完成后,需要执行存储器的初始化序列,这可能包括发送特定的命令序列或设置存储器控制器的寄存器来初始化外部存储器。

  5. 进行校验:进行初始化后,通常需要进行一些校验操作来确保外部存储器初始化成功,存储器可以正确访问和读写。

  6. 测试稳定性:最后,进行一些读写测试以确保外部存储器的稳定性和可靠性。这些测试可帮助发现潜在的问题或错误。

  • 为加载u-boot的第二阶段代码准备RAM空间
  • 复制u-boot的第二阶段代码到RAM空间中:
  • 设置好栈;
  • 跳转到第二阶段代码的C入口点。

二、阶段二

  • 初始化本阶段要使用的硬件设备
  • 检测系统内存映射:
  • 将内核映像和根文件系统映象从Flash上读到RAM空间中;
  • 为内核设置启动参数;
  • 调用内核。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网技术知识点总览——操作系统知识点框架图

简介 本文对操作系统的知识点整体框架进行梳理和分享如下:

智能生活新体验:小米香薰加湿器技术解码

在现代家居生活中,科技与舒适性日益交织,智能家居产品成为提升生活品质的重要工具。小米香薰加湿器作为一款集科技与生活美学于一体的产品,其独特的设计和多功能性受到了广泛欢迎。今天,我们就来详细拆解这款融合了科技与香薰元素…

如何搭建线下陪玩系统(本地伴游、多玩圈子)APP小程序H5多端前后端源码交付,支持二开!

一、卡顿的优化方法 1、对陪玩系统源码中流媒体传输的上行进行优化,通过提升推流端的设备性能配置、推流边缘CDN节点就近选择等方式解决音视频数据源流的卡顿。 2、对陪玩系统源码中音视频数据的下载链路进行优化,通过选择更近更优质的CDN边缘节点来减少…

OpenHarmony实战开发-如何实现发布图片评论功能。

介绍 本示例将通过发布图片评论场景,介绍如何使用startAbilityForResult接口拉起相机拍照,并获取相机返回的数据。 效果图预览 使用说明 通过startAbilityForResult接口拉起相机,拍照后获取图片地址。 实现思路 1.创建CommentData类&…

Docker Desktop打开一直转圈的解决办法

安装Docker Desktop之前确保你的Hyper-V已经打开 开启后需要重新安装重新安装重新安装这是最关键的一步,博主自己看了很多教程,最后试着重装了一下解决了 安装DockerDesktop的时候我的电脑根本就没有Hyper-V这个功能选项,可能是这个问题 如…

RLHF强化学习对其算法:PPO、DPO、ORPO

参考: https://blog.csdn.net/baoyan2015/article/details/135287298 https://cloud.tencent.com/developer/article/2409553 最新的llama3是PPO、DPO两种方法使用 人类反馈强化学习 (RLHF),它利用人类偏好和指导来训练和改进机器学习模型: …

ColBERT和ColBERTv2:兼具Bi-encoder和cross-encoder优势的多向量排序模型

文章目录 简介ColBERTColBert 原理ColBERT如何训练ColBERT 如何使用离线索引用ColBERT 实现top-k Re-ranking用ColBERT 实现top-k 端到端的检索 ColBERTv2ColBERTv2原理SupervisionRepresentation IndexingRetrieval 总结参考资料 简介 ColBERT是一种多向量排序模型&#xff0…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

我为什么想成为一名程序员

#为什么你选择成为一名程序员# 目录 原因: 后续选择: 结尾: 原因: 本人是一个00后,出生在农村当时经济相对来说比较落后,村里面基本上都没几个人有手机。当时有些小伙伴他们拿着自己大人的手机在那里玩…

CS61B sp21fall Project02 Gitlet

Project02 Gitlet 一、项目简介二、Git和Gitlet2.1 Git简介2.2 Gitlet简介 三、框架设计3.1 Blobs3.2 Trees3.3 Commits 四、.Gitlet文件结构设计4.1 .git文件架构4.1.1 重点介绍index(VSCode中无法查看,会乱码)objects(VSCode中无…

Navicat导入sql文件图文教程

本文使用的MySQL工具为:Navicat.默认已经连接数据库!! 步骤: 1.右键自己的数据库,选择新建数据库. 2.输入数据库名称,字符集选择“utf8”,排序规则选择“ utf8_general_ci”,确定. 3.双击新建好的“数据库”。右键点击“运行SQL文件”。 4.选择本地的s…

2024年安装tf tfa tfh

目的: 在win10上,anaconda内,同时安装tensorflow tensorflow_hub tensorflow_addons。需要注意3个版本相互对应。 本文最后找到一种方法:先用pip安装tensorflow2.14版本,再次使用pip安装剩余两个时,就会自…

姑苏寻韵~庆开放原子开源大赛 OpenTiny 前端 Web 应用开发挑战赛路演圆满落幕。

春日已至,姑苏古城迎来了一场编程的盛宴——开放原子开源大赛OpenTiny前端Web应用开发挑战赛。历时三个月的激烈角逐,OpenTiny与众多开发者携手共赴这场智慧的较量。决赛路演于4月14日在苏州(太湖)产业软件园圆满落下帷幕~ 开放原…

圣地亚哥 Toler 小学利用School AI帮助每个学生都有自己的聊天机器人,提高学习兴趣和效率

圣地亚哥 Toler 小学利用 AI 程序 SchoolAI 平台为学生创建个性化的聊天机器人,帮助他们更好地学习和提问。这个 AI 程序让学生可以在几秒钟内得到问题的答案,激发了他们提出更多问题的好奇心。 管理、调节和指导学生如何通过任务控制使用人工智能。 当…

JUC(java.util.concurrent) 的常见类

Callable 接口 Callable 的用法 Callable 是一个 interface(类似之前的 Runnable,用来描述一个任务,但是没有返回值)也是描述一个任务的,有返回值。方便程序猿借助多线程的方式计算结果. 例如:创建线程…

CZT Blusetein‘s FFT

参考文献: [Sto66] Stockham Jr T G. High-speed convolution and correlation[C]//Proceedings of the April 26-28, 1966, Spring joint computer conference. 1966: 229-233.[Blu68] Bluestein L. A linear filtering approach to the computation of discrete …

代码优化实践之税率计算问题

开篇 今天的问题来自于《编程珠玑》第三章【数据决定程序结构】,这里提出了几条代码优化相关的原则,受益不浅。下面是提到的几条原则: 使用数组重新编写重复代码。冗长的相似代码往往可以使用最简单的数据结构——数组来更好的表述&#xff1…

Vue3: toRefs与toRef的基本使用

一、前言 本文主要介绍toRefs与toRef的基本使用。 二、内容 1、基本概念 作用: toRefs与toRef可以将一个响应式对象中的每一 个属性,转换为ref对象;不同 toRefs与toRef功能一致,但toRefs可以批量转换。 2、toRefs 如果把reactive定义的…

ROS仿真小车(四)—— URDF与Gazebo集成

文章目录 前言一、ubuntu20.04中下载gazebo_models二、在gazebo中显示简单模型1 创建功能包,导入依赖2 编写URDF文件3 编写launch文件4 在gazebo中显示机器人模型 三、URDF集成Gazebo相关设置四、在gazebo中导入小车模型1 编写xacro文件2 编写launch文件3 运行结果 …

Stable Diffusion 模型分享:MeinaMix(动漫)meinamix_meinaV11

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 MeinaMix 的目标是:能够在很少的提示下…