在基于Linux的AM335x軟件開發(fā)流程中,第一步就是U-Boot/SPL(SecondProgram Loader)的移植。在移植中遇到問題比較常見,而U-Boot/SPL的調(diào)試手段比較簡陋,不便于迅速找到問題。利用仿真器可以單步調(diào)試的特點(diǎn),就可以迅速定位到出問題的代碼所在位置,加速移植的調(diào)試過程。本文主要介紹如何用CCS+emulator調(diào)試基于AM335x的U-Boot/SPL。
1. AM335x Linux啟動過程以及U-Boot/SPL調(diào)試代碼的準(zhǔn)備
1.1 [url=]AM335x Linux[/url]的啟動過程
AM335x Linux的啟動主要包括ROM,SPL, U-Boot 和kernel四個(gè)啟動步驟:
A. ROM code
ROM code是固化在芯片內(nèi)部的代碼,當(dāng)上電時(shí)序正確,而且晶振等芯片啟動所需的條件都具備時(shí),AM335x會從ROM code開始運(yùn)行。
ROM code首先會讀取sys_boot引腳上的配置,以確定存放SPL的存儲器,或者可以獲取SPL的外設(shè)。
具體可以參考AM335x technical reference manual中的第26章 Initialization。
ROM code會從相應(yīng)的地方讀取/獲取SPL,并運(yùn)行SPL。
B. SPL
SPL 和U-Boot 是bootloader的兩個(gè)階段。這里分為兩個(gè)階段的原因是, ROM code中不會配置DDR,時(shí)鐘等最小系統(tǒng),所以ROM code只能把bootloader加載到片上SRAM中,而片上SRAM對成本影響很大,所以通常很小,例如在AM335x上只有64K,不足夠放下整個(gè)U-Boot,所以將U-Boot分成兩部分,SPL和U-Boot。
SPL主要的職責(zé)就是初始化DDR,時(shí)鐘等最小系統(tǒng),以讀取U-Boot,并加載到DDR中。具體來看,SPL 由ROM code加載到片上SRAM的起始位置,也就是0x402F0400。SPL會進(jìn)一步對芯片進(jìn)行配置,主要包括以下幾個(gè)方面以完成其主要職責(zé):
a. 配置ARM core。 主要包括對中斷向量表,cache,MMU等的配置。
b. 配置時(shí)鐘系統(tǒng),主要是PLL等。這個(gè)是配置各個(gè)功能模塊的基礎(chǔ)。 大功率電感廠家 |大電流電感工廠