在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            關鍵詞:U-boot bootloader uClinux Nios軟核

            1 概述

            1.1 Nios簡介

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

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

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

            (1)硬件需求

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

            (2)軟件需求

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

            (3)bootloader

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

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

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

            make menuconfig

            make dep

            make

            在/home/uClinux-dist/image目錄中產(chǎn)生image.rom,image.ram,romfs.img,它們分別是內(nèi)核的映像及文件系統(tǒng)的映像文件。鍵入make menuconfig時,會出現(xiàn)開發(fā)平臺及內(nèi)核配置和文件系統(tǒ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盤的方法進行處理(ram盤將采用ext2文件系統(tǒng))。同時,uClinux內(nèi)核也支持各種文件系統(tǒng),例如,網(wǎng)絡文件系統(tǒng),在需要時可以進行mount。

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

            1.3 U-boot介紹

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

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

            ②BOOTP/TFTP引導;

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

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

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

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

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

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

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

            本文著重介紹uClinux向Nios移植過程中,U-boot的設計和實現(xiàn)。

            2 U-boot的設計

            2.1 bootloader的設計思想

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

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

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

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

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

            ②建立實用程序集合;

            ③建立Nios平臺C編譯器;

            ④建立Nios平臺的glibc庫;

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

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

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

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

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

            *禁用MMU(Memory Management Unit);

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

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

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

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

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

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

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

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

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

            ⑤運行make nios_config。

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

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

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

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

            CFG_Nios_CONSOLE―console UART的基地址。

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

            CFG_Nios_TMRBASE―計時器的基地址。

            CFG_Nios_TMRIRQ――分配給計時器的中斷請求。

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

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

            *打開一個Nios sdk shell。

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

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

            $nios-run -r u-boot.srec

            這時我們可以看到:

            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。可以看到U-boot命令符號“==>”,看到后,退出nios-run。

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

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

            ==>help

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

            ==>erase 40000 4ffff

            把U-boot代碼裝載到RAM:把一個二進制映像裝載到RAM。

            ==>loadb 800000

            把這個二進制映像從RAM拷貝到Flash。

            ==>cp.b80000 40000 10000

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

            結語

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

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


            評論


            相關推薦

            技術專區(qū)

            關閉