當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]NIOS軟核處理器的Linux引導(dǎo)程序U-boot設(shè)計(jì)

   摘要:針對將cClinux向Nios處理器移植過程中的啟動加載程序U-boot bootloader進(jìn)行研究。首先介紹移植的步驟,然后利用bootloader的設(shè)計(jì)思想,著重討論U-boot在Nios中的設(shè)計(jì)與實(shí)現(xiàn),最后對U-boot在基于Linux的嵌入式系統(tǒng) 中的運(yùn)用作了探索和展望。

    關(guān)鍵詞:U-boot bootloader uClinux Nios軟核

1 概述

1.1 Nios簡介

Nios是Altera公司以RISC為基礎(chǔ)的可配置、可裁減軟核處理器。它具有16位指令集和16/32位數(shù)據(jù)通路,通過將包括16或32位高性能處理器在內(nèi)的移種應(yīng)用模塊嵌入到通用FPGA/CPLD內(nèi),實(shí)現(xiàn)完全可配置的嵌入式系統(tǒng)。其開發(fā)套件包括:具有必要外圍內(nèi)核的Nios處理器、C/C++編譯器、Cygnus的源級調(diào)試程序、Quartus編譯軟件、驗(yàn)證工具和開發(fā)板。

Nios軟核處理器主要特性包括:高效靈活的處理器模塊,可以通過軟件配置成16位或32位的中央處理單元(RISC結(jié)構(gòu)),并可選擇不同的內(nèi)部存儲器大小,其最高執(zhí)行速度可達(dá)50MHz;具有多種其它功能模塊的選擇(SDRAM控制器、UART控制器、PCI接口模塊、LCD接口模塊、MAC接口模塊等多種功能模塊);具有完整、廉價(jià)、便捷的開發(fā)系統(tǒng)。所有開發(fā)(包括設(shè)計(jì)、調(diào)試)均通過軟件進(jìn)行,不再需要專門的硬件仿真器和編器,大大減少了開發(fā)設(shè)備的成本。

1.2 向Nios移植uClinux需要做的工作和步驟

(1)硬件需求

需要一個(gè)Altera公司的開發(fā)包,或者是下面三種之一:APEX board,STRATIX board,CYCLONE board。本文選用的是CYCLONAE board。

(2)軟件需求

下載一個(gè)最新版本的uClinux,并搭建一個(gè)Nios的GNU C編譯環(huán)境,準(zhǔn)備好CDK4Nios開發(fā)包。CDK4Nios開發(fā)包是Nios的交叉開發(fā)包。

(3)bootloader

需要編寫或移植一個(gè)bootloader到Altara Nios board上。本文就是要設(shè)計(jì)一個(gè)用于Nios的U-boot bootloader。利用QUARTUS軟件為開發(fā)板定義默認(rèn)參數(shù),然后在開發(fā)板上測試U-boot。

    (4)uClinux內(nèi)核的編譯

將下載好的uClinux源泉代碼解壓到/home目錄下,會產(chǎn)生/home/uClinux-dist目錄,進(jìn)入該目錄,依次鍵入:

make menuconfig

make dep

make

在/home/uClinux-dist/image目錄中產(chǎn)生image.rom,image.ram,romfs.img,它們分別是內(nèi)核的映像及文件系統(tǒng)的映像文件。鍵入make menuconfig時(shí),會出現(xiàn)開發(fā)平臺及內(nèi)核配置和文件系統(tǒng)應(yīng)用程序的配置界面,可以根據(jù)需要配置。

(5)uClinux的根文件系統(tǒng)及其加載

uClinux系統(tǒng)采用romfs文件系統(tǒng),這種文件系統(tǒng)相對于一般的ext2文件系統(tǒng)要求更少的空間。romfs文件系統(tǒng)不支持動態(tài)擦寫保存,對于需要系統(tǒng)動態(tài)保存的數(shù)據(jù),采用虛擬ram盤的方法進(jìn)行處理(ram盤將采用ext2文件系統(tǒng))。同時(shí),uClinux內(nèi)核也支持各種文件系統(tǒng),例如,網(wǎng)絡(luò)文件系統(tǒng),在需要時(shí)可以進(jìn)行mount。

解決了上述問題以后,uClinux便可以成功地移植到Nios上。

1.3 U-boot介紹

U-boot是啟動引導(dǎo)程序的一種,是一種通用的Linux bootloader。在做uClinux移植時(shí),碰到的第一個(gè)問題就是移植bootloader或者自己編寫bootloader程序。Linux內(nèi)核啟動部分的代碼需要判斷從bootloader傳遞過來的寄存器值。U-boot對Linux引導(dǎo)有特別的支持,如:

①SCC/FEC以太網(wǎng)支持;

②BOOTP/TFTP引導(dǎo);

③IP,MAC預(yù)置能力和在線讀寫Flash、DOC、IDE、IIC、EEROM、RTC;

④支持串行口kernit,S-record下載代碼;

⑤識別二進(jìn)制、ELF32、pImage格式的Image,對Linux引導(dǎo)有特別的支持;

⑥單軟件軟件運(yùn)行環(huán)境(hello.c);

⑦監(jiān)控(minitor)命令集有讀寫I/O、內(nèi)存、寄存器、外設(shè)測試功能等;

⑧腳本語言支持(類似BASH腳本);

⑨支持watchDog,LCDlogo,狀態(tài)指示功能等。

本文著重介紹uClinux向Nios軟核處理器移植過程中,U-boot的設(shè)計(jì)和實(shí)現(xiàn)。

2 U-boot的設(shè)計(jì)

2.1 bootloader的設(shè)計(jì)思想

bootloader的設(shè)計(jì)除了依賴于CPU的體系結(jié)構(gòu)外,它實(shí)際上也依賴于具體的嵌入式板級設(shè)備的配置。也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運(yùn)行在一塊板子上的bootloader程序也能運(yùn)行在另一塊板子上,通常也都需要修改bootloader的源程序。從本質(zhì)上講,它不屬于操作內(nèi)核,它是針對不同的CPU體系結(jié)構(gòu)的,這一部分代碼不具有可移植性。在移植操作系統(tǒng)時(shí),這部分代碼必須加以改寫。

    bootloader引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)開發(fā)中,bootloader還擔(dān)任了與主機(jī)端通信的任務(wù),它相當(dāng)于一個(gè)“服務(wù)器”,不斷監(jiān)聽從主機(jī)端傳來的控制信息和數(shù)據(jù)信息,完成相應(yīng)的操作。它擔(dān)負(fù)著初始化硬件和引導(dǎo)操作系統(tǒng)的雙重責(zé)任,也是在特定硬件平臺上操作系統(tǒng)移植至關(guān)重要的一點(diǎn)。

2.2 Nios內(nèi)核的U-boot設(shè)計(jì)方案

在主機(jī)上建立開發(fā)環(huán)境的具體步驟:

①建立Nios平臺內(nèi)核的頭文件和連接;

②建立實(shí)用程序集合;

③建立Nios平臺C編譯器;

④建立Nios平臺的glibc庫;

⑤建立Nios平臺C++編譯器;

⑥建立應(yīng)用程序的開發(fā)和測試。

所建立的開發(fā)環(huán)境結(jié)構(gòu)圖如圖1所示。

搭建完開發(fā)環(huán)境后,使用開發(fā)主機(jī)的并口為Nios開發(fā)板寫入引導(dǎo)程序作為系統(tǒng)啟動和管理Flash的bootloader,也就是U-boot。該工具能為Nios平臺提供引導(dǎo)功能,并且能夠支持網(wǎng)絡(luò)通信,調(diào)試和簡單的Flash文件系統(tǒng),也是CPU開機(jī)后執(zhí)行的第一個(gè)程序,它的任務(wù)是將操作系統(tǒng)內(nèi)核(壓縮的或非壓縮的)裝載到內(nèi)核要求的地址中,然后讓出控制權(quán)。

Nios處理器允許操作系統(tǒng)改變內(nèi)核時(shí)鐘,以方便內(nèi)存對于時(shí)間的處理,所以U-boot的第一個(gè)任務(wù)就是配置處理器的時(shí)鐘,并進(jìn)行內(nèi)存存取設(shè)置。一旦內(nèi)存可以使用,就開始初始化相應(yīng)的堆棧。內(nèi)存初始化完成后,U-boot能使處理器上的串口中斷處理,以允許開發(fā)板通過串口與開發(fā)環(huán)境通信。此后,U-boot還必須完成三個(gè)基本工作:

*禁用MMU(Memory Management Unit);

*寄存器(CPU寄存器)r0置零;

*寄存器R1置相應(yīng)的Nios體系結(jié)構(gòu)代碼。

完成這些后,U-boot的工作就完成了,可以通過用戶命令或者系統(tǒng)自動執(zhí)行下一步,U-boot將跳至內(nèi)存中內(nèi)核代碼開始處,開始啟動內(nèi)核。流程圖如圖2所示。

3 Nios內(nèi)核的U-boot實(shí)現(xiàn)

為了達(dá)到將U-boot移植到Nios平臺上的目的,我們進(jìn)行以下操作。

①在makefile文件和make all script里增加一項(xiàng)設(shè)置選擇,仿照已經(jīng)存在的那些例子。

②建立一個(gè)存放開發(fā)板代碼的目錄,增加所需要的文件。在這個(gè)目錄里,至少有“makefile”,“nios.c“,"flash.c""u-boot.lds"。

③為開發(fā)板建立一個(gè)新的設(shè)置文件:include/configs/nios.h。

④如果移植U-boot到一個(gè)新的CPU,還需要建立一個(gè)放置CPU代碼的目錄。

⑤運(yùn)行make nios_config。

⑥運(yùn)行make,獲得一個(gè)U-boot.srec的文件并安裝到目標(biāo)系統(tǒng)。

⑦調(diào)試并解決可能產(chǎn)生的問題。

當(dāng)然,在修改U-boot代碼時(shí),要特別注意和開發(fā)板及CPU相關(guān)的部分,要設(shè)置成專門的Nios配置。

CONFIG_Nios——定義了所有Nios32的板子。

CFG_Nios_CONSOLE—console UART的基地址。

CF G_GBL_DATA_OFFSET—在Nios移植中所用到全局變量的偏移量,簡單來講是全局?jǐn)?shù)據(jù)的地址。

CFG_Nios_TMRBASE—計(jì)時(shí)器的基地址。

CFG_Nios_TMRIRQ——分配給計(jì)時(shí)器的中斷請求。

下面介紹如何用GERMS執(zhí)行U-boot。

在沒有將U-boot編入Flash之前,鍵入nios-run命令來運(yùn)行U-boot monitor,步驟如下:

*打開一個(gè)Nios sdk shell。

*把目錄轉(zhuǎn)換到含有U-boot.src文件的目錄。

*執(zhí)行下列命令:

$nios-run -r u-boot.srec

這時(shí)我們可以看到:

u-boot 1.0.0 pre(Jan 2004-07:36:40)

cpu nios-32 Rec3.18(03018)

Regfile Size:256

LO_LIMIT/HI_LINIT:2/14

Board:Altera Nios 1C20Developemt Kit

In:Serial

Out:Serial

Err:Serial

==>

*在下載完之后,GERMS monitor將自動啟動U-boot??梢钥吹経-boot命令符號“==>”,看到后,退出nios-run。

*啟動終端,應(yīng)該被設(shè)置在115200,N,8,1處運(yùn)行。

*開始用U-boot了,試著從U-boot符號那里執(zhí)行help命令:

==>help

將U-boot放到Flash存儲器里,在U-boot的提示符下,進(jìn)行擦除Flash的一個(gè)區(qū)。

==>erase 40000 4ffff

把U-boot代碼裝載到RAM:把一個(gè)二進(jìn)制映像裝載到RAM。

==>loadb 800000

把這個(gè)二進(jìn)制映像從RAM拷貝到Flash。

==>cp.b80000 40000 10000

這樣,當(dāng)通過標(biāo)準(zhǔn)的32位設(shè)置后,開發(fā)板重置,U-boot自動啟動。若用安全模式下啟動U-boot,輸入下列的GERMS命令:+g40000。

結(jié)語

U-boot bootloader是操作系統(tǒng)和硬件的樞紐,相對于操作系統(tǒng)內(nèi)核來說,它是一個(gè)硬件抽象層。它負(fù)責(zé)初始化硬件,引導(dǎo)操作系統(tǒng)內(nèi)核,檢測各種參數(shù)給操作系統(tǒng)內(nèi)核使用。一個(gè)功能完備的大型bootloader的工作量,相當(dāng)于一個(gè)小型的操作系統(tǒng)。嵌入式領(lǐng)域中,操作系統(tǒng)移植的關(guān)鍵在于:bootloader的移植和操作系統(tǒng)內(nèi)核硬件相關(guān)部分移植。設(shè)計(jì)和實(shí)現(xiàn)一個(gè)好的U-boot將大大提高操作系統(tǒng)移植的穩(wěn)定性,并大大加快操作系統(tǒng)移植的周期。

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

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

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

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

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

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

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

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

關(guān)鍵字: 騰訊 編碼器 CPU

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

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

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

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

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

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

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

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉