新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Mpc823e的bootloader分析和實現

        基于Mpc823e的bootloader分析和實現

        作者: 時間:2012-06-01 來源:網絡 收藏

        0 引言

        在嵌入式系統中,當cpu啟動起來后,首先會在預先設置的地址上執行,用來加載和啟動系統。通過,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。與硬件緊密結合,不同處理芯片體系,不同主板設計,對應不同的引導程序。本系統采用ppcboot作為引導程序。ppcboot的功能強大,而且代碼公開。一般來說,它可以分為兩部分:與硬件相關的代碼,與硬件無關的代碼。在設計時,可以先從其官方網站下載完整的代碼,然后根據自己系統的特點,對與硬件相關代碼部分進行修改,最后進行編譯,燒入 Flash。接下來,將對ppcboot的工作流程和具體的修改過程進行討論

        1 ppcboot工作流程

        作為ppc體系的引導程序ppcboot上電后,將完成初始化硬件設備,建立內存映射, 啟動系統內核三個任務。

        初始化硬件設備:

        系統上電復位后,CPU首先從Flash 的0x100處執行第一條指令。該指令跳轉到具體地址后,開始執行部分初始化和真正初始化前的準備工作:屏蔽所有的中斷,設置CPU的速度和時鐘頻率,禁止cache、禁止地址轉換等等。

        在這個階段中,執行空間始終在Flash,功能通常都用匯編語言來實現。之后,系統開始建立內存映射。

        建立內存映射

        (1)設置系統的內存控制器的功能寄存器以及各內存庫控制寄存器等,使CPU能夠正常運行起來并執行C語言程序,并且為下一步加載引導程序,準備RAM空間。

        (2)引導程序重新定位執行空間,ppcboot代碼從flash拷貝到內存,開始在內存中執行。

        (3)再次初始化部分硬件設備,并檢測系統內存映射,知道 CPU 預留的全部 RAM 地址空間中的哪些被真正映射到 RAM 地址單元,哪些是處于無狀態的。經過這個階段后,系統建立了內存映射圖(見圖1),并開始在內存里執行程序,能夠執行C語言程序。之后,系統進入啟動操作系統內核階段。

        啟動操作系統內核

        (1)把內核映像和根文件系統映像從Flash上讀到RAM中。

        (2) 為內核設置啟動參數。以標記列表的形式來傳遞。

        (3)解壓內核,初始化串口,使解壓后內核獲得CPU的控制權,結束ppcboot的任務。

        2 基于MPC823e的ppcboot的具體編寫

        在上面提過,由于ppcboot的代碼硬件無關部分是通用的,不需要修改。而硬件相關的代碼部分,與硬件緊密相關,所以需要針對自己具體的硬件進行修改,主要是cpu部分與主板部分的代碼。

        2.1 ppcboot中cpu部分的開發

        ppcboot的一個任務是初始化CPU內部寄存器,包括:定義中斷向量表、數據和指令cache的設置、內存管理單元MMU的設置、系統接口單元SIU設置、內存控制器和UPM表的設置、時鐘和復位寄存器設置、外部總線接口設置、與編譯器相關的堆棧設置等。

        步驟1: 禁止 中斷 -> 禁止cache -> 禁止MMU

        啟動過程中無法處理中斷,所以必須關閉中斷;另外,因內存管理、cache尚未設置,所以應先全部禁止,待設置完畢再打開。

        步驟2: 初始化內存 init_memc

        MPC823e提供了強大的內存接口控制單元,包括一個通用內存接口單元GPCM和兩個用戶可編程內存接口單元UPMA/UPMB。還提供了8個片選信號線與8片獨立的內存接口。

        編寫ppcboot時,需要研究SDRAM芯片的時序圖,構造出MPC823e特有的64個時序字,填入MPC823e內部相應的寄存器中。以后,每當發出內存訪問的指令時,硬件就能夠根據設置好的64個時序字,產生正確的讀寫時序。而且要針對具體的設計,編寫片選內存的寄存器BRx和ORx來設置其屬性,包括定義內存片基地址、地址掩碼、讀寫屬性、總線寬度(8位、16位、32位)、控制單元(使用GPCM或UPM)等。如本系統中,使用了CS0 控制16位的Flash存儲器、CS1控制32位的sdram,對CS1進行設置時應設為基地址0x00000000,32位可讀寫,使用UPMA。

        步驟3:初始化系統接口單元init_SIU -> 初始化調試寄存器der -> 初始化時鐘 init_clk

        系統接口單元主要包含對MPC823e復用引腳的設置寄存器、調試寄存器(該寄存器可用來設置CPU在各種不同的意外情況下是否進入調試狀態)。

        初始化時鐘主要是對CPU主頻的設置。MPC823e有一個倍頻率達數千倍的內部倍頻器,本系統中,采用了5MHz的晶振,經過10倍頻后穩定運行在50MHz頻率上。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 达尔| 泽库县| 汾阳市| 元江| 阳山县| 乌鲁木齐县| 宁蒗| 永顺县| 都安| 常山县| 新密市| 株洲县| 垫江县| 江门市| 古浪县| 介休市| 门源| 尉犁县| 元谋县| 盐亭县| 定安县| 济源市| 凤阳县| 山西省| 安西县| 高州市| 高淳县| 镇沅| 恩施市| 灌南县| 陆良县| 广饶县| 北辰区| 进贤县| 泸西县| 大名县| 龙口市| 虞城县| 潮安县| 房山区| 长岭县|