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

嵌入式系統(tǒng)啟動軟件Bootloader的設(shè)計

2008-04-12 00:00:00王青萍
現(xiàn)代電子技術(shù) 2008年10期

摘 要:詳細介紹Bootloader的操作模式以及其與主機之間的通信,說明Bootloader的兩階段任務(wù)——匯編語言編寫的固化代碼執(zhí)行部分和C語言編寫的基于RAM執(zhí)行部分,并通過對Blob源代碼的分析,介紹Blob所實現(xiàn)的功能,并找出其中的規(guī)律和原理,從而對Bootloader有更深刻的理解,并且能夠使得Bootloader運行于各種不同的硬件平臺。實際應(yīng)用中已經(jīng)完成了對系統(tǒng)的修改。

關(guān)鍵詞:Bootloader;Blob;ARM;初始化

中圖分類號:TP311 文獻標識碼:B

文章編號:1004-373X(2008)10-070-03

Design of Embedded Bootloader Software

WANG Qingping

(Hubei University of Education,Wuhan,430205,China)

Abstract:In this paper,the operation mode of Bootloader and the communication with HOST are introduced.The Bootloader includs two stages,one is the solidified code written in assemble language,the other is the executable binary code,which is written originated from C language and stored in RAM.This paper can also make apprehend Bootloader by analyzing the original Blob code and introducing the function of Blob,the rule of Blob,the principle of Blob,which gets Bootloader cross in all different kinds of hardware plateform.In our work,we have modify the Bootloader system for ARM system.

Keywords:Bootloader;Blob;ARM;initializing

任何計算機系統(tǒng)都有自己的引導(dǎo)程序,在嵌入式系統(tǒng)中,采用Bootloader引導(dǎo)程序。所謂Bootloader,就是在操作系統(tǒng)內(nèi)核運行之前的一段小程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。

不同的 CPU有不同的 Bootloader。即使他們是基于同一種 CPU 而構(gòu)建的,要想讓運行在一塊目標板上的 Bootloader 程序也能運行在另一塊板子上,通常也都需要修改 Bootloader 的源程序。因此,對Bootloader進行分析,并找出其中的規(guī)律和原理,使得Bootloader運行于各種不同的硬件平臺。

1 Bootloader的基本特征

1.1 階段性

多階段的Bootloader能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲設(shè)備上啟動的Bootloader大多都是2階段的啟動過程,也即啟動過程可以分為stage 1和stage 2兩部分。其中stage 1用匯編語言編寫,是在FLASH執(zhí)行,stage 2用C語言編寫,是在RAM中執(zhí)行的。

1.2 多種操作模式

大多數(shù)Bootloader都包含2種不同的操作模式:啟動加載模式和下載模式。

(1) 啟動加載(Boot loading)模式:這種模式也稱為自主(Autonomous)模式。也即 Bootloader 從目標機上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM 中運行,整個過程并沒有用戶的介入。這種模式是Bootloader的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布時,Bootloader 顯然必須工作在這種模式下。

(2) 下載(Downloading)模式:在這種模式下,目標機上的 Bootloader 將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(Host)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被 Bootloader 保存到目標機的 RAM 中,然后再被 Bootloader 寫到目標機上的FLASH 類固態(tài)存儲設(shè)備中。Bootloader 的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時被使用;此外,以后的系統(tǒng)更新也會使用 Bootloader 的這種工作模式。工作于這種模式下的 Bootloader 通常都會向他的終端用戶提供一個簡單的命令行接口。

功能強大的Bootloader 通常同時支持這2種工作模式,而且允許用戶在這2種工作模式之間進行切換。比如,Blob在啟動時處于正常的啟動加載模式,但是他會延時10 s等待終端用戶按下任意鍵而將Blob切換到下載模式。如果在10 s內(nèi)沒有用戶按鍵,則 Blob 繼續(xù)啟動 Linux 內(nèi)核,下面將要具體介紹Blob。

1.3 Bootloader與主機之間的傳輸

最常見的情況是目標機上的 Bootloader 通過串口與主機之間進行文件傳輸,傳輸協(xié)議通常是xmodem/ymodem/zmodem協(xié)議中的一種。但是,串口傳輸?shù)乃俣仁怯邢薜模虼送ㄟ^以太網(wǎng)連接并借助 TFTP 協(xié)議來下載文件是個更好的選擇。如果對于一個裸機,可以采用JTAG進行燒寫,如燒寫ppcboot.bin文件等。

2 Bootloader的初始化過程

大多數(shù) Bootloader 都分為 stage 1 和 stage 2 兩大部分。依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage 1 中,而且通常都用匯編語言實現(xiàn),以達到短小精悍的目的。而 stage 2 則通常用C語言來實現(xiàn),這樣可以實現(xiàn)給復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。

(1) Bootloader 的 stage 1 通常包括以下步驟(以執(zhí)行的先后順序):

① 硬件設(shè)備初始化;

② 為加載 Bootloader 的 stage 2 準備 RAM 空間;

③ 拷貝 Bootloader 的 stage 2 到 RAM 空間中;

④ 設(shè)置好堆棧;

⑤ 跳轉(zhuǎn)到 stage 2 的 C 入口點。

(2) Bootloader 的 stage 2 通常包括以下步驟(以執(zhí)行的先后順序):

① 初始化本階段要使用到的硬件設(shè)備;

② 檢測系統(tǒng)內(nèi)存映射(memory map);

③ 將 kernel 映像和根文件系統(tǒng)映像從 FLASH 上讀到 RAM 空間中;

④ 為內(nèi)核設(shè)置啟動參數(shù);

⑤ 調(diào)用內(nèi)核。

3 基本引導(dǎo)/裝入程序[CD2]Blob的分析和設(shè)計

3.1 Blob的第一階段

Blob也分為2階段執(zhí)行引導(dǎo)/裝入程序,第一階段是引導(dǎo)程序。Blob直接從閃存芯片將操作系統(tǒng)裝入RAM,并轉(zhuǎn)到入口,完成操作系統(tǒng)的引導(dǎo);如果使用者按下鍵盤,則放棄對操作系統(tǒng)的引導(dǎo),改為進入Blob的監(jiān)控程序。

3.1.1 開頭部分

引導(dǎo)裝入程序的代碼至少有一部分是必須在ROM或FLASH中執(zhí)行的,Blob的star-ld-script文件開始提供連接程序用的一個連接/定位說明,他不是代碼,而是用來介紹目標映像中的各個段放在什么位置上。下面該程序的意思是,如果從地址0x0開始執(zhí)行,就直接jump [CD#*2]start。

ENTRY([CD#*2]start)

{

.=0x00000000;

.=ALIGN(4);

………

}

這些信息告訴系統(tǒng)代碼段的入口為[CD#*2]start,放在地址0x0,可以根據(jù)實際芯片結(jié)構(gòu),修改這個物理地址。

3.1.2 [CD#*2]start程序

下面代碼開始就直接進入reset程序中,代碼中,除了第一條指令是正常執(zhí)行之外,其他的指令都是不正常的情況下執(zhí)行的,他們將CPU引入一個blinky程序段,在blinky程序段中,LED不斷的閃爍,提示重啟。

.global [CD#*2]start:

[CD#*2]start:

breset

bundefined[CD#*2]instruction

bsoftware[CD#*2]interrupt

bprefetch[CD#*2]abort

bdata[CD#*2]abort

bnot[CD#*2]used

birq

bfiq

3.1.3 閃存中執(zhí)行reset

(1) 屏蔽所有的中斷,設(shè)置CPU的速度;

(2) 配置內(nèi)存空間,設(shè)置內(nèi)存控制器,啟動DRAM刷新;

(3) 對LED燈進行初始化,通過GPIO寄存器點亮LED,標志著RAM可以投入運行;

(4) 判斷ARM是否從睡眠(由于長期執(zhí)行空操作而進入省電狀態(tài))狀態(tài)喚醒,如果是則讀出PSPR寄存器的內(nèi)容,這里保存的是ARM進入睡眠時候程序斷點地址,如果不是則進入(5);

(5) 執(zhí)行一般的引導(dǎo)程序,前面雖然啟動了內(nèi)存,但是還沒有啟動快速緩存,需要啟動快速緩存;

(6) 測試內(nèi)存RAM的開頭1 MB空間,看內(nèi)存空間可否讀、寫以及保存數(shù)據(jù)的功能;如果測試失敗,則進入blinky程序,閃燈,讓用戶重啟;

(7) 在完成內(nèi)存、緩存的設(shè)置以及測試之后,需要快速執(zhí)行,因此需要將余下Blob的余下代碼復(fù)制到RAM中去執(zhí)行,如果LED指示燈熄滅則表示復(fù)制結(jié)束結(jié)束,準備跳轉(zhuǎn)到RAM中執(zhí)行余下的程序。

3.2 Blob的第二階段

在第一階段結(jié)束的時候,有一條指令(mov pc,r0),這條指令中r0保存的是0x400,因此第二階段將從0x400這個地址開始執(zhí)行,為了跟第一階段進行聯(lián)系,在第二階段也有這樣一個文件。

3.2.1 第二階段的開頭部分

下面為一個RAM映像入口-trampoline的連接程序,因為PC存放的是0x400這一個地址,而主程序在[CD#*2]trampoline中,因此需要將0x400和[CD#*2]trampoline連接起來。直接jump [CD#*2]trampoline。

在執(zhí)行完以上連接之后,[CD#*2]trampoline中采用指令bl main,進入main程序。強調(diào)的是,在C中程序直接進入main函數(shù)執(zhí)行主程序,但是匯編無法識別main,因此通過bl指令進入main函數(shù),然后再采用C語言完成第二階段的設(shè)置。

ENTRY([CD#*2]trampoline)

{

.=0x00000400;

.=ALIGN(4);

………

}

3.2.2 main部分

(1) 執(zhí)行RAM的測試,相對于閃存中執(zhí)行的測試操作,這一部分是對整個RAM空間進行測試,檢查RAM空間的大小;

(2) 初始化一些Blob參數(shù),使得他能夠位加載服務(wù),加載的程序包括blob本身,要執(zhí)行的內(nèi)核kernel以及映像ramdisk,復(fù)制的數(shù)據(jù)來自于FLASH閃存中。有的系統(tǒng)中,這一步是采用一邊復(fù)制一邊解壓縮的辦法。這些kernel和ramdisk只是復(fù)制到RAM中,但是并不馬上執(zhí)行,而是根據(jù)外部響應(yīng)來選擇的執(zhí)行;

(3) 在完成blob的一些加載之后,系統(tǒng)并不是立即啟動Linux,而是判斷用戶在規(guī)定時間之內(nèi)是否通過串口將鍵盤某個值(有的規(guī)定是回車鍵)發(fā)送數(shù)據(jù)到緩存中,如果是,則暫時不啟動Linux,而是進入(4),執(zhí)行Blob的程序,否則啟動Linux代碼,進入(5);啟動Linux代碼;

(4) 進入Blob的程序,實際上執(zhí)行的是將(2)裝入RAM中的Blob,這部分實現(xiàn)的指令功能主要有:引導(dǎo)Linux內(nèi)核的Boot指令,設(shè)置始終的clock指令,從串口行下載映像到內(nèi)存的download指令,燒寫內(nèi)核和ramdisk的FLASH指令,幫助的help指令,從RAM中重啟動的reblob指令,重新引導(dǎo)的reboot指令,重新實現(xiàn)步驟(2)功能的的reload指令,恢復(fù)初始控制臺的reset指令,設(shè)置串口下載速率的speed指令以及顯示狀態(tài)的status指令。關(guān)于這些指令,每個Bootloader都有與之功能類似的指令,可以通過help命令查看這些指令的說明;

(5) 進入Linux代碼,實際上執(zhí)行的是前面裝入RAM的kernel以及ramdisk程序。

4 結(jié) 語

計算機系統(tǒng)都有一個Bootloader,這是因為現(xiàn)代計算機的內(nèi)存在掉電的情況下數(shù)據(jù)都會丟失,因此現(xiàn)代計算機都把操作系統(tǒng)的內(nèi)核首先固化到一個不容易丟失的設(shè)備上,一旦掉電,通過一個引導(dǎo)程序?qū)⒉僮飨到y(tǒng)引入到內(nèi)存,然后再執(zhí)行操作系統(tǒng)。根據(jù)不同的系統(tǒng),方案不同,比如PC機器是通過BIOS來引導(dǎo)的,而DSP可以直接從EPROM或者其他的處理器加載操作系統(tǒng)到DSP上執(zhí)行。這些都是Bootloader的多樣性的表現(xiàn),因此設(shè)計一個Bootloader程序是一個復(fù)雜的過程,要根據(jù)具體的硬件,軟件需求分析來進行設(shè)計。在完成本文之前,根據(jù)項目的需要,對Bootloader系統(tǒng)進行修改,使得Bootloader能夠運行于自己的ARM系統(tǒng)。

參 考 文 獻

[1]華恒科技.HHARM2410開發(fā)平臺技術(shù)手冊\\[Z\\].2005.

[2]Sumsung Electronics S3C2410X 32 b Risc Microprocessor User′s Manual Revision 1.2.2003.

[3]毛德操,胡希明.嵌入式系統(tǒng)采用公開源代碼和StrongARM/Xscale處理器\\[M\\].杭州:浙江大學出版社,2003.[4]孫天澤,袁文菊,張海峰.嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南[CD2]基于ARM 9處理器\\[M\\].北京:電子工業(yè)出版社,2005.

作者簡介

王青萍 女,1980年出生,助教。研究方向為信號與信息系統(tǒng)。

主站蜘蛛池模板: 亚洲无码免费黄色网址| 亚洲va欧美va国产综合下载| 久久久久久尹人网香蕉| 国产免费羞羞视频| 国产黑丝视频在线观看| 国产人成在线视频| 久爱午夜精品免费视频| 日本日韩欧美| 日韩黄色在线| 在线观看免费国产| 国产亚洲欧美日韩在线一区| 久久精品这里只有精99品| 亚洲VA中文字幕| 免费三A级毛片视频| 国产在线无码一区二区三区| 成年人久久黄色网站| 久久无码av三级| 亚洲开心婷婷中文字幕| 免费三A级毛片视频| 亚洲狼网站狼狼鲁亚洲下载| 美女扒开下面流白浆在线试听 | 丰满人妻被猛烈进入无码| 欧美日韩第二页| 国产精品福利在线观看无码卡| 全午夜免费一级毛片| 日韩欧美网址| 国产精品无码翘臀在线看纯欲 | 99激情网| 香蕉久人久人青草青草| 日韩毛片基地| 久久香蕉国产线| a级毛片免费网站| 九色免费视频| 精品国产Ⅴ无码大片在线观看81 | 蝴蝶伊人久久中文娱乐网| 色播五月婷婷| 欧洲熟妇精品视频| 免费人成网站在线观看欧美| 国产精品一区二区在线播放| 国产手机在线小视频免费观看| 黄色免费在线网址| 欧美成人精品在线| 狠狠色噜噜狠狠狠狠奇米777 | 九九久久精品国产av片囯产区| 亚洲国产欧美国产综合久久 | 欧美日在线观看| 国产中文一区二区苍井空| 国产亚洲精品资源在线26u| 高清久久精品亚洲日韩Av| 国产精品网址你懂的| 麻豆AV网站免费进入| 青青青视频蜜桃一区二区| 亚洲欧美自拍一区| 激情乱人伦| 超薄丝袜足j国产在线视频| 全部毛片免费看| 国产视频你懂得| 成人免费一级片| 一本一道波多野结衣一区二区| 日韩天堂视频| lhav亚洲精品| 色偷偷男人的天堂亚洲av| 亚洲 欧美 偷自乱 图片 | 91久久精品日日躁夜夜躁欧美| 99久久精品国产综合婷婷| 国产精品55夜色66夜色| 日韩国产黄色网站| 欧美在线一二区| 国产精品尤物在线| 五月天福利视频| 五月婷婷亚洲综合| 一本色道久久88| 青草精品视频| 久久精品只有这里有| 夜夜高潮夜夜爽国产伦精品| 天天综合亚洲| 99久久免费精品特色大片| 国产成人一区免费观看 | 一区二区三区国产精品视频| 亚洲国产天堂久久综合| 欧美一级高清片欧美国产欧美| 亚洲欧美日韩天堂|