x-002exyson4412芯片启动过程分析

LoTGu LoTGu     2022-08-13     370

关键词:

 

移植u-bootFriendlyARM Tiny4412开发板上,首先我们需要对Samsung Exyson4412芯片的启动方式系统时钟初始化串口初始化内存初始化以及开发板的内存地址空间分配有一个清楚的认识。

下面是一些参考资料:

1>技术部落 (这个网站对Exyson4412芯片的启动、时钟系统、串口以及内存初始化进行了详细的讲解)

2>、嵌入式Linux系统开发完全手册_基于4412_上册.pdf (这个文档是韦东山写的,讲的也非常好)

3>Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf (这篇文档是Samsung的官方文档,详细介绍了这款Exyson4412的启动)

4>SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf (这篇文档也是Samsung官方文档,是exynos4412的用户手册,有两千八百多页,包含了exynos4412的详细信息)

1Exyson4412芯片的启动方式

    参考Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf第五章Booting Sequence

clip_image001

clip_image003

clip_image005

Ÿ   iROM是存储在内部的64KROM中的,主要进行CPU的时钟,堆栈等基本初始化工作。

Ÿ   iROM从启动外设加载BL1到内部256KBSRAM中,启动外设是由OM来决定的,根据安全启动设置值,iROM可能会较验BL1镜像文件。

Ÿ   BL1初始化内部系统时钟和DRAM控制器,在初始化完成DRAM控制器,开始加载OS镜像文件,根据安全启动设置值,BL1可能会较验OS镜像文件。

Ÿ   等启动完成后,BL1就跳转到操作系统进行执行。

<1> iROM iROM把启动设备上特定位置处的程序读入片内存 (iRAM) ,并执行它。iROM的启动过程如下图所示(摘自Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf):

clip_image007

由上图可以看出,iROM首先关闭看门狗,关闭中断及MMU,关闭数据缓存,打开指令缓存,清除TLB,然后将其他核进入IDLE模式,只留CPU0,这里有了第一个跳转分支,IROM判断当前启动模式,是冷启动还是唤醒,如果是唤醒模式,那么就是直接跳转到BL1,在BL1里面我们会再次判断是否是唤醒模式,如果是就直接跳转到唤醒函数。

接着设置IRQSVC模式的栈空间,栈地址是其内部的一片IRAM,这小段RAMIROM运行的外部随机存储器,没有这片小内存,IROM是无法运行的。接下了就是初始化IROM里面所使用的各种变量,初始化只读数据段,未初始化数据段清零,导出部分核心函数,这个函数可以在BL1中使用,获取当前复位的状态,设置系统时钟分频,获取OM管脚配置模式,从指定的启动设备上拷贝BL1的代码到iRAM中。如果拷贝成功,就验证校验和,BL1的前16个字节就是提供给IROM用来标识BL1相关信息的。

    简单地说,iROM就是先设置程序运行环境 (比如关看门狗、关中断、关MMU 、设置栈 、设置栈 、启动 PLL );然后根据OM引脚确定启动设备 (NAND Flash/SD /eMMC/其他 ),把 BL1 从指定的启动设备里面读出存入iRAM,接着在iRAM里面执行 BL1的代码。

    <2> BL1BL2 :摘自Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdfP10

clip_image009

clip_image010

clip_image012

clip_image013

2Exyson4412芯片启动模式选择

OMpin OM[5:1]设置Exyson4412从不同的外设加载程序,如SD卡,NANDFlash等。

clip_image015

Tiny4412的电路图(Tiny4412-1412-Schematic.pdf)如下图所示:

clip_image017

clip_image019

Table 5-3 OM Pin SettingTiny4412的电路图的BootingMode Option可知,XOM0,XOM1,XOM4,XOM5都设置成0,那么主要看XOM2XOM3了,这两个脚分别接在74LVC1G04反向器的输入和输出上。XOM21时,XOM30OM[5:1]5b'00010,此时选择的是从SD(SDMMC_CH2)启动;XOM20时,XOM31OM[5:1]5b'00100,此时选择的是从eMMC(eMMC44_CH4)启动;这个启动方式主要由电路板上开关决定。

3BL1BL2在启动设备上的存放位置、大小、读到 iRAM哪个位置?

    3.1启动设备是SD卡,BL1BL2SD卡上存放位置为:

摘自:Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf P24

clip_image021

BL1 位于SD卡偏移地址 512字节处(即从第一个扇区开始,前面有一个扇区保留,每个扇区512字节,第一个扇区是分区表的配置区),iROM从这个位置读入8K 字节的数据,存在iRAM地址 0x02021400位置处。 所以 BL1不能大于8K

iROM计算校验和且验证通过后并解密BL1成功后就可以跳转到BL1了,至此iROM已执行完备,权限已交由BL1了,补充说明一下,解密BL1是加密模式启动时才需要的,非加密模式启动是无需解密BL1的。

BL2 位于 SD 卡偏移地址 (512 +8K)字节处,BL1从这个位置读入14K 字节的数据,存在iRAM 地址 0x02023400 处。 BL2 不能大于(14K 4) 字节,最后 4字节用于存放较验码。

如果我们的程序大于 (14K 4) 字节,那么需要截取前面 (14K 4) 字节用来制作BL2并烧入SD卡偏移地址 (512 +8K) 字节处。当BL2启动后,由它来将存放在SD卡另外位置的、完整程序读入内存。

 

3.2启动设备是eMMC卡,BL1BL2SD卡上存放位置为:

摘自:Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf P24

clip_image022

 

参考文档

    1http://www.cnblogs.com/pengdonglin137/p/5080309.html

    2http://www.techbulo.com/1335.html

 

 

 

 

 

 

 

 

 

第二章tiny4412u-boot移植二启动分析

...明:本文为博主原创文章,未经博主允许不得转载。一、启动过程说明      讲解启动过程,首先的源头就是打开电源,这个相信没人人不知道。CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指... 查看详情

lcd驱动端与设备端名称匹配过程分析(tiny4412)

​LCD驱动端与设备端名称匹配过程在tiny4412提供的内核下,LCD屏的平台设备名字和平台驱动名字不匹配也能驱动屏点亮,​这是怎么回事的呢?下面我们来分析这是如何实现的。​硬件平台​Cpu:exynos4412​板子:tiny4412​Linux内... 查看详情

i.mx6q和exynos4412哪个好?

...L400,哪个性能好一些?I.MX6Q是飞思卡尔生产的cortexA9四核芯片,相对应的同一世代芯片是三星的EXYNOS4412芯片。咋看是EXYNOS4412与I.MX6Q两种芯片各有千秋,但是仔细分析,你会发觉I.MX6Q的性价比与适用性会更加好,特别是在图形处... 查看详情

stm32芯片启动过程分析求证

STM32的开发之前做过一些,但对头文件的理解以及存储器的映射理解不是很深,现在准备开始研究ARM的时候,发现启动引导问题暴露出来了,现在我把我对STM32启动过程描述一下,请高手指正:STM32有三种启动模式,根据上电后两... 查看详情

exynos4412

...责搬移uboot第二阶段的代码到内存中运行。SPL是由固化在芯片内部的ROM引导的。我们知道很多芯片厂商固化的ROM支持从nandflash,SDCARD等外部介质启动。  所谓启动,就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码... 查看详情

内核启动过程分析

...内核的入口内核是从汇编代码开始运行,以arm架构的芯片为例,arch/arm/kernel/head.S的ENTRY(stext)处就是起始代码。参考博客:《如何快速确定程序的入口》。3、汇编代码阶段3.1、设置成SVC模式并禁止终端s 查看详情

tiny4412u-boot分析u-boot启动流程

从大方面来说,u-boot的启动分成两个阶段,第一个阶段主要的职责是准备初始化的环境,主要有以下几点①设置异常向量表②把CPU的工作模式设置为SVC32模式③关闭中断、MMU和cache④关闭看门狗⑤初始化内存、时钟、串口⑥设置... 查看详情

tiny4412u-boot分析u-boot引导内核流程

在u-boot中,通过bootm命令启动内核。bootm命令的作用是将内核加载到指定的内存地址,然后通过R0、R1、R2寄存器传递启动参数之后启动内核。在启动内核之前需要对环境做一些初始化工作,主要有如下几个方面:(1)、cpu寄存器设... 查看详情

tiny4412u-boot分析u-boot配置流程分析

...Friendlyarm的文档,编译uboot的流程为maketiny4412_configmake这个过程主要涉及到两个文件,顶层的Makefile文件和mkconfig文件,makeconfig文件是一个脚本,通过文件的注释可以了解到它的作用#Scripttocreateheaderfilesandlinkstoconfigure#U-Bootforaspecific... 查看详情

linux内核lcd驱动分析与换屏方法(tiny4412)

...args实现驱动不同的LCD屏。​21.5.2分析bootargs中的lcd参数再启动uboot的时候会有如下的环境参数:​bootargs=noinitrdroot=/dev/nfsn 查看详情

4418开发板和4412开发板的区别在哪里

...嵌入式有兴趣的新手,4418比较实用于产品研发。至于说芯片停产的问题,我觉得可以不关注。这俩者并没有大的竞争。个人推荐学习板4412开发板 参考技术B都是三星四核cortex-a9系列芯片开发板市场上相对来说入门学习的话,4412... 查看详情

高通芯片启动流程

高通芯片启动流程高通平台启动过程高通缩写全称汇总 查看详情

听说三星四核exynos4412功耗很低,还有别的双核芯片功耗低的吗?

...国内平板都卡在了功耗的瓶颈上。国内盈方微IMAPx15双核芯片,采用最先进的双核A5架构,使用和待机功耗非常小,待机时可以控制在2mAh左右,可以让平板基本不需要关机了。参考技术A不是单核休想吧 查看详情

tiny4412u-boot烧写及根文件系统制作(不进入终端问题)

...可以参考。现在就把我给arm的emmc烧写过程开始说。用sd卡启动,开发板的右下角有个开关控制启动方式,往下是sd卡启动,往上是mm 查看详情

4412移植x264并且yuv422转x264(代码片段)

...会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析,所以,了解如何分析YUV数据流对于... 查看详情

tiny4412-1312__uboot移植(代码片段)

...oid、trats、trats2,但是只有origen支持spl配置,根据exynos4412芯片启动的特点,选择origen作为参考比较合适。   cp-rorigen/tiny4412  1)修改./board/samsung/tiny4412/tiny4412.c     直接修改文件名即可;  2)修改 ./board/sams 查看详情

mcu(infineontricore)启动过程介绍

...p及Shutdown等阶段,本章我们就继续以英飞凌TriCore系列芯片介绍下MCU运行前经历的启动过程。2.基本概念SSW:StartupSoftWare,MCU发生Reset后最先执行的代码BootRom:MCU中的一块Flash空间,其存储内容在芯片供应商出厂前已固化... 查看详情

tiny4412开发板支持linux吗

...别,我们简单介绍一下Android文件系统的结构。Linux系统的启动过程:bootloader(GRUB)---->zImage(Kernel)---->ramdisk(临时根,在内存中)---->rootfs(永久根,在磁盘上)Android的启动过程:bootloader(厂商提供)---->zImage(Kernel)---->ramdisk(永... 查看详情