999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MPC8306的U-Boot啟動流程

2019-10-09 05:48:24關志華
電子技術與軟件工程 2019年17期
關鍵詞:系統

文/關志華

1 引言

U-Boot是一款通用型的引導程序,具有良好的兼容性與靈活性,支持PowerPC、X86和ARM等常用系列的處理器。

如需利用PowerPC處理器與Linux系統進行相關設備與產品的開發,必須對U-Boot進行分析與了解。本文以MPC8306為例,對U-Boot的架構與啟動流程進行詳細分析,MPC8306為Freescale在2010年推出的PowerQUICCⅡPro處理器,具有極高的的性價比與系統穩定性,適合應用于工業及軍事設備,具體的系統架構如圖1所示。

2 架構簡述

如需進行MPC8306的U-Boot移植,必須對其系統架構有一定了解,主要目錄介紹如下:

(1)Arch:存放不同型號CPU的庫文件。其中,start.S是非常重要的一個文件,貫穿了U-Boot啟動的整個流程,主要負責設置系統堆棧以及相關工作方式。

(2)Board:板級配置相關文件。

(3)Common:通用類型的代碼文件。

(4)Include:存放頭文件的文件夾。子目錄 include/configs下與目標板相關的配置頭文件是移植過程中經常要修改的文件,可配置目標板的各項參數(如波特率、引導啟動參數等)。

3 啟動流程

MPC8306的U-Boot啟動流程主要分為兩個階段:Stage 1與Stage2。Stage1中,以Start.s文件為基本流程,代碼主要由匯編語言組成,也會調用一些C語言;Stage 2主要由C 語言組成,以board.c文件為基本流程,負責完成板級系統的初始化。具體啟動流程如圖2所示。

圖1:MPC8306的系統架構

圖2:MPC8306的U-Boot啟動流程

3.1 Stage 1

硬件復位完成后,CPU開始讀取系統復位向量對應的偏移地址為0x100處的第一條指令,這條指令位于U-Boot中Start.S文件的_Start處。_Start為整個U-Boot的全局入口。

當程序運行到Start.S的bl init_e300_core分支語句時,程序跳轉到init_e300_core函數中,這個函數主要進行e300內核的初始化,為系統創建一個干凈可靠的初始環境。

內核初始化完成后,需要對啟動Rom的絕對地址進行重映射,通過Start.S中的map_flash_by_law1函數和remap_flash_by_law0函數可以完成。

初識化PowerPC內部cache需要通過操作BAT以及TLB來實現,利用Start.S中的setup_bats將IBAT0~7以及DBAT0~7初始化,并禁用TLB。

enable_addr_trans、dcache_enable和lock_ram_in_cache函數負責使能地址翻譯與D-Cache,lock_ram_in_cache負責鎖定,然后建立堆棧。

堆棧建立完成后,流程跳轉到cpu_init.c文件的cpu_init_f()函數。該函數主要負責CPU 寄存器的初始化,尤其是初始化Local Access Windows的值和片選BRx,ORx的值。

執行完CPU寄存器的初始化后,程序返回到Start.S中,并通過分支語句“bl board_init_f”跳轉到board.c中的C函數board_init_f()中,為全局變量結構體gd分配內存空間(在global_data.h中可以定義gd_t結構體),并運行初始化序列init_sequence,初始化序列init_sequence主要負責板級硬件相關函數的初始化。

board_init_f()函數之前,U-Boot代碼一直在Nor-Flash中運行。內存初始化完成以后,程序返回start.S,然后調用relocate_code()函數完成從Flash到RAM的代碼復制,記錄目前執行代碼的偏移,并跳轉到RAM中相應的位置執行。最后還需設置RAM中的堆棧,并跳轉到的Stage2。

3.2 Stage2

Stage2的入口點為Start.S的分支語句“bl board_init_r”,由此語句跳轉到board.c文件的board_init_r()函數中,并在RAM中運行。該函數主要負責高速緩存器和本階段相關外設的初始化。主要的子函數如下所示:

mem_malloc_init():內存分配初始化;

cpu_init_r ():初始化CPU的高等級部分,比如QE;

flash_init():初始化Nor Flash,使之支持寫入、擦除功能;

env_relocate ():環境變量功能指針從ROM到bd結構體的搬移;

stdio_init ():標準化I/O初始化;

console_init_r():再次初始化控制臺串口;

main_loop():主循環函數。

初始化完成后,程序自動跳轉到主循環main_loop()函數,檢查環境變量中是否定義bootdelay的值,如果已定義就把值讀出來,該環境變量值定義了進入U-Boot的等待時間。如果在此時間內沒有按鍵,從串口查詢不到按鍵輸入,則執行設置的缺省命令。若有按鍵輸入則進入命令循環,顯示命令行模式的交互界面,接受用戶從串口輸入的命令。在該界面下,每從串行口讀入一個命令行,則調用common/main.c中的run_command()函數完成對命令行的解析,發現相符就以命令行中的參數調用相應的函數。

4 結論

本文結合MPC8306的芯片手冊與U-Boot源代碼詳細分析了U-Boot的啟動流程,并對其中各源碼文件與重要函數的意義進行說明。為U-Boot在MPC8306相關產品板的移植提供了理論基礎,能夠有效縮短項目的開發時間。

猜你喜歡
系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
基于UG的發射箱自動化虛擬裝配系統開發
半沸制皂系統(下)
FAO系統特有功能分析及互聯互通探討
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統 德行天下
PLC在多段調速系統中的應用
主站蜘蛛池模板: 亚洲va欧美ⅴa国产va影院| 国产91线观看| 日韩欧美中文亚洲高清在线| 中文字幕人成人乱码亚洲电影| 久久人人妻人人爽人人卡片av| 国产亚洲高清在线精品99| 久久精品国产999大香线焦| 欧美国产综合色视频| 91福利一区二区三区| 成人日韩精品| 婷婷成人综合| 日韩欧美网址| 亚洲AV无码不卡无码| 亚洲欧美在线精品一区二区| 高h视频在线| 亚洲中文字幕无码爆乳| 中文字幕无码中文字幕有码在线| 成年A级毛片| 在线视频97| 高清免费毛片| 99久久国产精品无码| 又大又硬又爽免费视频| 精品一区国产精品| 亚洲成aⅴ人片在线影院八| 色亚洲成人| 国产高清无码第一十页在线观看| 毛片基地美国正在播放亚洲| 日本成人一区| 欧美日韩免费在线视频| 久久综合伊人 六十路| 最新国产高清在线| 久久久91人妻无码精品蜜桃HD| 国产精品区网红主播在线观看| 国产日韩精品欧美一区喷| 国产精品hd在线播放| 色婷婷色丁香| 呦视频在线一区二区三区| 欧美日韩中文国产va另类| 在线观看国产网址你懂的| 日本91视频| 中文字幕中文字字幕码一二区| 91在线无码精品秘九色APP| 婷婷综合亚洲| 亚洲国内精品自在自线官| 99久久免费精品特色大片| 免费不卡视频| 久99久热只有精品国产15| 国产色婷婷| 久久青草热| 男女性色大片免费网站| 夜夜拍夜夜爽| 久久香蕉国产线看观看亚洲片| 中文字幕天无码久久精品视频免费| 国产精品微拍| 久久毛片免费基地| 超碰aⅴ人人做人人爽欧美 | 毛片a级毛片免费观看免下载| 久久青草视频| 国精品91人妻无码一区二区三区| 欧美中文字幕在线二区| 首页亚洲国产丝袜长腿综合| 小说 亚洲 无码 精品| 亚洲色图欧美在线| 国产精品三区四区| 久草青青在线视频| 亚洲视频三级| 色婷婷国产精品视频| 中文字幕自拍偷拍| 国国产a国产片免费麻豆| 色国产视频| 亚洲天堂视频在线免费观看| 色AV色 综合网站| 在线观看热码亚洲av每日更新| 国产精品自在在线午夜区app| 国产乱视频网站| 国产午夜不卡| 亚洲爱婷婷色69堂| 久久综合伊人77777| 国产午夜不卡| 又猛又黄又爽无遮挡的视频网站| 专干老肥熟女视频网站| 国产综合网站|