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