當前位置:首頁 > 單片機 > 單片機
[導讀]嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟硬件可裁減、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)是一個層次性結構,從底層到應用分別是:硬件、啟動引導程序

嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟硬件可裁減、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)是一個層次性結構,從底層到應用分別是:硬件、啟動引導程序、嵌入式操作系統(tǒng)(Linux)、文件系統(tǒng)、應用系統(tǒng)。系統(tǒng)上電或硬件復位后,CPU執(zhí)行的第一段代碼就是啟動引導程序,啟動引導程序在嵌入式Linux系統(tǒng)的設計與實現(xiàn)的過程中起著重要的作用。

1、Bootloader的工作原理與功能

1.1 工作原理

Bootloader是系統(tǒng)內核運行之前運行的代碼,BootLoader完成內核加載啟動。嵌入式系統(tǒng)開發(fā)過程,常涉及底層BOOT LOADER移植,操作系統(tǒng)引導、應用程序運行都與Bootloader有關,所以說Bootloader移植是嵌入式系統(tǒng)開發(fā)基礎。不同CPU體系結構對應不同Bootloader,另外Bootloader的實現(xiàn)也依賴于具體板級硬件。

嵌入式開發(fā)首先根據(jù)目標板特性開發(fā)Bootloader,依次完成下面任務:初始化底層硬件(CPU、存儲器);設置堆棧、Cache;代碼重定向;加載內核、文件系統(tǒng)映像;設置內核啟動參數(shù);啟動內核,控制權轉交給操作系統(tǒng)。

1.2 Bootloader主要功能
    設計一個Bootloader,須具備以下基本功能:
l    正確初始化硬件,使系統(tǒng)平臺正常啟動。
l    提供映像文件加載接口,通過串口、網(wǎng)口下載映像到Flash,為內核啟動作準備。
l    加載Linux內核到RAM中,啟動內核和文件系統(tǒng),并進一步啟動應用程序。

而完備的Bootloader,還可以擴展測試功能:
l    開發(fā)板設計開發(fā)調試過程,Bootloader通過交互界面與系統(tǒng)平臺交互,測試平臺器件。
l    開發(fā)階段,可以用于調試內核。系統(tǒng)內核能正常啟動是Bootloader的最終目標。
l    提供串口交互的命令控制臺。支持配置功能:設置IP,MAC,系統(tǒng)時間等。

Bootloader有兩種操作模式:啟動加載模式和下載模式;啟動加載模式是開發(fā)板發(fā)布后提供的穩(wěn)定工作模式;下載模式一般是在開發(fā)階段的工作模式,提供串口交互界面。

2、PXA272硬件平臺

Pxa272是最新推出的32位XScale RISC核心微處理器,兼容ARMv5TE指令;工作頻率可達520MHz;采用7級超流水線結構;支持Intel Wireless MMXTM指令集增強多媒體處理功能;動態(tài)電源管理實現(xiàn)低功耗;提供32KB D/I Cache;集成64M Flash和265K SRAM;

硬件平臺是基于Pxa272微處理器的自研發(fā)的開發(fā)板Uranium V0.90。硬件結構中的主要器件:AC97、SDRAM、TFT LCD、觸摸屏、網(wǎng)絡LAN、PCMCIA插槽等外設。

3、Bootloader映像文件結構設計

Bootloader結構由鏈接腳本決定,鏈接腳本用于控制目標文件格式。決定如何將各目標文件合并起來并安排數(shù)據(jù)和符號的位置。通常在編譯的最后一步完成。腳本主要目的描述如何將輸入文件的各段映射到輸出文件中,控制目標文件的布局。腳本文件Uranium.lds的結構:
OUTPUT_ARCH(arm)//指定ARM目標板體系結構
ENTRY(_start)        //_start為程序入口
SECTIONS {   . = 0x00000000;
__boot_start = .;    //匯編中指定的boot起址
.start       ALIGN(4) : { *(.text.start)} //文件text段
.text ALIGN(4) : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}    //只讀data段
.data       ALIGN(4) : {*(.data) }              //可讀寫data段
.got ALIGN(4) : {*(.got) }           //全局偏移量表
__boot_end = .;                           //bootloader終址
.bss ALIGN(16) :{*(.bss) }         //未初始化data段
……}

ARM體系結構微處理器在復位后PC指向0x00000000,PXA272片載Flash連接在nCS0上,將Flash映射到0x00000000作為啟動存儲器。

4、Bootloader的實現(xiàn)與擴展

啟動引導程序分成硬件初始化(Boot)和內核加載兩個部分(Loader);Boot部分與處理器體系結構緊密相關,通常用匯編語言實現(xiàn);Loader部分在完成硬件初始化后,將加載映像文件并啟動內核,這部分一般用C語言實現(xiàn)。

4.1硬件初始化(Boot)

可執(zhí)行Boot映像必須且只有一個全局入口。在匯編文件Start.S中指定入口:
_start : b start
Bootloader由多個文件組成。首先是匯編語言實現(xiàn)的Start.S,完成底層硬件初始化:
start: bl   define_gpio     //設置gpio
       bl    enable_cpu            //設置CPU時鐘
       bl    setup_memory       //初始化靜動態(tài)存儲器
       bl    relocate_boot  //復制boot代碼
       bl    setup_stack           //建立堆棧
       bl    clear_bss              //清除bss段
       ldr   pc, =main              //跳轉到C代碼

切換CPU工作模式、屏蔽中斷。啟動引導程序不需要處理中斷,所以要屏蔽所有中斷。

設置CPU:PXA272提供動態(tài)時鐘和電源管理,可以根據(jù)應用負荷,選擇CPU的工作模式;PXA272電源管理提供四種工作模式:Turbo模式、運行模式、空閑模式、睡眠模式。

建立堆棧和清除數(shù)據(jù)區(qū):堆棧、DATA、BSS段初始化是運行C代碼前必要條件。C語言函數(shù)編譯必須提供堆棧存放臨時變量、調用位置、寄存器信息。除堆棧外,需DATA段和BSS段存放C代碼中有初始值的全局或靜態(tài)變量以及沒有指定初始值的全局變量。

系統(tǒng)存儲器初始化:通過配置功能寄存器來實現(xiàn);在Pxa272上電后,SDRAM處于睡眠無時鐘狀態(tài),初始化必須完成SDRAM狀態(tài)機轉化過程,相關的寄存器:MDREFR、MDCNFG等。SDRAM的狀態(tài)轉換通過配置存儲器的相應位,產(chǎn)生對應的命令實現(xiàn)狀態(tài)機轉換[1]。

4.2內核加載(Loader)

為加載內核,需初始化必要設備:網(wǎng)絡接口、串行接口、Flash等;PXA272支持BTUART(藍牙)、FFUART(全功能串口)、 STUART(標準串口)??梢酝ㄟ^串口實現(xiàn)與終端用戶的交互,終端打印信息是非常重要的調試手段。片載的Flash遵循CFI規(guī)范(Common Flash Interface)。

內核加載前規(guī)劃好內存空間:設置內存大小和起始地址,BootLoader、內核、ramdisk、root鏡像在flash和SDRAM中的存放區(qū)域、大小。在這里確定好下載各個鏡像文件存放的地址以及鏡像加載后釋放的位置。內存地址的安排關系到操作系統(tǒng)能否正常的啟動、運行。
Parts[i].name = "XXXX";   //鏡像名(Boot/Kernal/Ramdisk)
Parts[i].sramb = XXXX_SRAM_BASE;//在flash中的基地址
Parts[i].srams = XXXX_MAX_SIZE;  //在flash中鏡像大小
Parts[i].dramb = XXXX_DRAM_BASE; //在DRAM中的基地址
Parts[i].drams = 0;
Parts[i].maxs = XXXX_MAX_SIZE;  //鏡像大小

這里基本確定flash和DRAM的地址映射。

 

加載內核、文件系統(tǒng)映像,設置啟動參數(shù):讀取映像大小和格式,將映像從Flash定向到RAM。定向后,就可啟動 Linux 內核。啟動內核前,要作些準備工作:設置啟動參數(shù)。Linux 2.4.x 以后的內核以標記列表(tagged list)形式傳遞啟動參數(shù)。由Boot Loader設置常見啟動參數(shù):ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 等。啟動參數(shù)列表以標記 ATAG_CORE 開始,以標記 ATAG_NONE 結束。
……
tags = (struct tag *)BOOT_PARAMS;
tags->hdr.tag = ATAG_CORE; //以CORE開始
tags->hdr.size = tag_size(tag_core);
……
tags = tag_next(tags);    
tags->hdr.tag = ATAG_NONE; //以NONE結束
tags->hdr.size = 0;
……

Boot Loader 調用 Linux 內核的方法是直接跳轉到內核的第一條指令處:
theKernel = (void *)mp->dramb;//Linux內核基址
theKernel (0, ARCH_URANIUM, 0xa0008000);

至此,Bootloader完成該作的工作,跳轉到內核入口點,內核接管控制權,開始啟動Linux。

4.3 啟動程序的擴展

在開發(fā)板的硬件測試階段,擴展命令接口,以協(xié)助硬件測試工作。

1.內存測試(MEM_TEST)[5]

測試存儲器有3個部分:數(shù)據(jù)總線測試、地址總線測試和器件測試;優(yōu)化通用的測試程序,能測試出錯誤,還對錯誤進行分析診斷,給出錯誤原因,并定位錯誤。

數(shù)據(jù)線測試(走1法):選擇有代表性的寫入值(0x01(單位),0x03(兩個相鄰位), 0x07(三個相連位),0x0F(四個相連位))。分別將值寫入內存地址,寫入后立刻讀出與寫入前的值比較,相等則將寫入值邏輯左移一位作為下一次寫入值。如此。直到所有值被測試完。如有不等,則報錯將寫入前后的值顯示出來。

地址線測試:取測試值0xaaaaaaaa,選擇測試地址,分別寫入測試值,比較寫入前后值。然后取其反值為測試值寫入測試地址。改換測試地址,按從低向高的順序依次寫入1的遞增值,比較寫入前后的值;再按上一步的地址順序寫入1遞增值反值,比較寫入前后值;在每步寫入前后值的比較中如果不一致,就輸出出錯的地址和寫入前后的值。

器件測試:用來測試器件完成性,確定器件每一位正確。選擇一組隨地址變化的值寫入內存,再讀出比較。然后取這些值的反寫入內存驗證。

如測試內存代碼放在SDRAM上,測試時會修改內存,這樣會造成系統(tǒng)崩潰。所以測試內存時,把代碼放在PXA272片載SRAM上。

2.液晶屏測試(LCD_TEST):啟動引導程序沒用到LCD,為確定目標板的LCD正常工作,提供LCD_TEST命令測試LCD。點亮LCD前,初始化 LCD控制器寄存器,劃出一塊內存作為LCD顯示緩沖區(qū)。通過參數(shù)來控制寫入顯示緩沖區(qū)中的數(shù)據(jù)以顯示不同圖形。

3.觸摸屏測試(TS_TEST):ADS7843觸摸屏芯片具備12位A/D轉換和低導通電阻模擬開關,通過控制GPIO模擬ADS7843傳輸時序,將控制字送入ADS7843,再串行讀取坐標值。最后,將讀取的x和y坐標送串口顯示。

除上述器件測試命令,還有SPI、RTC等命令。擴展命令對于處于硬件調試階段的開發(fā)板非常重要,可以方便調試工作。同時也能體現(xiàn)Bootloader在嵌入式系統(tǒng)開發(fā)中的地位。

結束語

本文總結了設計和實現(xiàn)基于PXA272處理器開發(fā)板的Bootloader工作,對其功能進行擴展,擴展了一些硬件測試接口以方便硬件測試。在開發(fā)過程中,體會到要編寫開發(fā)板的Bootloader,需要詳細了解目標板平臺結構、器件工作原理以及微處理器的體系結構,先從實現(xiàn)基本功能入手,再不斷擴展。

本文作者創(chuàng)新點:對基于Pxa272的嵌入式系統(tǒng)的Bootloader的實現(xiàn)作了詳細分析;對關鍵步驟SDRAM初始化工作詳細說明;并將Bootloader的功能擴展應用于硬件平臺的測試工作,給硬件工程師調試硬件提供一個良好的軟件平臺。

參考文獻
[1]Intel PXA27X Processor Family Developer’s Manual[Z].Intel. October 2004
[2]Common Flash Memory Interface Specification Release2.0[Z].AMD. Dec 2001
[3]劉軍芳,李眾立.基于s3c2410開發(fā)板的Boot Loader的啟動分析[J].微計算機信息,2006,6-2:201-203
[4]杜春雷.ARM 體系結構與編程[M].北京:清華大學出版社,
[5]馬學文.嵌入式系統(tǒng)中Bootloader的設計和實現(xiàn)[J].計算機工程,2005,31-7:96-97
[6]張大波.嵌入式系統(tǒng)原理、設計與應用[M].北京:機械工業(yè)出版社.2005.01
 

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉