Preloader bin size過大編譯報錯怎麼辦,preloadersize
由於需要相容更多的emcp,mcp,discrete dram,以及由於新的需求修改preloader code都可能會增大preloader bin的size,這時就可能會在build preloader階段發生build error,log中會報類似以下的錯誤資訊:===================== Building Fail =========================== IMG ROM Size: 101340 bytes > 100828 bytes!! WARNING: Reduce your code size first then compile again!! ========================================================= 以上這段error log是mediatek/platform//preloader/check_size.sh這個script報出來的,指令碼中會比較build出的preloader bin和PL_MAX_ROM_SIZE的value,如果build出的preloader bin size超過這個值,就會報錯。你會發現這個值一般都會設定的很小,不會超過128KB,也許你很奇怪為什麼要限制的這麼小,請繼續看[SOLUTION]部分的說明。 PL_MAX_ROM_SIZE的value的值之所以設定的比較小,是因為開機時由於external dram還未被初始化,BROM會把preloader bin整體從flash(emmc or nand)load到chip內部的shared sram中。又由於chip內部的shared sram的size一般都會很小,典型的size是128KB(MT6572/71/82/92等),MT6595是256KB,因此preloader bin的size不能超過internal shared sram的size。 同時,還需要扣除Header, GFH 以及rum time BSS段,stack等佔用的ram空間,留給真正preloader bin的空間就肯定會小於internal shared sram size。 因此當發生preloader bin size過大時,請不要自己增大PL_MAX_ROM_SIZE的value,這樣做雖然可以build通過,但是可能會發生無法開機等奇怪的問題,且不容易debug。 對於JB版本,目前唯一的解決方案就是嚴格控制相容的emcp,mcp,discrete dram個數,同時盡量避免在preloader中添加新的feature,如果要客制化新feature的話,建議移到lk去實做。相關的FAQ請參考"[FAQ07839]【Storage】eMMC和NAND Flash的相容個數" 對於KK版本,由於Preloader新增了對LPDDR3的支援,因此default可能無法配置出10顆相容的mcp/emcp/discrete dram,需要參考以下的說明修改code,減少debug code佔用的size。* MT6589/72/71平台,請修改alps\mediatek\platform\$PLATFORM\preloader\src\drivers\inc\mt_pmic_wrap_init.h檔案* MT6582/92平台,請修改alps\mediatek\platform\$PLATFORM\preloader\src\drivers\inc\pmic_wrap_init.h檔案 具體修改code的方法是一樣的:(1)#define PMIC_WRAP_DEBUG //注釋掉這一行(2)#define PWRAPERR(fmt, arg...) printf(PWRAPTAG "ERROR,line=%d " fmt, __LINE__, ##arg)修改為:#define PWRAPERR(fmt, arg...) printf(PWRAPTAG "ERROR,line=%d ", __LINE__) 另外JB3.MP MT6572版本的check_size.sh指令碼存在bug,size檢查機制會失效,如果您發現在這個指令碼中PL_MAX_ROM_SIZE定義的方法如下,那麼就說明您沒有打上patch,需要提e-service申請ALPS00869854這筆patch。 # Keep ROM size smaller than 90KB PL_MAX_ROM_SIZE=(95*1024)