NanoPi2-S5P4418启动流程分析

一、S5P4418启动流程:

(1)芯片上电后首先自动运行IROM里的代码,IROM是芯片中的一个包含固化代码的ROM存储空间,该段代码主要侦测启动脚的配制,从相应启动介质中抓取16KB代码(Block1-Block32)到ISRAM(0xFFFF0000)中运行。
(2)运行内部ISRAM中的2ndboot.bin代码,复制u-boot.bin到DDR中。
(3)在DDR中运行u-boot.bin。

二、NanoPi2 MMC镜像分布:
NanoPi2-S5P4418启动流程分析_第1张图片

三、NanoPi2 MMC镜像解析:

NanoPi2镜像中的2ndboot.bin包含Nish.bin和initalboot.bin两部分。

(1)NISH1.bin:

NISH1.bin文件占一个Block(512字节),被烧录在SD卡上的第1号Block。上电启动后被复制到从0xFFFF0000开始的地址空间(ISRAM)中。反编译后可以得到部分指令:

可以看到NISH1.bin前8行指令均为跳转指令,即ResetV、UndefV、SWIV、PAbortV、DAbortV、UnusedV、IRQV、FIQV等8种用户异常向量表。从图中第20行可以看出:当发生以上中断时,系统将会跳转到0xFFFF0200、0xFFFF0204等处执行。
NanoPi2-S5P4418启动流程分析_第2张图片

除完成异常向量表重定位外,NISH1.bin还进行以下工作:

1)设置启动方式:
NanoPi2-S5P4418启动流程分析_第3张图片

2)初始化PLL:
NanoPi2-S5P4418启动流程分析_第4张图片

3)初始化DRAM:
NanoPi2-S5P4418启动流程分析_第5张图片

(2)initialboot.bin:

initialboot.bin类似于uboot的spl阶段,被烧录在SD卡的第2号Block。其完成的工作大概是:初始化部分时钟、初始化串口、初始化系统栈、从第64号Block开始,首先读取NISH2.bin(boot.TBI)文件,该文件用于uboot在DRAM运行时的一些初始化配置,闭源。然后将从65号Block开始的完整的uboot.bin复制到DRAM的0x42C00000开始的地址空间中,并从这个地址开始继续执行。

四、NanoPi2 Boot烧写

将2ndboot.bin与boot.TBI合并(注意boot.TBI偏移量为0x7E00)为一个文件boot-spl.bin,烧写入SD卡的Block1,命令如下:

sudo dd if=boot-spl.bin of=/dev/sdd bs=512 seek=1

完成后烧写uboot.bin入SD卡的Block65,命令如下:

sudo dd if=uboot.bin of=/dev/sdd bs=512 seek=65

你可能感兴趣的:(芯片)