mini2440啓動代碼分析之第三篇(IMPORT)

轉自:http://blog.chinaunix.net/uid-26435987-id-3074117.html

接上篇,代碼如下:

IMPORT  |Image$$RO$$Base|    ; Base of ROM code; ROM code(也就是代碼)的開始地址 

IMPORT  |Image$$RO$$Limit|     ; ROM code的結束地址(=ROM data的開始地址

IMPORT  |Image$$RW$$Base|     ; Base of RAM to initialise; RAM 的起始地址 

IMPORT  |Image$$ZI$$Base|       ; Base and limit of area       0初始化的起始地址 

IMPORT  |Image$$ZI$$Limit|       ; to zero initialise               0初始化的結束地址 

; 在這裏用IMPORT僞指令(c語言的extren關鍵字一樣)引入|Image$$RO$$Base|, 

Image$$RO$$Limit|,|Image$$RW$$Base|, |Image$$ZI$$Base|,|Image$$ZI$$Limit|等比較古怪的變量編譯器生成的。 

;其中RO, RW, ZI這三個段都保存在Flash(加載時),但RWZIFlash中的地址肯定不是程序運行時變量所存儲的位置,因此我們的程序在初始化時應該把Flash中的RWZI拷貝到RAM的對應位置。這些變量是通過ADS的工程設置裏面設定的RO BaseRW Base設定的最終由編譯腳本和連接程序導入程序實際上RWZIFlash中的位置就緊接着RO存儲。我們知道Image$$RO$$BaseImage$$RO$$Limit,那麼Image$$RO$$Limit就是RW ROM data)的開始。 

IMPORT   MMU_SetAsyncBusMode 

IMPORT   MMU_SetFastBusMode 

;在這裏用IMPORT僞指令(c語言的extren一樣)引入外部變量MMU的快速總線模式和異步總線模式兩個變量. 

IMPORT  Main     ; The main entry of mon program 

;在這裏引入一些在其它文件中實現在函數,包括爲我們所熟知的main函數

 IMPORT  RdNF2SDRAM   ; Copy Image from Nand Flash to SDRAM

;在這裏引入一些在其他文件中實現的函數,包括複製代碼到SDRAM

注意最後一句我想強調的是:

NAND啓動時當裏面程序小於4K時,不用寫什麼搬移程序,啓動後S3C2440會通過硬件機制將NAND的小於4K的內容,拷貝到其零地址處自帶的BootSRAM,然後再運行裏面的程序(從0地址處)   

                        當裏面程序大於4K時,此時系統只將NAND的前4K內容硬件機制方式的搬移到BootSRAM

中,還有部分程序保存在NAND中,而NAND是無法運行程序的,需要將所有程序搬移到SDRAM並在其中運行,所以程序的啓動代碼要包含這塊有關程序拷貝的代碼,並在所有程序完成拷貝後在SDRAM中運行。更簡單的說,在大於4K條件下,NAND有兩個過程,一過程是將NAND前4K內容搬移到BootSRAM中,目的是使系統能夠啓動(硬件機制,無須程序員干預);二過程是使得程序所有程序搬運到SDRAM中,目的是使程序在SDRAM中運行(需要程序員編程實現)。

NOR啓動時,沒有額外要考慮的問題,因爲NOR特點是芯片內執行,系統上電或復位,0地址處的啓動代碼就會被執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章