新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM+Linux嵌入式系統的BootLoader設計

        ARM+Linux嵌入式系統的BootLoader設計

        作者: 時間:2011-06-27 來源:網絡 收藏
        2.2 第二階段拷貝到RAM

        本文引用地址:http://www.104case.com/article/150562.htm

          把第二階段Stage2拷貝到RAM地址的最頂大小為1 MB的開始空間,RAM的起始地址為0x30000000。代碼如下所示:

          

        程序

          2.3 堆棧指針的設置

          用戶使用哪些中斷決定了堆棧的初始化,以及需要處理的哪些錯誤類型。一般情況下,堆棧設置是必須,而且是由管理者自己設置的。如果需要使用IRQ中斷,那么IRQ堆棧的設置也是必須的,下面是IRQ堆棧的設置:

          

        程序

          3 Stage2的

          3.1 可執行映像Stage2的入口

          由于Glibc庫支持的函數不能用于編譯和鏈接Boot Loader這樣用C語言編寫的程序,因此把main()函數的起始地址作為第二階段的入口點是最直接的想法。可以用匯編編寫一段Trampoline小程序,用CPU跳轉指令跳到main()函數去執行,當函數返回時會再次回到Trampoline程序,代碼如下:

          

        程序

          程序順利時就不會再回到開始的Trampoline程序,不然就會回到最后的語句,就會重新啟動。

          3.2 內存影射

          一般S3C2410上配置的SDRSAM大小為64 MB,該SDRAM的物理地址范圍是Ox30000000~Ox33FFFFFF(屬于Bank 6)。由Section的大小可知,該物理空間可被分成64個物理段。因為體系結構中數據緩沖必須通過MMU開啟,因此Boot Loader效率不是很高,但是MMU可以通過平板映射(虛擬地址和物理地址相同)方式被開啟,這樣使用內存空間Dcache,從而使Boot Loader的運行速度得到有效的提高。映射關系代碼如下:

          

        程序 linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宁乡县| 东方市| 石楼县| 花垣县| 崇州市| 万载县| 涞水县| 鹰潭市| 宾阳县| 容城县| 泗洪县| 台北县| 武邑县| 阜阳市| 金溪县| 奉化市| 四平市| 军事| 夏河县| 资阳市| 高要市| 鲁山县| 襄汾县| 泸州市| 义乌市| 合阳县| 柳州市| 玉田县| 泸水县| 永康市| 巴东县| 石景山区| 甘泉县| 铁岭市| 黄梅县| 三亚市| 九龙县| 正宁县| 南木林县| 桃园县| 上虞市|