u-boot的学习(一)

一、U-boot的版本选择

1. 操作系统分层的概念

Windows的bios是集成在主板上,它是一段固化得程序,然后进入内核模式,在内核模式中进行硬件初始化,API初始化;紧接着进入用户模式,最后进入应用模式。

Linux系统下,bootloader要把内核的zImage文件从EMMC中读取到内存中。

2.bootloader种类介绍

Bootloader   描述 x86 ARM PowerPC
LILO   Linux磁盘引导程序
GRUB GNU的LILO替代程序
ROLO 从ROM引导Linux而不需要BIOS
Etherboot 通过以太网卡启动Linux系统的固件
LinuxBIOS 完全替代BUIS的Linux引导程序
BLOB LART等硬件平台的引导程序
U-boot 通用引导程序
RedBoot 基于eCos的引导程序 是  
Loadlin 从DOS引导Linux   是  
vivi 针对三星的ARM来定制,2440上有用到      

3.底层代码的编写方式

  

4.u-boot的版本选择

  标准:够用即可

  下载地址:ftp://ftp.denx.de/pub/u-boot/

  exynos4412架构如下图:

  cortexA9为ARM公司架构,其他是三星附加的外设架构。cortexa9为arch对应u-boot目录中的arch目录下,外面的外设对应u-boot中的board目录,相当于PC机中的南桥。

目录结构如下:

board目录下:

  • goni开发板:第三方制作的开发板,非三星的开发板,型号为Exynos 3110(SPPC110,S5PV210),CPU为Cortex-A8单核
  • universal_c210:型号为exynos4210(S5PC210,S5PV310),Cortex-A9双核
  • origen:针对A9双核
  • smdk5250:Cortex-A15双核
  • trats:Cortex-A15双核

二、exynos4412 u-boot

exynos 4412 SCP 有64KB的iROM和256KB的SRAM(iRAM)作为内部存储。我们可以使用nandflash、SD/MMC卡、eMMC和USB设备作为启动设备。

iROM:这段地址空间对应exynos 4412内部固化的一段程序,exynos4412启动的第一条指令就存放在这里。它主要用来初始化基本的系统功能,比如时钟。

iRAM:这段地址空间对应的是exynos 4412内部的一个存储器,这段存储器的特点是上电就可以用,不用初始化。

BL1:First boot loader,存储在扩展存储器上,由三星提供的二进制代码,不开源,BL1需要iROM中的代码去校验。
BL2:Second boot loader, 存储在扩展存储器上,不由三星提供,开源,对应OS。

OM(拨码开关):操作模式管脚,是由iROM控制的

2.exynos 4412的启动

(1)iROM代码

  • iROM中的代码会关掉看门狗,中断和内存管理单元(MMU),关掉D-cache,使能I-cache。
  • 若是设备直接从休眠状态唤醒,则直接进入BL1或是去其他地方,不执行u-boot(需要设置休眠标志位,Direct-Go flag)。即跳过U-BOOT,直接去运行系统。
  • verify BL1:校验BL1
  • Decrypt BL1:BL1加密
  • OM拨码开关在iROM中起作用。Get Bootmode(OM)。OM的启动图如下所示:

  电路图如下:

  • 控制启动设备的主要是OM1-OM5引脚,OM0和OM6被直接拉到低电平。OM的引脚高低电平对应OM的启动模式。
  • OM引脚未拨动到开关的右边(SW-4)时,都未低电平,此时对应的OM位为 0b 00000   查OM表格可以知道为保留位,不执行任何启动
  • XOM2拨动到右边时候,电路导通,VDD1V8_EXT拉高XOM1上的电平,此时为0b00010,为SMMMC_CH2启动。

3.U-boot分析

Uboot引导程序分为BL1、BL2、U-boot、TZSW。如下图所示:

U-boot的镜像是由BL1、BL2、U-boot.bin和TZSW组成的。其中各部分大小如上图。

U-boot的启动流程如下:

  • iROM从启动设备中加载BL1的镜像到内部256KB的SRAM中。启动设备是通过操作模式管脚(OM)选择的。根据安全启动的键值,IROM将对BL1的镜像做一个完整的校验。
  • BL1初始化系统时钟,DRAM控制器。在初始化DRAM控制器后,它从启动设备中加载OS镜像到DRAM中。根据安全启动键值,BL1对系统镜像做一个完整的校验。
  • 在启动完成后,BL1跳到操作系统。
  • 启动步骤:
    • 上电后,exynos4412会先启动片内的iROM中的程序,此步骤做两件事情:(1)初始化提供执行ARM代码的系统基本环境;(2)从启动设备(SD/MMC, eMMC4.3, eMMC4.4和NAND)中加载BL1的程序到片内RAM(SRAM)中。
    • u-boot的SPL镜像分为两部分,一部分为ubootspl.bin(16K),另一部分仍然为u-boot.bin(210K左右),BL1的代码(ubootspl.bin)已经加载到iRAM当中,然后配置DDR内存(DRAM),再把210K的u-boot.bin加载到SDRAM内存当中,接着BL1直接跳转到SDRAM的u-boot.bin当中开始运行。
时间: 2024-12-28 14:01:49

u-boot的学习(一)的相关文章

spring boot框架学习6-spring boot的web开发(2)

本章节主要内容: 通过前面的学习,我们了解并快速完成了spring boot第一个应用.spring boot企业级框架,那么spring boot怎么读取静态资源?如js文件夹,css文件以及png/jpg图片呢?怎么自定义消息转换器呢?怎么自定义spring mvc的配置呢?这些我们在公司都需要用的.这些怎么解决呢?在接下来的小节详细讲解这些.好了,现在开启spring boot的web开发第一节 本节主要: 1:InternalResourceViewResolver讲解 2:自动配置静态

spring boot框架学习7-spring boot的web开发(3)-自定义消息转换器

本章节主要内容: 通过前面的学习,我们了解并快速完成了spring boot第一个应用.spring boot企业级框架,那么spring boot怎么读取静态资源?如js文件夹,css文件以及png/jpg图片呢?怎么自定义消息转换器呢?怎么自定义spring mvc的配置呢?这些我们在公司都需要用的.这些怎么解决呢?在接下来的小节详细讲解这些.好了,现在开启spring boot的web开发第一节 本节主要: 1:自定义消息转换器 本文是<凯哥陪你学系列-框架学习之spring boot框架

LM3S之boot loader学习笔记-1

彭会锋 (首先声明,此系列文章编写参考了很多资料,其中一些内容是原版内容的引用和整理,并加入了一些自己的见解,我已经尽量标明引用部分,如有未全部标注部分,还望见谅!) 最近项目需要能够对光伏系统监控器和dsp代码进行在线升级,为此特意学习了下lm3s的bootloader编写,程序已经编写调试完毕,特写一下相关的知识点总结,也供各位进行相关参考! bootloader作用 "BootLoader是位于Flash起始地址处的一小段代码,占据空间大小依据Boot所实现的功能而不同.如果没有BootL

spring boot 基础学习

构建微服务:Spring boot 入门篇 http://www.cnblogs.com/ityouknow/p/5662753.html SpringBoot入门系列:第一篇 Hello World http://blog.csdn.net/lxhjh/article/details/51711148 Spring Boot 快速入门 http://blog.csdn.net/xiaoyu411502/article/details/47864969 Spring Boot 官方文档学习(一)

Github 上 Star 最多的个人 Spring Boot 开源学习项目

2016年,在一次技术调研的过程中认识到了 Spring Boot ,试用之后便一发不可收拾的爱上它.为了防止学习之后忘记,就在网上连载了 Spring Boot 系列文章,没想到这一开始便与 Spring Boot 深度结缘. 近三年的时间写了一百多篇关于 Spring Boot 的文章(包含两个课程),在写文章的过程中将文中的示例项目托管在 Github 上面,随着学习 Spring Boot 的朋友越来越多,在 Github 上面的关注(Star)人数也越来越多,到现在已经高达 8300

Spring Boot的学习之路(01):缘起

有人说,Spring Boot的出现,让Java迎来了又一春,它是Java应用开发的颠覆者,彻底改变了Java应用开发的模式. 2017年,SpringBoot闯入我的生活, 也让我迎来了又一春 我开始接触SpringBoot的时候,是在2017年,是公司同事在开始学.我也网上查找了些资料,发现SpringBoot相比传统SpringMVC在xml配置上有很大的一部分优势:无繁琐的xml配置,各个组件依赖配置都自动加入等.我便也跟着疯狂地学起来.不得不发表一下心得体会:用起来很爽,很舒服. 学习

spring boot入门学习---1

1.maven配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM

Spring Boot 框架学习 (一)配置并运行Spring Boot 框架

下载开发工具: 下载完成打开以后,第一步检查环境 查看jdk是否配置: 接着一定要注意,maven通常情况下它是没有给你配置的,要自行配置: 右键新建: 然后依赖选择web.跟Mybatis就行了. 创建好项目后,会发现自带了这个Application.java,这个文件就是用来启动整个项目的. 不同于SpringMVC,SpringBoot它默认自带了一个内嵌的tomcat服务器. 所以只需要右键,run-->java application,项目就启动起来了. 这里就不需要再配置一个外置的s

LM3S之boot loader学习笔记-2

彭会锋 () 上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解bootloader启动引导的三大基础知识:LM3S的存储分布.cotex-m3的启动机制.flash编程,这三者是编写bootloader之前必须要了解的相关知识! LM3S flash存储分布

我的第一个spring boot程序(spring boot 学习笔记之二)

第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相关知识点时会再次理解.要运行起第一个Spring boot特别简单,用IDEA包含了Spring Boot的引导,直接新建一个spring boot项目. 注意: 1.第一次新建Spring boot项目的时候,maven会下载大量的依赖到本地,所以特别慢,耐心等待或者用国内的maven公库都行(自