当一个Linux 系统上电或重启时发生的第一件事情,是处理器要执行在某个预
定的位置上的代码。(固化代码,存于内部ROM中?)对于桌面计算机,这个位置是位于主板上的闪存中的,这部分
闪存里的是基本输入/ 输出系统(Basic Input/Output System,BIOS)。因为现代
的PC 提供了如此多种多样的启动设备,BIOS 要做的第一件事情是判断从哪个设备
来启动[1]。
一旦决定了启动设备,FSBL 会被加载到RAM 并由处理器执行。FSBL 是一片非常
小的代码——小于512 字节,也就是单个扇区—— 它唯一的作用就是把第二阶段
引导装载程序(Second-StageBootloader,SSBL)装入RAM。
在启动过程中,SSBL 这个阶段是要呈现一个引导菜单的
引导在SSBL阶段进行?因为SSBL阶段程序比较大,没办法在内部RAM运行,所以在内部RAM进行的只有FSBL?
Zynq芯片的引导经历一系列的阶段,起点是上电时初始化的引导ROM。芯片的
引导模式配置引脚的值决定了引导模式[5]。引导模式定义了FSBL 要从哪个接口装
载——JTAG、NAND Flash、NORFlash、QSPI Flash 还是SD 卡[2]。一旦引导模式
被确定了,引导ROM 会读入引导头和给定的配置参数,验证了这个FSBL 映像之后,
把它从指定的接口装载到OCM 中。一旦映像装入到OCM 中,CPU的控制就转交给FSBL
了。
所以引导期间的步骤如下:(注意,只是步骤,并不是STAGE-0,STAGE-1,STAGE-2)
1. 复位期间,执行内部ROM的固化代码,固化代码会判断从哪个引导源引导(这部分判断在固化代码里面执行)
2. 一旦有了启动方式,FSBL会被加载到内部RAM并由处理器执行,FSBL是一片非常小的代码——小于512字节,它唯一的作用就是把第二阶段引导装载程序(SSBL)装到DDR上
3. U-BOOT,内核,APP启动
引导的3个stage:
Stage-0:引导ROM 的作用是载入第一阶段(stage-1)引导映像。第一阶段引导映像是
由上电/ 重启时读到的BOOT_MODE 信号决定的,这个信号就是施加在某些特定引脚上的弱上拉或下拉[5]。
其实就是读取硬件配置字
找到引导源之后,ZYNQ就会把FSBL装载到OCM(ON-CHIPMEMORY)中,程序跳转到FSBL的起点,接着进行Stage-1.
Stage-1:执行FSBL,负责一些初始化的工作(对于SDS1000X-E来说,加载FPGA也是在这步进行),包括根据PS 配置数据初始化CPU、用位流对PL 编程、把第二阶段引导装载程序或初始的用户应用到存储器中,然后开始执行第二阶段引导装载程序或初始用户应用代码。在CPU 的控制权转交给第二阶段引导装载程序之前,FSBL 关闭了cache和MMU,并清空了指令cache,因为U-boot开始运行的时候认为这些是关闭了的[6]。
Stage-2:这里的SSBL 是U-Boot,它负责把压缩了的Linux 内核映像、系统设备树和ramdisk 映像装载到内存中。一旦这些映像装载到了内存里,U-Boot 会启动Linux 内核的执行
JTAG
1.ZYNQ有两个JTAG口,一个叫DAP(PS内部),一个叫TAP(PL内部)
2.DAP允许用户使用第三方调试工具;TAP是标准jtag上添加了支持PL特性的功能(使能了DAP调试ARM的同时用TAP调试PL硬件)
3.JTAG Chain mode, both the TAP and DAP are visible from external JTAG debug
toolor a JTAG tester.这是PS和PL均用一个JTAG接的情况,JTAG可以调试PS也可以调
试PL
4. 如果不用同一个JTAG接口,则PL还是用TAP的JTAG接口,PS用PJTAG接口(该接口可以用PS特有的管脚,也可以通过EMIO拓展到PL),但此时要选择independent JTAG mode,而不是JTAG chain mode
5. ZYNQ7000的on chip memory包括了256KB的RAM和128KB的ROM(Boot ROM)
xt-indent:-18.0pt;mso-char-indent-count:0;mso-list:l0 level1 lfo1;mso-layout-grid-align:none;text-autospace:none'>5. ZYNQ7000的on chip memory包括了256KB的RAM和128KB的ROM(Boot ROM)