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

龍芯稅控SoC中Bootloader的設計與分析

2006-12-31 00:00:00
電子產品世界 2006年21期

摘要:本文介紹了龍芯稅控SoC中Bootloader的設計過程,并詳細分析了Bootloader中關于外部中斷(IRQ)處理的詳細過程。

關鍵詞:引導程序;龍芯;SoC;嵌入式系統;uCOS-II

前言

Bootloader是系統加電運行的第一段軟件代碼。在嵌入式系統中,通常并沒有像BIOS那樣的固件程序,因此整個系統的加載啟動任務就完全由Bootloader來完成。Bootloader是底層硬件和上層應用軟件之間的一個中間件軟件。它創建內核需要的一些信息并將這些信息通過相關機制傳遞給內核,從而將系統的軟硬件環境帶到一個合適的狀態。同時還提供基本輸入、輸出系統監控程序功能,還可具有一定的調試功能。

隨著大規模集成電路的發展和現在工藝的進步,片上系統SoC逐漸成為主流的芯片設計形態。龍芯稅控SoC系統軟件框架包括以下幾個主要部分:工具鏈、模擬調試環境、仿真環境、Bootloader、操作系統以及應用程序。本文介紹了龍芯稅控SoC軟件中Bootloader的設計。

開發環境

Godson-1處理器

Godson-1是由中科院計算所研制出的一款兼顧通用和嵌入式應用需求的微處理器,是第一款我國自主研發的通用微處理器。龍芯一號實現了MIPS Ⅲ指令系統的32位模式,支持4GB內存尋址,主頻工作在200MHz-266MHz,芯片內部16KB的緩存,使用PQFP封裝技術。目前,北京龍芯集成電路設計公司推出的網絡計算機以及一系列的解決方案就是基于這款處理器的。

uCOS-Ⅱ

uCOS-Ⅱ是一款免費公開源代碼、結構小巧、具有可剝奪實時內核的實時操作系統。uCOS-II的前身是uCOS,是專門為計算機的嵌入式應用設計的,絕大部分代碼是用C語言編寫的。用戶只要有標準的ANSI的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將uCOS-Ⅱ嵌入到開發的產品中。uCOS-II具有執行效率高、占用空間小、實時性能優良和可擴展性強等特點,最小內核可編譯至2KB。uCOS-Ⅱ已經移植到了幾乎所有知名的CPU上。但由于uCOS-Ⅱ良好的可擴展性和源碼開放,這些非必須的功能完全可以由用戶自己根據需要分別實現。uCOS-Ⅱ目標是實現一個基于優先級調度的搶占式的實時內核,并在這個內核之上提供最基本的系統服務,如信號量、郵箱、消息隊列、內存管理、中斷管理等。目前,uCOS-Ⅱ已被廣泛的應用于照相機,醫療器械,音響設備,發動機控制,高速公路電話系統,自動提款機等產品中。

嵌入式平臺很少能給開發者提供完整的工具鏈,大部分軟件設計工作在其他宿主機器上完成,常用的工具鏈是與gcc相關的編譯工具。筆者所開發的Bootloader就是應用了gcc的編譯工具編譯和調試的。

Bootloader的設計分析

Bootloader的操作模式 大多數Bootloader都包含兩種不同的操作模式:

(1)啟動加載(Bootloading)模式:也稱為“自主”模式。即Bootloader從目標機上的某個固態存儲設備上將操作系統加載到RAM中運行,整個過程并沒有用戶的介入。

(2)下載(Downloading)模式:在這種模式下,目標機上的Bootloader將通過串口或網絡連接等通信手段從主機下載內核映像和根文件系統映像等。然后保存到目標機上的FLASH類固態存儲設備中。Bootloader的這種模式通常在系統初次安裝和更新時被使用,工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。在我們的Bootloader設計中我們同時支持這兩種工作模式,采用的方法是:一開始啟動時處于正常的啟動加載模式,但并不立即啟動進入uCOS-Ⅱ內核.而是提示延時5秒,等待終端用戶如果按下某一特定按鍵,則切換到下載模式,否則繼續啟動uCOS-Ⅱ內核。

Bootloader的啟動及初始化

龍芯稅控SoC的硬件模塊是可配置的。Bootloader分為stage 1和stage2兩大部分。依賴于CPU體系結構的代碼,通常都放在stagel中,而且在這一部分,我們直接對處理器內核和硬件控制器進行編程,這部分用MIPS匯編來實現。而stage2則用C語言來實現,這樣可以實現更復雜的功能,而且代碼會具有更好的可讀性和可移植性。

Bootloader的stage 1

這部分代碼必須首先完成一些基本的硬件初始化,為stage2的執行以及隨后的kernel的執行準備好一些基本的硬件環境。Bootloader的stage1的內容包括:定義程序人口點;設置異常向量表;初始化存儲系統(包括地址重映射);初始化有特殊要求的端口,設備;初始化用戶程序的執行環境;初始化堆棧指針寄存器,必要時改變處理器的模式;設置FIQ/IRQ中斷處理程序人口;進入C程序。

在整個Bootloader的初始化過程中都不必響應中斷,因此首先禁止系統的中斷,然后程序設置CPU的速度和時鐘頻率,設置CPU內部指令數據cache,DRAM初始化,DRAM初始化完成后即可拷貝ROM中的代碼到DRAM中,然后內存重映射,程序開始進入DRAM中執行,然后再初始化一些用戶有特殊要求的端口、設備,比如LCD或串口等,可以通過點亮LCD,或者向串口打印一些調試信息,以此表明系統的狀態是正常還是出錯。然后準備進入C語言代碼:拷貝Bootloader的RW/RO段到相應的運行位置,初始化zI段,初始化系統堆棧,設置FIQ/IRQ中斷處理程序人口,設置完成就可以進入到C代碼了。

Bootloader的stage2

為了讓程序跳入C語言的“start_bios”函數。我們采用直接將pc指針指向“start_bios”函數的方法,實現代碼如下:

1a a0,start_bios #把pc指針指向

函數入口,然后跳轉

jr a0

nop

進入start_bios函數后即可以開始本階段stage2的初始化任務,這包括:

(1)初始化至少一個串口,以便和終端用戶進行交互;

(2)初始化計時器,延時并提示啟動模式的選擇,如果進入啟動加載模式,則系統控制權交給uCOS-II操作系統,Bootloader任務完成,否則程序繼續向下執行;

(3)初始化網絡,包括網絡基本信息配置等;

(5)初始化系統配備的其他外設;

(6)初始化Flash:檢測是否支持該Flash芯片(可通過比較Flash ID的方式實現);

(7)初始化中斷,包括屏蔽中斷,清除中斷懸掛標志,初始化中斷向量表,注冊需要的中斷處理函數等;

(8)初始化命令控制臺,等待用戶鍵人命令。設備初始化完成后,可以通過串口輸出一些打印信息,如程序名字字符串、版本號等。

Bootloader的啟動過程如圖1所示。

關鍵技術-異常及中斷處理

龍芯1支持32種例外模式,而其中又尤以外部中斷模式(IRQ)應用較為廣泛,其異常處理過程也較為復雜。本文下面將以IRQ異常處理為例,說明一個通用的中斷使用及處理過程。Godson-1處理器通用的中斷處理過程大致可以分為以下3步:

(1)異常響應:獲取異常處理程序人口地址,并進入異常處理程序;

(2)現場保護及恢復:即進人中斷服務程序(ISR)前后中斷現場的保護和恢復;

(3)中斷服務:計算中斷源索引號,清中斷,然后進入中斷服務。

本例中IRQ異常處理相關代碼如下:do_IRQ():

sub sp,sp,#4; #預留一個字的空間用來保存PC的跳轉地址

sb a0,(sp); #保存下面中斷處理中使用到的aO寄存器

la a0,ExceptHandler;#將保存有異常處理函數人口的地址讀入a0

la a0,(a0); #將異常處理函數人口讀入a0

sw a0,4(sp); #將異常處理函數人口存人堆棧中剛才預留的空間

jar a0 #跳入異常處理函數

SAVE_ALL #宏,用于保存例外現場

CLI #關中斷

中斷響應入口:

mfc0 t0,CP0_CAUSE #獲得要處理的中斷向量

mfc0 t1,CP0_STATUS #獲得被激

活的中斷

and t0,t1 #分離被允許的中斷

andi t0,0xff00 #獲取中斷號

beqz t0,3f #判斷外部是否產生突發中斷

andi a0,t0,CAUSEF_IP7

beq a0,zero,1f

move a0,sp

jal ite_timer_interrupt #處理時間中斷

RET_FROM_IRQ #宏,中斷返回

1:andi a0,t0,CAUSEF_IP2 #該平臺北橋只支持一個中斷源

beq a0,zero,3f

move a0,sp

jal it8172_hw0_irqdispatch #跳入北橋中斷處理程序

CLI

RET_FROM_IRQ

3:move a0,sp

jal mips_spurious_interrupt #處理突發中斷

nop

RET_FROM_IRQ #中斷返回北橋中斷處理程序:void it8172_hw0_irqdispatch(struct pt_regs*regs)if(intstatus 0x4)

{ /*PCI中斷*/

}else if(intstatus 0x1)

{

/*內部總線終端*/

}Else if(intstatus 0x2)

{

/*LPC總線中斷*/

}Irq+=1T8172 LPC_IRQ_BASE; /*計算中斷號*/

do_IRQ(irq,regs);/*北橋中斷處理*/}

從上面的代碼可以得出,接收到IRQ中斷請求后程序的執行流程是:

(1)讀取CPU CP0協處理器的Cause和Status寄存器,跳入對應的中斷處理程序;

(2)計算來自外部中斷的中斷向量號;

(3)進入中斷處理do_IRQ()

(4)由do_IRQ()最后進入中斷服務程序,PET_FROM_IRQ完成中斷處理任務后返回。

結語

Bootloader與具體的硬件環境和操作系統是緊密聯系在一起,針對某個CPU芯片編寫Bootloader代碼,首先要了解該CPU的內核結構、指令系統,其次是具體芯片的結構和各種片上資源,以及所采用的操作系統。本文給出的Bootloader代碼已經在龍芯稅控SoC中上運行并測試通過。該Bootloader能夠正常引導及更新uCOS-II內核,系統運行穩定,完全實現了設計目的,達到了嵌入式系統的設計要求。

參考文獻:

1.中國科學院計算技術研究所CPU研制組.Godson-1微處理器用戶手冊(版本1.0).2002.9.10

2.詹榮開:嵌入式系統Bootloader技術內幕

3.鄭愛玲,張宏峰,孫荷琨:嵌入式系統的內核載入過程淺析,微型機與應用,2001,(11),59-60

注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文?!?/p>

主站蜘蛛池模板: 国产精品久久久久久搜索| 亚洲日韩国产精品综合在线观看| a毛片基地免费大全| 亚洲不卡av中文在线| 91区国产福利在线观看午夜| 免费A∨中文乱码专区| 最新精品久久精品| 91探花国产综合在线精品| 国产第八页| 国产一区二区三区免费观看 | 国产高清不卡视频| 高潮毛片免费观看| 国产麻豆va精品视频| 91口爆吞精国产对白第三集| 国产免费福利网站| 免费不卡视频| 国产美女久久久久不卡| 91精选国产大片| 91丨九色丨首页在线播放| 国产女人18水真多毛片18精品| 国产午夜精品一区二区三区软件| 欧美色视频网站| 91尤物国产尤物福利在线| 一区二区午夜| 一本大道无码日韩精品影视| 激情爆乳一区二区| 中文字幕色在线| 国产精品冒白浆免费视频| 亚洲色大成网站www国产| 伊人久久大线影院首页| 亚洲人成影视在线观看| 丝袜久久剧情精品国产| 欧美三级视频网站| 久久人人97超碰人人澡爱香蕉 | 五月婷婷丁香色| 亚洲精品人成网线在线 | 成人一区专区在线观看| 免费在线色| 亚洲国产精品日韩欧美一区| 亚洲一区二区黄色| 国产精品jizz在线观看软件| 亚洲天堂视频在线观看免费 | 99热这里只有精品国产99| 欧美日韩中文国产| 女同久久精品国产99国| 麻豆国产精品视频| 国产精品永久免费嫩草研究院| 国产91丝袜在线播放动漫 | 久久精品国产精品国产一区| 国产成人精品一区二区不卡| 热久久这里是精品6免费观看| 女人爽到高潮免费视频大全| 亚洲a免费| 青草国产在线视频| 国产成人无码Av在线播放无广告| 成人永久免费A∨一级在线播放| 99手机在线视频| 精久久久久无码区中文字幕| 无码啪啪精品天堂浪潮av| 欧美a√在线| 国产黄在线免费观看| 四虎成人在线视频| 欧美另类一区| 情侣午夜国产在线一区无码| 欧美精品高清| 亚洲精品国产综合99| 成人综合网址| 在线国产你懂的| 亚洲无码A视频在线| 香蕉99国内自产自拍视频| 国产精鲁鲁网在线视频| 亚洲h视频在线| 欧美一区福利| 国产粉嫩粉嫩的18在线播放91| 青青青伊人色综合久久| 欧美日韩国产在线观看一区二区三区 | 五月婷婷导航| 精品国产污污免费网站| 亚洲av无码成人专区| 2021天堂在线亚洲精品专区| 青青草原偷拍视频| 国产精品99久久久久久董美香|