IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> uboot启动流程分析 -> 正文阅读

[系统运维]uboot启动流程分析

U-Boot启动流程分析 IMX6ULL


前言

在linux开发中,一个完整的Linux系统包含Bootloader,Linux kernel和Rootfile,而它的启动顺序也是Bootloader->Linux kernel->Rootfile,后者需要前者提供完整的功能支持。作为启动的第一步,Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。而它的存在类似于PC上电时执行BIOS程序。
常见的Bootloader有:Redboot ARMboot U-boot Blob Bios-lt vivi Bootldr


一、uboot是什么?

uboot是SourceForge上的开源项目,它是由一个德国人最早发起的项目,然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。
uboot本质上是一个裸机程序(不是操作系统),它的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。简单来说,uboot的生命周期在开机启动,到内核启动。

总结:一切都是为了启动内核。

二、uboot的启动流程

在IMX6ULL中,uboot的启动过程分为两个阶段。

  • 第一阶段:通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;
  • 第二阶段:准备启动内核,执行uboot命令。

1. 第一阶段

在uboot的第一阶段主要有:
  1. 获取uboot程序入口,通过连接脚本u-boot.lds找到程序入口arch/arm/lib/vectors.S文件中的_start
  2. 设置异常向量,设置中断模式为SVC模式,关闭FIQ和IRQ (reset 函数中)
  3. 关闭cache,MMU(cpu_init_cp15函数中)
  4. 对CPU初始化 开发板供电锁存(lowlevel_init.S)
  5. 设置运行环境,初始化DRAM,DDR,定时器,外设等
  6. 将uboot拷贝到DRAM最后面的内存区域中,为Linux腾出空间(加载uboot第二阶段代码到ROM中)
  7. 通过对DRAM整体使用规划,在DRAM中合适的地方设置栈。(设置好栈)
  8. 清除BSS段,远跳转到第二阶段执行入口board_init_r,第一阶段执行完(BSS段是用来存储静态变量,全局变量的)

2. 第二阶段

在第一阶段中,为第二阶段的函数调用提供了基础,比如gb结构,堆栈等,程序运行在main_loop中,根据获取到的bootcmd准备进入linux内核.
在第二阶段不管是bootz还是bootm命令,启动Linux的时候都会用到一个全局的变量:images,主要存放系统镜像相关数据.
而程序最终进入Linux内核的是do_bootm_linux()…

总结

uboot的启动流程还是比较复杂的,不仅涉及汇编代码部分,还有涉及到ARM处理器架构的内容,就IMX6ULL而言,uboot的启动流程还是需要花大量时间去理解的.

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:16:02  更:2022-04-26 12:16:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:40:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码