嵌入式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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章