一、S5PV210内存分布以及上电启动分析
1.内存分布
各个区域分析
- 0x0000_0000 - 0x1FFF_FFFF : 这部分的低字节映射片内的IROM和IRAM;
- 0x2000_0000 - 0x3FFF_FFFF : 为外部的真正的运行内存所准备的空间,内存区域0的起始地址因为程序要放在这里面执行
- 0x4000_0000 - 0x7FFF_FFFF : 同上;
- 0x8000_0000 - 0xAFFF_FFFF : 六个Bank每个Bank128M,外设访问空间,用于连接外设模块;
- 0xB000_0000 - 0xBFFF_FFFF : OneNand/Nand控制器;
- 0xC000_0000 - 0xCFFF_FFFF : 给一些特定的片外内存预留空间;
- 0xD000_0000 - 0xDFFF_FFFF : 部分映射片内的IROM和IRAM,部分为DMZROM;
- 0xE000_0000 - 0xFFFF_FFFF : 存储区映射寄存器空间,s5pv210内部的许多片内外设相关的状态控制器(比如:GPIO Interrupt Control Registers);
2.启动分析
- 第一步:开机先运行BL0中的代码,判断启动方式(此处假设是SD卡启动)并且对系统进行一些初始化,并且将SD卡中的前16KB(BL1代码)的程序加载到片内IRAM中运行起来
- 第二步:BL1代码执行完成一些初始化,再负责将BL2程序搬移到IRAM中运行起来,BL2在进行一些初始化包括时钟和初始化SDRAM等。
- 第三步:复制OS到SDRAM。
- 第四步:从BL2中跳转到SDRAM执行,启动过程完成。
2.1 IROM中程序的作用
BL0程序运行在片内IROM中,属于出场设置,用户无法修改,上电后CPU会直接从IROM上的BLO的代码开始执行。除了开机启动,还有许多其他的复位场景会涉及这段小程序。
- 第一步:关闭看门狗;
- 第二步:初始化iCache(指令缓存);
- 第三步:初始化栈区域;
- 第四步:初始化堆区域;
- 第五步:初始化设备拷贝功能;
- 第六步:初始化PLL并设置系统时钟;
- 第七步:检查OM PIN引进选择启动方式,决定从那个设备去拷贝BL1程序;
- 第八步:检查BL1中的checksum(校验头),如果checksum失败,就尝试以第二种启动方式启动;
- 第九步:检测是不是安全模式启动;
- 第十步:跳转到BL1的起始地址去执行程序(BL0给PC赋值为0xD0020010);
IROM程序运行完之后的内存图
结尾:
初学S5PV210将其分段整理成笔记供自己参考也供与大家学习,如有错误请大佬们直言指出,如果感觉有用那就点个赞留个言,谢谢观众老爷们的赏脸。
若想获得上述内容的PDF版本移步到GitHub下载。
地址: https://github.com/QianquanChina/Study-Notes
-----缱绻