“No os hardware boot”的版本间的差异

来自百问网嵌入式Linux wiki
第52行: 第52行:
  
 
=第02节_嵌入式系统硬件组成=
 
=第02节_嵌入式系统硬件组成=
 +
一句话引出整个嵌入式系统: 支持多种设备启动
 +
 +
问题引出:
 +
a. 系统支持SPI FLASH启动.
 +
    这意味着可以运行SPI FLASH上的代码
 +
    the system can boot from spi flash,
 +
    so it needs to run code on spi flash
 +
   
 +
b. 但是SPI FLASH不是XIP设备,
 +
    cpu无法直接执行里面的代码
 +
    but the spi flash isn't xip device,
 +
    cpu can't run code on spi flash directly
 +
 +
    问题来了,
 +
    CPU如何执行SPI FLASH上的代码?
 +
    一上电, CPU执行的第1个程序、第1条指令在哪里?
 +
   
 +
    how can the cpu run the code on spi flash ?
 +
    where is the first code run by cpu, when power up ?
 +
 +
答案:
 +
a. ARM板子支持多种启动方式:XIP设备启动、非XIP设备启动等等。
 +
  比如:Nor Flash、SD卡、SPI Flash, 甚至支持UART、USB、网卡启动。
 +
  这些设备中,很多都不是XIP设备。
 +
 
 +
  问:既然CPU无法直接运行非XIP设备的代码,为何可以从非XIP设备启动?
 +
  答:上电后,CPU运行的第1条指令、第1个程序,位于片内ROM中,它是XIP设备。
 +
      这个程序会执行必要的初始化,
 +
  比如设置时钟、设置内存;
 +
  再从"非XIP设备"中把程序读到内存;
 +
  最后启动这上程序。
 +
 
 +
    猜测: ARM芯片内部有很多部件,这是一个片上系统(System on chip),
 +
      比如有:
 +
  cpu
 +
  rom
 +
  ram
 +
  memory controller --- ddr
 +
  sd/mmc controller --- sd card
 +
  spi controller    --- spi flash
 +
  usb controller    --- usb storage device
 +
  uart controller
 +
  ......
 +
  interrtupt controller
 +
 
 +
 +
b. 跟PC的类比
 +
  CPU      ---- 单独的芯片
 +
  启动设备 ---- BIOS芯片
 +
  DDR      ---- 单独的可拔插式模块
 +
  存储设备 ---- SATA硬盘,可拔插
 +
  usb controller ...
 +
 
=第03节_SOC框架=
 
=第03节_SOC框架=
 
=第04节_具体单板的启动流程=
 
=第04节_具体单板的启动流程=

2019年4月10日 (三) 14:44的版本

第01节_XIP的概念

who runs programe? 我们常说运行程序,程序通过cpu运行,保存在存储设备上。

存储设备有多种,如下分类

 
|----hard dsik
|----sd card
|----Flash
	|----Nor Flash
	|----Nand FLash

无论是哪一种存储设备,内部的抽象结构是一样的,如下图所示

图1


比如,第0个存储空间存放的0x31这个数据,第一个存储空间存放的0x30这个数据

如何访问存储空间,通过访问每行左上角的编号去访问里面的数据,称这些编号为地址,而编号对应的数值,称为数据


如何访问存储设备(就是为了读写某一个存储空间)?

  1. 发出地址
  2. 读数据(从设备里面范围给CPU)/写数据(从CPU发给存储设备)

地址和数据如何传输?
如果地址和数据直接来自CPU,或者说数据直接发给CPU,那么这个存储设备,我们就称为XIP device(cpu可以直接访问存储设备)


图2

按照正常的执行流程,cpu和存储设备之间还会有内存控制器

U盘的内部存储结构

如何访问U盘的内部存储结构 U盘对外只有5条线,cpu不可能直接发数据给u盘的,中间需要引入一个USB控制器 cpu可以直接访问到usb控制器,通过usb控制器发送符合U盘传输协议的信息,间接的访问U盘数据。所以usb设备不是XIP device

如何识别一个存储设备是否是XIP设备? 1.CPU可以直接寻址的设备。 2.看是否有分开的地址总线和数据总线。


CPU通过SPI控制器才能得到spiflash中的数据,所以,spi flash不是XIP device



图3 13.09

对于SD card也是类似的,CPU需要通过SD/MMC Controller才能把地址发给SD card,也必须通过SD/MMC Controller得到里面的数据并执行,所以SDcard不是XIP device

第02节_嵌入式系统硬件组成

一句话引出整个嵌入式系统: 支持多种设备启动

问题引出:

a. 系统支持SPI FLASH启动.
   这意味着可以运行SPI FLASH上的代码
   the system can boot from spi flash,
   so it needs to run code on spi flash
   
b. 但是SPI FLASH不是XIP设备, 
   cpu无法直接执行里面的代码
   but the spi flash isn't xip device,
   cpu can't run code on spi flash directly

   问题来了,
   CPU如何执行SPI FLASH上的代码?
   一上电, CPU执行的第1个程序、第1条指令在哪里?
   
   how can the cpu run the code on spi flash ?
   where is the first code run by cpu, when power up ?

答案: a. ARM板子支持多种启动方式:XIP设备启动、非XIP设备启动等等。

  比如:Nor Flash、SD卡、SPI Flash, 甚至支持UART、USB、网卡启动。
  这些设备中,很多都不是XIP设备。
  
  问:既然CPU无法直接运行非XIP设备的代码,为何可以从非XIP设备启动?
  答:上电后,CPU运行的第1条指令、第1个程序,位于片内ROM中,它是XIP设备。
      这个程序会执行必要的初始化,

比如设置时钟、设置内存; 再从"非XIP设备"中把程序读到内存; 最后启动这上程序。

   猜测: ARM芯片内部有很多部件,这是一个片上系统(System on chip),

比如有: cpu rom ram memory controller --- ddr sd/mmc controller --- sd card spi controller --- spi flash usb controller --- usb storage device uart controller ...... interrtupt controller


b. 跟PC的类比

  CPU      ---- 单独的芯片
  启动设备 ---- BIOS芯片
  DDR      ---- 单独的可拔插式模块
  存储设备 ---- SATA硬盘,可拔插
  usb controller ...

第03节_SOC框架

第04节_具体单板的启动流程