bootloader详解目录—废铁是怎么产生价值的

浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么
浅析嵌入式系统之uboot详解(2)—CPU工作模式
浅析嵌入式系统之uboot详解(3)—看门狗
浅析嵌入式系统之uboot详解(4.1)—内部中断
浅析嵌入式系统之uboot详解(4.2)—外部中断(GPIO)
浅析嵌入式系统之uboot详解(4.3)—异常和异常向量
浅析嵌入式系统之uboot详解(5.1)—时钟分频
浅析嵌入式系统之uboot详解(5.2)—省电模式(番外)
浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)
浅析嵌入式系统之uboot详解(6)—关闭缓存和mmu
浅析嵌入式系统之uboot详解(7)—初始化SDRAM


uboot详解—板子上电后uboot做了什么

  • 0. 前言
  • 1. 背景
  • 2. 基础知识
    • 2.1 SDRAM
    • 2.2 NOR Flash
    • 2.3 NAND Flash
  • 3. 两种启动方式
    • 3.1 Nandflash启动
    • 3.2 NORflash启动
  • 4. 总结

0. 前言

刚开始工作接触到uboot,希望将自己的学习整理,分享给更多的人,资料都是参考晚上各种大佬的讲解分析。

1. 背景

我们现在接触的大多数电子产品都是使用数字电路设计出来的,数字电路的精髓就是两个数字:0和1,这两个数字千变万化的组合创造了计算机世界的缤纷多彩,不管是cpu、内存还是其他外设都是通过0和1的变化来进行记录、交互以及计算。硬件是怎么操作这两个数字以及这两个数字是怎么控制硬件工作的,这里不进行讨论,那都是一些二极管、三极管、与非门、信号放大取样编码等等知识,所以这里将对一个个功能完整的芯片,从上电以后,他们通过电信号完成各种操作的过程进行解析。如果有玩过单片机的同学应该知道,一个cpu加上一个电源,然后外接一个外部晶振就能够做成一个最小系统了,单片机就能够在他可怜的64k或者128k内存中运行起来了,这些简单的控制芯片虽然有它的存在价值,但是它不能满足日益复杂的计算需求,所以需要更快的运算速度以及更大的运行内存,因此我们会用到更复杂的处理器,比如mips、arm等。下面将使用arm s3c2440 处理器分析上电启动的过程。

作为一个嵌入式产品,它的多样性让它更具有可玩性,以及更容易适应不同的需求,它不像我们的PC启动方式相对比较单一(ROM启动),arm启动方式有从norfalsh启动、nandflash启动、SD卡启动和UBS启动等,但是他们的启动原理都是大同小异的。

2. 基础知识

此部分对相关知识进行简单的介绍,详细的介绍会在后面的文章进行补充。

2.1 SDRAM

SDRAM(Synchronous Dynamic Random Access Memory):同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写,简单的说,它就是cpu使用的外部内存,即我们常说的内存条。

SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,速度比SDRAM快,一般用作高速缓冲存储器(Cache)。

2.2 NOR Flash

NOR Flash:非易失闪存,是一种外部存储介质,芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中,由于它有地址总线,cpu可以直接从norflash中取指,直接从FLASH中运行程序,但是工艺复杂,价格比较贵,容量较小(1~4M),NOR的传输效率很高,cpu可以从norflash中读取数据,但是写入数据的时候需要指定的命令才能写入,而且每次写入之前都要执行擦除动作,决定了它的运行速度不会太快。

2.3 NAND Flash

NAND Flash:它也是非易失闪存(掉电不丢失)的一种,但是它虽然有数据总线,但是没有地址总线,所以cpu不能直接从NANDFLASH中取指运行,由于它价格便宜,所以常常用来存储大量数据,和我们常说的硬盘类似。应用NAND的困难在于flash的管理需要特殊的系统接口。

3. 两种启动方式

3.1 Nandflash启动


首先必须把一个正确的bootload烧写到nandflash的最低位置,即从0x000开始烧写。当我们选择从nandflash启动开发板的时候,开发板就会启动连接nandflash的电路结构,当开发板一上电的时候,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到CPU的内部RAM中(SRAM),这个内部RAM我们通常称作stepping stone,同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000),CPU从内部RAM的0x00000000位置开始启动,这个过程不需要程序干涉的。

这个过程就是启动过程的stage1,它将nandflash的前4看内容拷贝到stepping stone中,然后从stepping stone的第一条指令开始执行,这4k内容里面的指令将会完成以下几个动作:

  1. 硬件设备初始化

  2. 加载U-Boot第二阶段代码到SDRAM空间

  3. 设置好栈

  4. 跳转到第二阶段代码入口


从上图我们可以看到,板子重置以后,内存的映射关系。从图中可以看到以下几点:

  1. 刚开始bank0~bank5是只能映射SROM的,而bank6和bank7才能够接SDRM,而且每个bank最大接128M的SDRM,所以决定了S3C2440的最大可外接SDRAM是256M;

  2. 从图中我们可以看到bank6的起始地址是0x3000_0000, 所以我们在执行stage1的第二个动作(加载U-Boot第二阶段代码到SDRAM空间)时,需要将uboot代码放到0x3000_000~0x4000_0000区间内(SDRAM内),才能从SDRAM中正常执行stage2;

  3. 当没有选择从nandflash启动时,Boot internal SRAM(4k)的起始地址是0x4000_0000, 当选择从nandflash启动时,Boot internal SRAM(4k)的起始地址是0x00, 因为我们的开发板没有外接SROM,所以bank1~bank5都是空闲的,而bank0的位置将被Boot internal SRAM(4k)替代,也就是说bank0的前4k就是stepping stone(起步石),板子上电以后,在nandflash的启动模式下,S3C2440在硬件上会完成下图中的地址映射,并自动将nandflash中的前4k拷贝到stepping stone中,并从stepping stone的开始地址(0x00)获取到第一条指令并执行。

经过上面的分析后,我们可以将上面两图合并成下图所示:

关于4k代码的执行过程将会在后面详细解释,下面列出uboot从上电到启动内核的整个过程进行概述:

3.2 NORflash启动

其实理解了nandflash的启动方式,norflash的启动也就好理解多了,首先需要知道的是norflash是可以在片上执行代码(XIP)的,也就是说,我们只需要将bootload烧写到norflash的开始地址,当开发板上电以后,从内存映射图可以知道,nor flash会被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000,不会改变),然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)整个uboot,直到引导内核启动。

从norflash启动可以省事多了,不仅如此,我们自己编写的裸机程序需要调试,一般也是直接烧写到norflash中进行的,因为只要我们将编译好的可执行文件放到norflash的开始,开发板上电以后就会从norflash的第一条指令开始取指执行,我们后面写裸机程序的调试就是用这种方式进行的。

从norflash启动虽然从开发的角度会很方便(其实也方便不了多少),但是从产品的角度却增加了它的成本,毕竟norflash还是相对较贵的,我们明明只要一块nandflash就足够启动整个开发板了,就没必要在产品中添加一块norflash了,只要代码改改就能省下不少成本,何乐不为。而且nandflash对产品是必不可少的,因为后面还要存放内核和文件系统,起码需要几十兆的空间,用norflash来存储也不现实。

也许你会想,能不能只用norflash,不用nandflash和SDRAM行不行呢,毕竟norflash即可以存储,也可以运行程序的啊,但是了解一下他们的市场价格、运行速度和工作原理,应该就会知道答案了。

4. 总结

  这里只例举了两种启动方式,还有其他的启动方式将在uboot代码中分析,这篇文章只是一个引子和一个概述,后面将具体分析一个开发板是怎么从一个废品通上电以后体现了它的价值,请看后面的文章,了解bootload中的前4k代码到底干了什么!
  总结一下,uboot启动内核的过程大概可以分为两个阶段,两个阶段的功能如下:

第一阶段的功能

  • 硬件设备初始化
  • 加载U-Boot第二阶段代码到RAM空间
  • 设置好栈
  • 跳转到第二阶段代码入口

第二阶段的功能

  • 初始化本阶段使用的硬件设备
  • 检测系统内存映射
  • 将内核从Flash读取到RAM中
  • 为内核设置启动参数
  • 调用内核

浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么相关推荐

  1. 浅析嵌入式系统之uboot详解(5.1)—时钟分频

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  2. 浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  3. 浅析嵌入式系统之uboot详解(3)—看门狗

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  4. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  5. 嵌入式Linux应用开发详解

    嵌入式Linux应用开发详解 这边主要是推荐一些嵌入式开发应用作用到的一些书籍和自己从中学到的一些体会,写下来一方面是供自己参考,另一方面也是一种只是的传播,我学习我快乐哈哈 有需要书籍电子版的也可以 ...

  6. (3)uboot详解——饿了么,我们来喂“狗”吧

    (3)uboot详解--饿了么,我们来喂"狗"吧 uboot启动时,当将cpu运行模式设置为管理模式后,就要关闭看门狗了,那么看门狗是干什么的呢? 狗狗是我们的好朋友,有时候,一条 ...

  7. STM32最小系统硬件组成详解

    STM32最小系统硬件组成详解 0组成: 电源   复位   时钟    调试接口  启动 1.电源 : 一般3.3V  LDO供电   加多个0.01uf去耦电容   2.复位:有三种复位方式:上电 ...

  8. Linux系统守护进程详解

    文中有不对或者有不清楚的地方,请大家告诉我,谢谢!   Linux系统守护进程详解 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, ...

  9. 支付系统整体架构详解

    2019独角兽企业重金招聘Python工程师标准>>> 支付系统整体架构详解 http://www.dataguru.cn/article-11263-1.html http://w ...

最新文章

  1. R语言ggplot2可视化条形图(bar plot)、配置因子变量的全局填充色方案、这样不同数据集相同因子的填充色具有一致性(Fix colors to factor levels)
  2. Exchange服务器系列课程之四--管理Exchange收件人
  3. php 列出当前目录
  4. 鞋带的超炫系法-真是门艺术[转载]
  5. 关系型数据库 (数据库类型)
  6. sqlserver 两个数值字段相加_SQLServer 中多行数据合并成一行数据(一个字段)
  7. java 计算器 junit测试_测试工具之JUnit4 结合Mockito模拟测试代码
  8. webApp调试页面的几种方式
  9. lin通讯从节点同步间隔场_LIN总线入门
  10. Spring实战(开发Web应用)
  11. C语言如何区别素数和合数,怎么快速记住100以内的素数和合数
  12. 数据结构:串(String)【详解】
  13. 全自动 TSPITR--基于RMAN-LOGSEQ
  14. git/github教程
  15. python用四个圆画成花_【元旦手工】最美元旦手工花手工教程,赶紧提前收藏吧!...
  16. iOS JS与OC交互
  17. html日期格式化引用fmt报错
  18. 【数学】焦点弦定理(?)
  19. 打印DPI如何与计算机DPI一致,打印效果失真 你了解DPI与照片关系么?
  20. 计算机语言学专业排名,语言学专业排名

热门文章

  1. HTTP访问控制(CORS) 跨域访问
  2. 本科入职微软,是一种怎样的体验?让我们来听听这位学长的经历分享吧!
  3. Python requests 爬取汽车之家全部品牌logo,urllib下载到本地
  4. 【面试大全-缓存】-Redis有哪些适合的场景
  5. 维棠FLV视频下载软件(1.3.0.7)绿色版
  6. [codeforces 339]E. Three Swaps
  7. 安卓8.1后台进程活动与后台流量限制策略记录
  8. 智慧消防解决方案-全套大合集
  9. 哈夫曼编码-Java实现
  10. SSL证书的作用,可以帮助网站达到什么样的效果