娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

tiny210裸機第1課(啟動原理)

發布者:EnchantedBreeze最新更新時間:2025-01-07 來源: cnblogs關鍵字:tiny210  裸機  啟動原理 手機看文章 掃描二維碼
隨時隨地手機看文章

軟硬件環境

宿主機系統:ubuntu

板子芯片:S5PV210(Contex-A8),512M DDR2,512M SLC Nand

交叉編譯器:arm-linux-gcc-4.5.1

手冊:S5PV210的S5PV210_UM_REV1.1(老版本居然連內存地址空間都不同)

1.寫在前面的話

       雖然現在主要做應用層軟件,還是想學一下底層的東東,弄清楚cpu的啟動原理。內容多為摘抄《Linux平臺下Mini210S裸機程序開發指南》--友善之臂和他人博客,作為日后翻閱的筆記之用。

2.S5PV210介紹

S5PV210的datasheet中有對它的基本架構的一些介紹,里面有這么一幅圖

        

         從這張圖中我們可以看出,對于S5PV210來說,采用ContextA8架構,具有32KB的一級緩存(Cache)和512K的二級緩存。

S5PV210有一個96K的iRam和一個64K的iRom。iRom是拿來存放ContextA8的啟動BL0的,在出廠的時候由生產商固化在里面,iRam是ContextA8的內部RAM,這個才是真正意義上的內存,BL0會把BL1拷貝到iRam中運行。S5PV210支持存儲接口包括SRAM/ROM, OneNAND, SLC/MLC NAND, LPDDR1/LPDDR2/DDR2。

3.S5PV210內存映射 

       

3. S5PV210啟動流程

參考S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf(以下簡稱SIAP)以及S5PV210的S5PV210_UM_REV1.1.pdf這個版本的datasheet。

3.1板子是怎么啟動起來的?

首先我們看下面這一表(見SIAP p22頁):

從原文可知道OM[5:0] 引腳決定了SP5V210的啟動流程,可直接接VDD或GND來進行模式切換。OM[5]則需要多接一個100k的的下拉電阻

從友善之臂的原理圖中可查到SD啟動時,OM[5:0]=001100b,跟原文相符。

接著我們來看看SIAN里面的一個圖:

           

下面還有個注:BL1 / BL2 : It can be variable size copied from boot device to internal SRAM area. 
                        BL1 max. size is 16KB. BL2 max. size is 80KB.       

    在這個圖中我們看以看出我們的S5PV210支持Nor Flash啟動,eSSD啟動,MMC啟動,OneNand啟動和Nand啟動。B1最大為16KB,BL2最大為80KB。這里的啟動代碼分為三個部分,第一個就是BL0,第二個就是BL1,第三個就是BL2,這里的BL就是Bootloader的意思。這些標著①②③的就是三星給我們的一個啟動流程建議步驟,為啥說是建議的步驟呢?因為我們的啟動有時候不一定按照它的建議來,不過流程是不變的,只是代碼存放的地方要做一些調整。下面為參考解釋:

(1)BL0:是指S5PV210的iROM中固化的啟動代碼
        作用:初始化系統時鐘,設置看門狗,初始化堆和棧,加載BL1

(2)BL1:是在iRAM自動從外擴存儲器(nand/sd/usb)中拷貝的uboot.bin二進制文件的頭最大16K代碼
        作用:初始化RAM,關閉Cache,設置棧,加載BL2

(3)BL2:是指在代碼重定向后在內存中執行的uboot的完整代碼
        作用:初始化其它外設,加載OS內核

(4)三者之間的關系:(Interal ROM固化代碼)BL0將BL1(bootloader的前16KB--BL1)加載到iRAM;BL1然后在iRAM中運行將BL2(剩下的bootloader)加載到SDRAM;BL2加載內核,把OS在SDRAM中運行起來,最終OS是運行在SDRAM(內存)中的。

下圖為SRAM的內存地址映射。

            

        因為我使用的是從SDMMC啟動,所以我們會使用到CopySDMMCtoMem這個函數,這個函數被定義在0xD0037F98這個位置.

    

這個函數的原型是:

SD/MMC Copy Function Address

External source clock parameter is used to fit EPLL source clock at 20MHz.

/**

* This Function copy MMC(MoviNAND/iNand) Card Data to memory.

* Always use EPLL source clock.

* This function works at 20Mhz.

* @param u32 StartBlkAddress : Source card(MoviNAND/iNand MMC)) Address.(It must block address.)

* @param u16 blockSize : Number of blocks to copy.

* @param u32* memoryPtr : Buffer to copy from.

* @param bool with_init : determined card initialization.

* @return bool(u8) - Success or failure.

*/

#define CopySDMMCtoMem(z,a,b,c,e)(((bool(*)(int, unsigned int, unsigned short, unsigned int*, bool))(*((unsigned

int *)0xD0037F98)))(z,a,b,c,e))


關鍵字:tiny210  裸機  啟動原理 引用地址:tiny210裸機第1課(啟動原理)

上一篇:喜羊羊系列之【設備-驅動 動態載入進內核】
下一篇:linux驅動(九)platform驅動模型詳解,以及基于platform驅動模型的led驅動

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 进贤县| 顺昌县| 诸暨市| 菏泽市| 上犹县| 水富县| 井冈山市| 惠东县| 福海县| 安阳县| 宜良县| 沽源县| 乐清市| 东丰县| 濮阳市| 定兴县| 墨江| 双江| 双鸭山市| 临城县| 襄垣县| 伊宁县| 禹州市| 赤峰市| 大厂| 申扎县| 德保县| 南部县| 林州市| 乌拉特后旗| 江安县| 古田县| 正宁县| 衡山县| 青浦区| 台东县| 潼南县| 丹东市| 湟源县| 扬中市| 渭南市|