嵌入式linux开发 (二十四) 内存管理(6) 芯片及芯片启动后对内存的简单管理总结

之前分析了三个芯片,不同的微架构,不同的生产厂家,对内存管理做的努力
然后我又粗略分析了一个exynos4412的内存管理
芯片 stm32f407zgt6 s3c2440 i.mx6ull exynos4412(无详细分析)
架构 ARMv7 ARMv5t ARMv7 ARMv7
微架构 cortex-M4 ARM920T cortex-A7 cortex-A9
厂家 意法半导体 三星 飞思卡尔(被NXP收购) 三星

相同部分

- 都有boot配置,可以配置从不同方式启动
- 都有flash用来存储代码.
- 都有sram,可以用来在boot时存储执行代码. // s3c2440 boot模式中的从nor boot 用不到
- 都会执行到用户代码.

不同部分

- boot配置不同
	stm32 可以 从 主flash sram1  系统flash 启动
	s3c2440 可以从 nand nor 启动
	i.mx6ull 设置了两级启动,一级启动 从 FUSE  串行下载 从bootrom启动(包含二级启动,从QSPI WEIM Serial-ROM SD eMMC NAND 中的一种 加载代码到ddr)
	exynos4412 设置了两级启动,一级启动从 iROM 启动(包含二级启动,从General NAND flash memory ,SD/MMC memory card ,eMMC memory ,USB device) // USB booting is provided for system debugging and flash reprogramming, not for normal booting
- 存储用户代码的flash不同
	stm32 用的是芯片自带的主flash(1MB)
	s3c2440 用的是 nand(256MB) 或者 nor(128MB)
	i.mx6ull 用的是 QSPI WEIM Serial-ROM SD eMMC NAND 中的一种
	exynos4412 用的是 General NAND flash memory ,SD/MMC memory card ,eMMC memory中的一种
- sram大小不同
	stm32  128KB(SRAM1 112 KB + SRAM2 16KB)
	s3c2440 4KB
	i.mx6ull 128KB
	exynos4412 256KB
- 执行到用户代码的过程不同
	stm32 主flash映射到0x00000000,并从 0x00000000 执行代码
	s3c2440 如果从nor启动,XIP(nor本来就是0地址);如果从nand ,则 将nand前4KB映射(或者拷贝)0地址.0x00000000 执行代码
	i.mx6ull 从bootrom启动,加载二级启动设备中的数据初始化ddr,并将用户代码(bin文件)搬移到指定位置(sram或者ddr),然后从 指定位置 执行代码
	exynos 从 iROM启动,做一系列初始化,加载二级启动设备的数据(256KB)进iRAM,并做校验,然后执行该256KB代码
- 芯片官方做的封装程度不一样 (Lx , x越大,封的越多)
	stm32 封装程度L4,(做了内存分段,连C库都初始化好了),用户代码需要做
		做功能部分
	s3c2440 封装程度L1,用户代码需要做
		1.关看门狗
		2.初始化ddr
		3.处理在在ddr上执行代码的问题
		4.内存分段
		5.初始化C库
		6.做功能部分
	i.mx6ull 封装程度L3,用户需要
		1.内存分段
		2.初始化C库
		3.做功能部分
	exynos 封装程度L2,用户需要写BL1和BL2
		1.初始化ddr
		2.处理在在ddr上执行代码的问题 // 将代码拷贝到ddr
		3.内存分段
		4.初始化C库
		5.做封装部分

  • 根据芯片封装年份看封装程度
芯片 年份 厂商 封装程度
stm32f407zgt6 2012 意法半导体 L4
i.mx6ull 2017 飞思卡尔 L3
exynos4412 2012 三星 L2
s3c2440 2004 三星 L1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章