<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > NIOS軟核處理器的Linux引導程序U-boot設計

NIOS軟核處理器的Linux引導程序U-boot設計

作者: 時(shí)間:2004-12-27 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:針對將cClinux向Nios處理器移植過(guò)程中的啟動(dòng)加載程序 bootloader進(jìn)行研究。首先介紹移植的步驟,然后利用bootloader的設計思想,著(zhù)重討論在Nios中的設計與實(shí)現,最后對在基于的嵌入式系統 中的運用作了探索和展望。

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

1 概述

1.1 Nios簡(jiǎn)介

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

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

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

(1)硬件需求

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

(2)軟件需求

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

(3)bootloader

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

(4)uClinux內核的編譯

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

make menuconfig

make dep

make

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

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

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

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

1.3 U-boot介紹

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

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

②BOOTP/TFTP引導;

③IP,MAC預置能力和在線(xiàn)讀寫(xiě)Flash、DOC、IDE、IIC、EEROM、RTC;

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

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

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

⑦監控(minitor)命令集有讀寫(xiě)I/O、內存、寄存器、外設測試功能等;

⑧腳本語(yǔ)言支持(類(lèi)似BASH腳本);

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

本文著(zhù)重介紹uClinux向Nios移植過(guò)程中,U-boot的設計和實(shí)現。

2 U-boot的設計

2.1 bootloader的設計思想

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

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

2.2 Nios內核的U-boot設計方案

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

①建立Nios平臺內核的頭文件和連接;

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

③建立Nios平臺C編譯器;

④建立Nios平臺的glibc庫;

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

⑥建立應用程序的開(kāi)發(fā)和測試。

所建立的開(kāi)發(fā)環(huán)境結構圖如圖1所示。

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

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

*禁用MMU(Memory Management Unit);

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

*寄存器R1置相應的Nios體系結構代碼。

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

3 Nios內核的U-boot實(shí)現

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

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

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

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

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

⑤運行make nios_config。

⑥運行make,獲得一個(gè)U-boot.srec的文件并安裝到目標系統。

⑦調試并解決可能產(chǎn)生的問(wèn)題。

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

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

CFG_Nios_CONSOLE―console UART的基地址。

CF G_GBL_DATA_OFFSET―在Nios移植中所用到全局變量的偏移量,簡(jiǎn)單來(lái)講是全局數據的地址。

CFG_Nios_TMRBASE―計時(shí)器的基地址。

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

下面介紹如何用GERMS執行U-boot。

在沒(méi)有將U-boot編入Flash之前,鍵入nios-run命令來(lái)運行U-boot monitor,步驟如下:

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

*把目錄轉換到含有U-boot.src文件的目錄。

*執行下列命令:

$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將自動(dòng)啟動(dòng)U-boot??梢钥吹経-boot命令符號“==>”,看到后,退出nios-run。

*啟動(dòng)終端,應該被設置在115200,N,8,1處運行。

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

==>help

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

==>erase 40000 4ffff

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

==>loadb 800000

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

==>cp.b80000 40000 10000

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

結語(yǔ)

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: U-boot Linux NIOS 軟核處理器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>