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

Uboot

什么是Bootloader?

Linux系统要启动就必须需要一个 bootloader程序,也就说芯片上电以后先运行一段bootloader程序。
这段 **bootloader程序会先初始化时钟,看门狗,中断,SDRAM,等外设,然后将 Linux内核从flash(NAND, NOR FLASH,SD,MMC等)拷贝到内存中,最后启动Linux内核。**当然了,bootloader的实际工作要复杂的多,但是它最主要的工作就是启动 Linux内核。

总得来说,Bootloader就是一小段程序,它在系统上电时开始执行,初始化硬件设各、准备好软件环境,最后调用操作系统内核。

Bootloader启动流程

  1. 第一阶段:初始化时钟,关闭看门狗,关中断,启动ICACHE,关闭DCACHE和TLB,关闭MMU,初始化内存,初始化NAND FLASH,重定位。
    补充:存储芯片根据短电后是否保留原有存储的信息分为易失性存储芯片(RAM)和非易失性存储芯片(ROM)
    非易失性存储芯片(ROM)又可以分为闪存存储器和只读存储器。目前闪存存储器FLASH是主流,主要又分为NAND FLASH和NOR FLASH..
NAND Flash

NAND Flash 为大容量数据存储的实现提供了廉价有效的解决方案,是目前全球市场大容量非易失存储的主流技术方案。

  1. 第二阶段:初始化一个串口,检测系统内存映射,将内核映象和根文件系统映象从 Flash上读到SDRAM空间中,为内核设置启动参数,调用内核。

uboot是怎么和内核完成参数传递的?

uboot启动后已经完成了基本的硬件初始化(如:内存、串口等),接下来,它的主要任务就是加载Linux内核到开发板的内存,然后跳转到Linux内核所在的地址运行。

想要启动LINUX 内核,uboot必须要给内核传递一些的必要的信息来告诉内核当前所处的环境。

  1. uboot把机器ID通过R1传递给内核,Linux内核运行的时候,首先就从R1中读取机器ID来判断是否支持当前机器。这个机器ID实际上就是开发板CPU的ID。
  2. R2存放的是块内存的基地址,这块内存中存放的是uboot给Linux内核的其他参数。这些参数有内存的起始地址、内存大小、Linux内核启动后挂载文件系统的方式等信息。
  3. 除了约定好参数存放的地址外,还要规定参数的结构。Linux2.4.x以后的内核都期望以标记列表(tagged_list)的形式来传递启动参数
    在这里插入图片描述
http://www.lryc.cn/news/266736.html

相关文章:

  • ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮
  • 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素
  • 推荐五个免费的网络安全工具
  • Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记
  • 【LeetCode刷题笔记】动态规划(二)
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • 蓝牙技术在物联网中的应用
  • 宝塔面板Linux服务器CentOS 7数据库mysql5.6升级至5.7版本教程
  • 掌握常用Docker命令,轻松管理容器化应用
  • 【数据结构1-2】P5076 普通二叉树(简化版)(c++,multiset做法)
  • Linux系统安装及管理
  • MySQL学生向笔记以及使用过程问题记录(内含8.0.34安装教程
  • obs video-io.c
  • 简述 tcp 和 udp的区别?
  • 信息收集 - 谷歌hack
  • 英飞凌TC3xx之一起认识DSADC系列(七)应用实战项目二(实现旋变软解码)
  • 【浏览器】同源策略和跨域
  • 云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark
  • 基于jdk11和基于apache-httpclient的http请求工具类
  • Node.js(二)-模块化
  • ARM AArch64的TrustZone架构详解(上)
  • 从源PC上一次性p2v(qcow2)的构想
  • 数据结构:KMP算法
  • 小程序真机如何清除订阅数据
  • 基于ssm出租车管理系统的设计与实现论文
  • 音视频转码
  • 编解码异常分析
  • APISpace 热门好用的API推荐,含免费次数
  • Qt/QML编程学习之心得:一个.qml文件调用另一个.qml文件(十七)
  • C++_单列模式介绍