嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
嵌入式Linux裸机开发(二)——S5PV210启动过程分析
一、iROM启动方式简介
友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅三星官方S5PV210文档s5pv210_irom_applicationnote_preliminary可知,iROM启动方式支持从MoviNAND/iNand, MMC/SD Card ,pure Nand, eMMC, eSSD, UART and USB等存储设备启动。
1、硬件支持需求
使用iROM启动方式有几种硬件需求:
A、基于CortexA8的S5PV210X微处理器
B、64KBiROM
C、96KB iRAM
D、通用的SDRAM和控制器
E、4/8 Bit的高速SD/MMC控制器
F、4-bit SD / 4-bit MMC / 4 or 8-bit eMMC
G、Nand Flash控制器
H、OneNand控制器
I、eSSD控制器
J、UART/USB控制器
2、启动模式
A、OneNand启动(Mux/Demux)
B、Nand启动(支持8/16-Bit ECC)
C、MMC启动(MMC4.3标准,兼容eMMC)
D、eSSD启动
E、UART/USB启动
安全启动模式支持:对除UART/USB外的所有启动设备的BootLoader采用整体校验,安全秘钥值写在S5PV210内部,如果安全秘钥值没有写在S5PV210内部,则为非安全启动模式。三星在制造阶段就将安全秘钥值写入到了S5PV210内部。
第二启动模式支持:当第一启动模式(安全启动模式)失败后,就会试图从4 bit的SD/MMC通道2通过SD/MMC启动。
3、iROM启动方式的优点
A、降低BOM(材料清单)成本
iROM启动支持从Movinand/iNAND/MMC/eMMC Card, eSSD设备启动,系统无需启动介质就可以启动,不需要像nor flash这样的启动设备。
B、改善读特性
采用iROM启动方式从nand flash启动时,S5PV210支持8/16-bit H/W ECC。但是16-bit ECC仅支持4KB 5cycle的Nand。
C、降低生产成本
能从其他启动设备烧录启动设备,无需Gang programmer烧录器
4、电路设计
A、使用OM引脚选择iROM启动设备
B、所有的S5PV210启动设备都可以从MMC通道2使用SD/MMC设备以第二启动方式启动。
C、OneNand启动时,Xm0CSn4/NFCSn2/ONANDXL_CSn0信号必须有效。BL1代码段起始处必须是BL1的校验数据。
D、Nand启动时,Xm0CSn2/NFCSn0信号必须有效。BL1代码段起始处必须是BL1的校验数据。
E、SD/MMC/eMMC启动时,MMC通道0分配给第一启动模式使用,通道2分配给第二启动模式使用。BL1代码段起始处必须是BL1的校验数据。
F、UART启动使用串口端口2
二、iROM启动流程
S5PV210启动过程分为BL0、BL1、BL2三个阶段,S5PV210内部有96Kb的IRAM和64Kb的IROM。S5PV210启动过程如下图:
第一步:iROM初始化,初始化系统时钟、特殊设备控制寄存器和启动设备
第二步:iROM启动代码加载BL1(bootloader)到iRAM,在安全启动模式下iROM对BL1进行整体校验。
第三步:执行BL1,BL1加载BL2(剩余的bootloader)到iRAM,BL1将会对BL2进行整体校验。
第四步:执行BL2,BL2初始化DRAM控制器,加载kernel到SDRAM
第五步:跳转到OS起始地址,进入系统
1、BL0启动阶段
在BL0阶段初始化的内容如下:
1、关闭看门狗
2、初始化icache
3、初始化栈(设置中断栈、SVC栈)
4、初始化堆
5、初始化块设备copy函数
6、初始化PLL和设置系统时钟
7、拷贝BL1到iram
8、校验BL1,如果校验失败,将从SD卡启动
9、检查是否是安全启动模式
10、跳转到BL1的地址
2、第一启动模式启动流程
安全启动模式(第一启动模式)的启动过程:
3、第二启动模式启动流程
第二启动模式的启动过程:
4、UART启动模式
S5PV210 iROM支持串口下载功能,串口下载一般通过发送校验位到DNW进行校验,不关心启动设备。对于串口下载来说不需要选择信号。为了避免串口超时错误,用户需要在开发板电源打开之前设置DNW配置,也就是当BL1代码被选中,下载进程启动时,iROM就应该被启动。
5、USB启动模式
S5PV210 iROM支持USB下载功能。如果串口超时发生,iROM会试图从USB模式启动。为了避免USB协商超时错误,用户必须预先用USB线连接好目标开发板和PC。如果USB连接好,用户就能通过USB线下载BL1镜像到开发板。
在UART、USB启动模式下BL1不需要头信息,BL1代码的基地址是0xD0020000。在其他启动模式下,BL1必须有头信息,BL1代码的基地址是0xD0020010。
三、iROM启动的其他细节
1、iROM内存分配
2、全局变量
如果用MMC设备启动,MMC卡的信息必须保存在特殊区域。
2、设备拷贝函数
S5PV210内部有一段用于启动设备的块拷贝函数的ROM代码,因此开发者不需要实现设备拷贝函数。这些内部函数能从存储设备中拷贝任何数据到SDRAM,用户在iROM启动过程完成后仍然可以使用这些函数。
2、启动设备启动扇区分配
SD/MMC/eSSD设备启动扇区分配
eMMC设备启动扇区分配
OneNAND/NAND设备启动扇区分配
如果从Nand启动,Nand ECC数据应该项如下设定:
对于8bit ECC来说,ECC数据大小是13字节
对于16bit ECC来说,ECC数据大小是26字节,但是对于每一种Nand flash,ECC的大小是不一样的,因此需要去查阅Nand flash的数据手册。
2、启动代码的头信息数据
BL1必须有头信息数据,头信息数据是用于通过iROM复制BL1到iRAM中使用,头信息数据有两种信息,一种是BL1的大小,一种是BL1数据校验。当加载BL1时,iROM检查位于头数据中的BL1的大小,拷贝BL1到iRAM。拷贝完BL1后,iROM计算拷贝的BL1的数据和,与位于BL1头数据信息中的校验和数据进行比较。如果成功,BL1启动,否则iROM将会试图从SD/MMC通道2端口的第二启动模式(4-bit SD/MMC)启动。计算数据校验和的代码如下:
for(count=0;count< dataLength;count+=1){buffer = (*(volatile u8*)(uBlAddr+count));checkSum = checkSum + buffer;}
Count:无符号整型dataLength:BL1的大小buffer:从BL1读取1字节数据的存储变量
Checksum:BL1的校验和
2、时钟设置
S5PV210只有24MHZ的外部晶体振荡器可用。
本博文翻译自:三星S5PV210官方S5PV210_iROM_ApplicationNote文档
嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析相关推荐
- 【安卓开发 】Android初级开发(二)Activity启动模式
Activity页面跳转在业务逻辑页面添加以下代码 //跳转到下一个activityIntent intent = new Intent(this,MainActivity2.class);start ...
- java web ssh启动运行程序_[javaweb开发SSH] myeclipse启动tomcat时的bug
以前用的是myeclipse10.0的版本,我也不知道以前设置了什么,比较正常.由于以前的myeclipse无法装svn,所以装了一个10.7当连接数据库正常时,自然是好的一旦连接数据库不正常了(我故 ...
- 嵌入式linux s5pv210,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅三 ...
- linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD
嵌入式Linux裸机开发(十五)--LCD 一.LCD简介LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TF ...
- lcd命令 linux,嵌入式Linux裸机开发(十五)——LCD
嵌入式Linux裸机开发(十五)--LCD 一.LCD简介 LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置T ...
- ok6410linux开发环境搭建,飞凌嵌入式知识汇021期:OK6410裸机程序之开始模板(Linux环境)...
手中有OK6410开发板,一直想试试通过Linux来做做裸机开发,在网络论坛上也搜过一些资料作参考,整理了一下并做了解释或改动,希望这些东西可以大家分享下. 裸机程序的构成 基本的裸机程序由启动代码和 ...
- 嵌入式Linux裸机开发(六)——S5PV210时钟系统
嵌入式Linux裸机开发(六)--S5PV210时钟系统 一.时钟系统简介 外设工作需要一定频率的时钟,这些时钟都由系统时钟提供.系统时钟一般由外部低频24MHZ晶体振荡器通过锁相环电路PLL倍频产生 ...
- 嵌入式linux备份flash,嵌入式Linux裸机开发(十一)——Nandflash
嵌入式Linux裸机开发(十一)--Nandflash 一.Nand Flash简介 NandFlash是Flash的一种,具有容量较大,改写速度快等优点,适用于大量数据的存储.NandFlash没有 ...
- linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信
嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...
最新文章
- MS:中山大学丁涛/吴忠道-肠道菌群调控血吸虫病传播媒介光滑双脐螺适生性的新机制...
- Python知识点8——文件与异常
- 腾讯云yum操作实现CentOS 7.6 64位Linux系统图形界面的安装和vnc的搭建
- 禁止mysql+root,禁止MySQL root远程访问
- Android Intent机制详解
- innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
- Spring-boot配置JedisShardInfo
- 将coco数据集格式转变成voc数据格式
- 购买域名以及申请证书
- 【迅速上手】Python 画图 —— 箱图与密度图
- Python 元组大全
- STM32F103的AD采样非线性问题
- 实用的外贸收款工具比较
- HDU - 3556 - Continued Fraction
- Mybatis 源码解析(六) Mybatis方言支持
- 微电子专业是做芯片的吗?芯片和什么专业有关?
- GarageBand 下载加速
- CH9121网络模块与阿里云PHP服务器通信,实现HTTP-GET/POST
- 实例讲解映像劫持的使用技巧——通过映像劫持实现Notepad2替换记事本
- java通过for循环遍历数组
热门文章
- php访问nfs目录,PHP NFS的实现代码
- php网站白页面_php页面空白怎么回事 php出现空白页的解决方法
- 微服务架构核心20讲 课程的学习笔记
- oracle查询表占用空,查询dba_tables 为啥有的表的表空间为空
- 什么?用@Async会内存溢出?看看你的线程池配置了没!
- 利用注解 + 反射消除重复代码(Java项目)
- 这些 IDEA 的优化设置赶紧安排起来,效率提升不是一点点!
- 【注意】关于Redis存在远程命令执行漏洞的安全公告
- 整合营销系统推荐乐云seo_做seo优化前需要考虑哪些
- python做logistic回归_用Python做Logistic回归