ARM+Linux嵌入式系統(tǒng)的BootLoader設(shè)計
把第二階段Stage2拷貝到RAM地址的最頂大小為1 MB的開始空間,RAM的起始地址為0x30000000。代碼如下所示:
2.3 堆棧指針的設(shè)置
用戶使用哪些中斷決定了系統(tǒng)堆棧的初始化,以及系統(tǒng)需要處理的哪些錯誤類型。一般情況下,堆棧設(shè)置是必須,而且是由管理者自己設(shè)置的。如果需要使用IRQ中斷,那么IRQ堆棧的設(shè)置也是必須的,下面是IRQ堆棧的設(shè)置:
3 Stage2的設(shè)計
3.1 可執(zhí)行映像Stage2的入口
由于Glibc庫支持的函數(shù)不能用于編譯和鏈接Boot Loader這樣用C語言編寫的程序,因此把main()函數(shù)的起始地址作為第二階段的入口點是最直接的想法??梢杂脜R編編寫一段Trampoline小程序,用CPU跳轉(zhuǎn)指令跳到main()函數(shù)去執(zhí)行,當(dāng)函數(shù)返回時會再次回到Trampoline程序,代碼如下:
程序順利時就不會再回到開始的Trampoline程序,不然就會回到最后的語句,系統(tǒng)就會重新啟動。
3.2 內(nèi)存影射
一般S3C2410上配置的SDRSAM大小為64 MB,該SDRAM的物理地址范圍是Ox30000000~Ox33FFFFFF(屬于Bank 6)。由Section的大小可知,該物理空間可被分成64個物理段。因為ARM體系結(jié)構(gòu)中數(shù)據(jù)緩沖必須通過MMU開啟,因此Boot Loader效率不是很高,但是MMU可以通過平板映射(虛擬地址和物理地址相同)方式被開啟,這樣使用內(nèi)存空間Dcache,從而使Boot Loader的運行速度得到有效的提高。映射關(guān)系代碼如下:
評論