国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

PPCBoot在MPC8250上的移植方法

發布時間:2010-11-15 12:25    發布者:eetech
關鍵詞: MPC8250 , PPCBoot , 移植
1 引言

Boodoader(引導加載程序)是CPU復位后和進入操作系統之前執行的一段代碼,主要用于完成由硬件啟動到操作系統啟動的過渡,為操作系統提供基本的運行環境,如初始化CPU、堆棧、存儲器系統等。Bootloader代碼與CPU的內核結構、具體型號等因素有關,其功能類似于通用PC的BOIS程序。除了依賴CPU的體系結構外,Bootloader實際上還依賴于具體的嵌入式板級設備的配置。也就是說,對于二塊不同的嵌入式板,即使它們使用相同的CPU構建,要想讓運行在其中一塊板上的Bootloader程序也能運行在另一塊板上,通常也都需要修改Boofloader的源程序。因此,在嵌入式系統的開發中不可能有通用的Bootloader,開發時用戶要根據具體的系統設計要求進行移植。

從嵌入式系統的實際開發角度講,嵌入式操作系統的引導、配置甚至應用程序的運行狀況都與Bootloader有一定的關聯,可以說,掌握Bootloader移植是順利進行嵌入式系統開發的重要利器。在嵌入式Linux系統中,PPCBoot是功能強大的Boot-loader,它支持多種CPU體系結構,但相對也比較復雜。

本文以MPC8250微處理器和嵌入式Linux為背景,針對性的提供了PPCBOOt在開發板上的移植方法,可以應用在基于MPC82xx系列處理器的嵌入式Linux系統應用開發中。

2 PPCBoot簡介

PPCBoot是德國DENX小組開發的用于多種嵌入式CPU的Bootloader引導程序,主要由德國的工程師Wolfgang Denk和Intemet上的一群自由開發人員對其進行維護和開發。支持PowerPC、ARMMIPS、m68K等多種處理器平臺,易于裁剪和調試。

PPCBoot遵循GPL(通用公共許可)公約,完全開放源代碼。PPCBoot源代碼可以在sourceforge網站的社區服務器中獲得,它的項目主頁是http://sourceforge. net/projects/ppcboot,也可以從DENX的網站htrp://www.denx.de下載。筆者使用的版本是PPCBoot-2.0.0。

PPCBoot的主要特點如表1所列。






3 PPCBoot的運行流程
當MPC8250上電或者施加復位信號時,CPU通過讀取數據總線D[0:3l]上的值或根據內部的缺省常數D[0:31]=0x00000000,確定它的狀態。如果CPU在讀取總線值時,RSTCONF#滯表示低電平有效,以下類同)為低電平,則硬復位配置字(HRCW)從總線上讀取,若RSTCONF#為高電平,則HRCW選用內部的默認值。

上電后,啟動存儲控制器CSO#(對應于Flash的片選信號)有效,選中Flash,CPU地址線上輸出硬件復位中斷向量對應的地址0x00000100,開始讀第1條指令,在PPCBoot中,這條指令對應于/ppcboot/cpu/mpc8260/start.S中的_start:標號處。下面介紹具體的啟動過程。

(1)運行start.S(/ppcboot/cpu/mpc8260/start.S)從一start:標號處執行。在完成CPU本身基本的初始化后,主要是初始化CPU內部寄存器的一些狀態,主要設置IMMR、ICTRL、D-cache、I-cache等。從in_flash:處執行,設置C語言工作環境,再調轉到代碼bl cpu_init_f(第2步)和bl board_init_f(第3步)。

(2)CPU的底層初始化(/ppcboot/cpu/mpc8260/epu_init.C)從start.S中跳轉到函數cpu_init_f(volatileimmap_t*immr)處,進行CPU的底層初始化,主要設置了watchdog、SIUMCR寄存器、時基(timebase)寄存器、PIT(周期中斷寄存器)、鎖相環、系統定時器、存儲控制器和CPM等。

(3)板上的第1次初始化(/ppcboot/lib_ppc/board.c)完成第2步后,返回地址放人LR寄存器中,再從start.S中跳轉到函數board_init_f(ulong bootflag)處,該函數實現板上的第1次初始化,完成SMC初始化和一些硬件測試。尤其是RAM初始化,并分配內存空間,保存板子的信息,準備好在RAM中重定向代碼。然后調用relocate_code函數,將PPCBoot移到RAM中運行。

(4)搬運代碼到內存中(/ppeboot/cpu/mpc8260/8tart.s)
從函數board_init_f跳到/ppcboot/cpu/mpc8260/start.S中的relocate_code()函數處,然后將代碼搬至SDRAM工作,調整GOT表,做一些重定位后開始在RAM中運行代碼。

(5)板上的第2次初始化(/ppcboot/lib_ppc/board.C)在relocate_code()函數后將跳轉到board_init_r()函數處執行第2次初始化,主要完成一些數據結構、高端模塊及系統設備的相關初始化。

(6)命令的解析與執行(/ppcboot/commom/main.C)在進行初始化后,PPCBoot會執行函數board_init_r()中的main_loop()函數循環,即監控程序。PPCBoot的監控程序會根據用戶從控制臺的輸入完成預先設定的工作。該函數在/ppebooffeommom/main.c中。在函數main_loop()會調用/ppeboot/com-mom/main.C中的run_command()函數完成命令的解析,并轉去執行相應的處理函數。

4 PPCBoot源代碼的修改和編譯
要將PPCBoot移植到新的開發板上,應該根據具體的系統設計要求,按照系統硬件配置修改PPC-Boot的源代碼。

移植主要包括2個層面的移植,第1層是針對CPU的移植,PPCBoot支持的CPU類型在目錄/cpu中,MPC8250對應在/cpu/mpe8260目錄;第2層是針對具體board的移植,這主要根據開發者自己的具體設計修改代碼。為了減少工作量,可以從PPC-Boot支持的demo板選擇1個和自己的開發板硬件相似的板子作為模板,這里,筆者選擇MPC8260ADS板作為參考板,直接修改與該板上相關的源代碼文件。

4.1 開發板硬件
在修改PPCBoot源代碼之前,要了解開發板的硬件配置情況,根據硬件配置對源代碼中的配置值做相應的修改,表2列舉出板子的硬件基本信息。另外,MPC8250開發板的外圍設備接口主要有10/100M自適應網卡接口、RS232串口、PCI接口和全功能JTAG調試接口等。

4.2 修改PPCBoot源代碼
從移植PPCBoot的最小要求和PPCBOOt能正常啟動的角度出發,并比較MPC8260ADS板和開發目標板異同之后,主要考慮修改以下文件。

(1)修改頭文件mpc8260ads.h。mpe8260ads.h是板子的配置文件,它配置了板子的CPU、系統時鐘、SDRAM、Flash系統及其他所有開發板的信息,是需要修改的最重要的文件。

在該文件中設置IMMR CPU寄存器基地址,注意該值必須與操作系統的設置一樣。
#define CFG—IMMR 0xF0000000
設置CPU時鐘
#define CONFIG_8260_CLKIN 33333333 /*in Hz */
設置:Flash、SDRAM,包括基址、大小、環境參數的偏移和大小,還有內存刷新周期,都要根據目標板的具體情況設置;設置環境參數,用于網絡下載、啟動;另外,BR0、OR0、BR1、OR1等內存控制值,Watch.dog及一些目標板特定的參數也要根據實際情況設置。

(2)Linux啟動時,要從PPCBoot獲得內存基地址和大小、時鐘頻率、波特率、IP地址等參數,所以ppcbooth文件中定義的結構體bd-info的成員順序必須與Linux操作系統的定義保持一致,實現參數的正確傳遞。

(3)修改mpc8260ads.c。mpe8260ads.c中配置了I/O端口表,初始化SDRAM,完成板子的校驗工作。其中,I/O端口表配置了網絡端口和板上其他一些通用I/O端口,函數initdram根據SDRAM寄存器的配置完成SDRAM的初始化。

(4)修改config.mk。修改ppcboot/board/mpc826Oads/config.mk,設置TEXT_BASE=0xEF000000,使得TEXT_BASE的值和頭文件中CFG_FLASH_BASE的值一樣,這個值定義啟動地址。





4.3 編譯PPCBoot

在代碼修改完成后,就要進行重新編譯,對PPC-Boot的編譯需要在Linux主機上建立PowerPC的交叉編譯環境器。自己動手一步一步建立交叉編譯環境通常比較復雜,最簡單的方法是使用別人編譯好的交叉編譯工具。筆者使用的是MontaVista提供的完整的開發工具集CDK。

在RedHat Linux9.O主機上建立好交叉編譯工具后,要修改PPCboot目錄下的Makefile文件,指定交叉編譯器的完整路徑名,然后用下面的命令進行配置和編譯:
#make MPC8260ADS_ config
#make
編譯完成后,得到3個文件:
* ppcboot:這是ELF(Executable and Link Format)格式的文件,可以被大多數Debug程序識別。
*ppcboot.bin:這是二進制bin文件,純粹的ppeboot的二進制執行代碼,不包含ELF格式和調試信息。這個文件一般用于安裝燒錄ppcboot到用戶的開發板。
*ppcboot.srec:Motorola的S-Record格式.是可以通過串口下載到開發板中的文件。

5 移植PPCBoot

編譯好的ppcboot.bin文件通過JTAG接口下載到Flash的起始地址處,再次上電后,就可以看到PPCBoot的啟動信息:
PPCBoot 2.0.O(Jul 12 2005—18:21:391
RewinTeeh:Fengjunping&&Huangjianzhong MPC8260
Reset Status:External Soft.Extemal Hard MPC8260
Clock Configuration
—Bus—to—C0re Mull 5x.VCO Div 2,60x Bus Freq 20—60,Core Freq 100-300一dtbrg 0,coreenf Oxob,busdf 5,cpmdf 1,plldf 0,pnmf 2
一vco__out 199999998,scc_elk 49999999,brg_elk49999999
一cpu_clk 166666665,epm_clk 99999999,bus_clk33333333
CPU: MPC8260(Rev 14,Mask unknown[immr=0x0064,k=0x002d])at 166.666 MHz
Board:Motorola MPC8260ADS
I2C:ready
DRAM:16MB
F1ash:16 MB
***Warning—bad CRC.using default environment
In: serial
Out:serial
Err:serial
stan linux now(y/n):=>

輸入help得到所有命令列表,help command列出該命令的功能。緊接著測試Flash和網卡,如果都正常工作,表明移植PPCBoot的工作基本完成,可以接著調試內核和文件系統。

實際過程中可能由于考慮不周而需要多次修改。移植成功后,也可以添加一些其他功能(如LED的驅動等),在此基礎上添加功能相對比較容易。

6 結束語

Bootloader在嵌入式開發中是操作系統和硬件的樞紐,它為操作系統內核的啟動提供了必要的條件和參數。在移植過程中,開發人員除了要掌握Bootloader的結構和工作流程外,還要對相關硬件有一定的了解。目前,筆者移植的PPCBoot已經能夠穩定地運行在開發板上,而且可以通過FIash和網絡加載內核和文件系統,為后續開發特別是驅動程序的開發奠定了良好的基礎。對于不同的CPU和開發板,其基本方法和步驟是相同的,筆者希望自己的經驗能對有關嵌入式設計人員提供幫助。
本文地址:http://m.qingdxww.cn/thread-39304-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成片免费观看视频在线网 | 2023亚洲男人天堂 | 男人的天堂五月天 | 国产精品欧美一区二区在线看 | 九九九九九九精品免费 | 久久精品国产99久久72 | 中文字幕日本在线观看 | 亚洲先锋资源 | 亚洲欧美日韩国产综合高清 | 国产在线观看一区二区三区 | 日韩成人免费视频播放 | 五月婷婷色播 | 日本a免费观看 | 中文字幕在线看日本大片 | 欧美精品片在线观看网站 | 国产综合色在线视频 | 美日韩在线 | 久久婷婷色 | 在线视频精品免费 | 日韩一级欧美一级 | 国产动漫在线 | 伊人网站 | 亚洲黄色在线观看 | 国产精品女在线观看 | 日本一区二区三区久久精品 | 一区二区免费在线观看 | 国产成人久久 | 日本中文字幕在线观看视频 | 国产精品麻豆免费版 | 欧美日操 | 星武神诀在线观看全集免费播放 | 亚洲天堂免费在线视频 | 欧美日本一本线在线观看 | 91精品婷婷国产综合久久8 | 99爱视频精品免视看 | 99热影院| 日本不卡视频一区二区三区 | 免费一级做a爰片久久毛片 免费一级在线观看 | 在线观看免费国产视频 | 2021国产精品自在拍在线播放 | 99re综合|