1. 程式人生 > >S3C2440程式碼重定位分析

S3C2440程式碼重定位分析

一、NAND啟動

此處NAND大小為256M,當從NAND啟動時,0地址為片內SRAM,NOR不可見。由於NAND不支援XIP,所以在啟動時,硬體自動複製NAND的前4K內容到片內4K的SRAM,若bin檔案小於4K,則可以直接在SRAM上執行,若bin檔案大於4K,片內SRAM已經滿足不了需求,我們需要做的是利用這前4K的程式碼,完成將所有程式碼重定位至SDRAM(位於BANK6地址0X30000000,大小64M),然後CPU在SDRAM上執行程式碼。

二、NOR啟動

此處的NOR大小為2M,當從NOR啟動時,0地址為NOR,片內SRAM的地址為0X40000000,由於NOR支援XIP,所以低於2M的bin檔案可以直接在NOR上執行,當bin檔案超過2M時,需要將程式碼重定位至SDRAM中執行,通常所做的是不論bin檔案多大,都將所有程式碼重定位至SDRAM 。

注意點:由於NAND和NOR重定位時拷貝程式碼至SDRAM中的方法不同,所以要判斷當前是NOR還是NAND啟動。因為NOR不能直接寫,所以可以先向將0地址資料讀出,再向0地址寫一個數據再讀出與之前的資料比較,相同則為NOR啟動,否則為NAND啟動。