i.mx6 linux启动流程分析
I.MX6
LINUX
启动流程分析
2014/07/25
主要内容
i.MX6Q芯片启动流程
u-boot启动流程
linux内核启动流程
文件系统,服务程序启动流程
I.MX6Q功能框图
I.MX6 IROM和IRAM地址映射
I.MX6Q BOOT ROM
i.MX6 Boot ROM有以下功能: 支持从以下设备启动:
支持从多种存储设备启动 Nor Flash
串行下载(USB OTG) NAND Flash
芯片相关功能模块配置 OneNAND Flash
(DCD)
SD/MMC
数字签名认证
Serial ATA(SATA) HDD
从低功耗模式唤醒
Serial (I2C/SPI) Nor Flash
and EEPROM
BOOT ROM启动模式
三种模式
00 :读取熔丝位决定启动方式
01 :USB下载模式
10 :内部ROM执行启动流程
SPI FLASH启动模式
I.MX6Q PROGRAM IMAGE
i.MX6Q Program Image :用户编译完成的程序镜像文件,这里指
u-boot
Program Image包含四部分:
Image Vector Table(IVT)
内部ROM从IVT中读出需要的数据来启动芯片,是一个数据结构
Boot data
一张指向映像地址、映像大小的表
Device configuration data
包含芯片相关硬件初始化的寄存器地址和初始值
User code and data
用户代码和数据,这里指真正意义的u-boot代码和数据段
IVT
IMAGE VECTOR TABLE
从SPI FLASH启动流程
SPI i.MX6 检查映像 执行硬件 拷贝u-boot映像
FLASH 内部RAM 合法性 初始化 到外部RAM
代码阅读
U-BOOT 两个阶段
分为两个启动阶段
第一阶段(汇编实现) 第二阶段(C语言)
硬件设备初始化,CPU设置为 硬件设备初始化
SVC32管理模式 …
关闭I/D Cache,关闭MMU
关闭二级缓存L2 Cache
设置好栈指针
调转到第二阶段的C入口函数
start_armboot
U-BOOT 启动第一阶段
第一阶段重要文件
Makefile (make mx6q_sabresd_config3332行)
include\configs\mx6q_sabresd.h (u-boot配置文件)
include\config.h (make自动生成)
board\freescale\mx6q_sabresd\config.mk
board\freescale\mx6q_sabresd\flash_header.S
cpu\arm_cortexa8\start.S
board\freescale\mx6q_sabresd\lowlevel_init.S
board\freescale\mx6q_sabresd\u-boot.lds (链接脚本)
U-BOOT MEMORY MAP
U-BOOT 启动第二阶段
第二阶段
lib_arm\board.c (入口)
。。。
U