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格式閱讀原文。”

主站蜘蛛池模板: 国产美女无遮挡免费视频| 亚洲综合在线网| 亚洲欧洲日本在线| 人妻丰满熟妇αv无码| 99久久亚洲精品影院| 色综合天天娱乐综合网| 国产亚洲成AⅤ人片在线观看| 久久综合亚洲鲁鲁九月天| 在线观看无码a∨| 久久亚洲中文字幕精品一区 | 国产伦精品一区二区三区视频优播 | 国产精品吹潮在线观看中文| 亚洲无码91视频| 精品久久久久无码| 成人av手机在线观看| 国产成人久视频免费| 欧美国产在线精品17p| 国产99在线| 亚洲综合婷婷激情| 高清欧美性猛交XXXX黑人猛交| 成人福利在线观看| 久久国产精品夜色| 国产精品9| 亚洲欧洲日韩综合| 在线观看国产小视频| 视频一区亚洲| 91久久偷偷做嫩草影院电| 乱人伦99久久| 国产91色| 亚洲国产看片基地久久1024| 毛片国产精品完整版| 国产午夜福利在线小视频| 国产精品久久久久久久久| 在线国产综合一区二区三区| 国产亚洲美日韩AV中文字幕无码成人| 国产精品偷伦在线观看| 91精品专区国产盗摄| 99青青青精品视频在线| 免费又黄又爽又猛大片午夜| 超清无码一区二区三区| 91青青视频| 国产中文在线亚洲精品官网| 激情六月丁香婷婷四房播| 久久婷婷人人澡人人爱91| 色亚洲激情综合精品无码视频| 亚洲福利网址| 免费看一级毛片波多结衣| 日韩欧美中文亚洲高清在线| 毛片在线播放网址| 欧美成人免费一区在线播放| 国产白浆视频| 国内a级毛片| 欧美在线一级片| 欧美国产成人在线| 日韩经典精品无码一区二区| 欧美日韩成人| 噜噜噜久久| 幺女国产一级毛片| a级高清毛片| 亚洲中文字幕无码爆乳| 久久精品国产一区二区小说| 日韩精品毛片| 中文字幕av无码不卡免费| 九九九国产| 国产欧美日韩va另类在线播放| 三上悠亚一区二区| 亚洲国产欧美自拍| 国产亚洲精品97在线观看| 国产精品粉嫩| 欧洲一区二区三区无码| 国产一级无码不卡视频| 天天综合网亚洲网站| 2021无码专区人妻系列日韩| 91成人精品视频| 在线观看网站国产| 97人妻精品专区久久久久| 国产成人超碰无码| 午夜毛片免费观看视频 | 成人福利在线视频| 国产视频一二三区| 精品视频一区二区观看| 国产高潮流白浆视频|