1.开发板介绍

开发板:  tiny4412  友善之臂

核心板:  exynos4412  三星  内部:RAM 256K   ROM  64K

外扩1G DRAM  4G  eMMC

2.开发板启动方式

驱动--裸机驱动流程_开发板

3.烧写出厂系统

驱动--裸机驱动流程_初始化_02

驱动--裸机驱动流程_初始化_03

驱动--裸机驱动流程_启动方式_04

驱动--裸机驱动流程_启动方式_05

驱动--裸机驱动流程_启动方式_06

驱动--裸机驱动流程_启动方式_07

4.系统启动流程分析

系统启动需要引导程序

第一步:sd卡中烧写Superboot4412-QT4.bin(linux的系统)

Superboot4412-QT4.bin 文件中存放的是完整的引导程序

第二步:复制 images到sd卡内

iROM : 固化在芯片内部

BL1: 芯片级代码(三星提供) 存放在外部设备

BL2: 平台相关代码 存放在外部存储设备中 不是三星提供

ARM 共有 7 种工作模式:

用户(user) 管理(SVC) 系统(system) 中断(IRQ) 快中断(FIQ) 中止(Abort) 未定义(Undef)

开发板上电,运行IROM(BL0),失能像看门狗等设备,初始化栈、ZI/RW、时钟等,判断启动方式,从对应的设备中搬运 BL1 到 iRAM,校验成功跳转到 iRAM 中执行 BL1。

驱动--裸机驱动流程_开发板_08

BL1 运行时 初始化相应的 IRQ 和 SVC_STACK,从对应的启动设备中搬运 BL2 到 iRAM,校验成功跳转到 BL2 执行。

驱动--裸机驱动流程_启动方式_09

BL2 初始化 IRQ 和 SVC_STACK,设置时钟、初始化外扩的 DRAM,从相应的启动设备中搬运 OS 到 DRAM,跳转到 DRAM 中运行。

Superboot4412-QT4.bin 451KB = BL1+ BL2 + bootloader

分析从 eMMC 启动时过程:

上电后 运行芯片内部的 iROM,硬件设置,从 eMMc 搬运 BL1 到 iRAM 校验完成之后跳转 iRAM 执行 BL1。

BL1 设置 IRQ、scv_statck,从 eMMC 搬运 BL2 到 iRAM,校验完成跳转到 BL2 (E4412_N.bl1.bin –>8K)

BL2 设置 IRQ、scv_statck,设置时钟,初始化 DRAM,从 eMMc 搬运 boot loader 到 DRAM (BL2→16k) 跳转到 DRAM 执行 boot loader(引导内核,挂接文件系统)