亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

        中圖分類號:TP311 文獻(xiàn)標(biāo)識碼: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

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

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

        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 從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個過程并沒有用戶的介入。這種模式是Bootloader的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布時,Bootloader 顯然必須工作在這種模式下。

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

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

        1.3 Bootloader與主機(jī)之間的傳輸

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

        2 Bootloader的初始化過程

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

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

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

        ② 為加載 Bootloader 的 stage 2 準(zhǔn)備 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),改為進(jìn)入Blob的監(jiān)控程序。

        3.1.1 開頭部分

        引導(dǎo)裝入程序的代碼至少有一部分是必須在ROM或FLASH中執(zhí)行的,Blob的star-ld-script文件開始提供連接程序用的一個連接/定位說明,他不是代碼,而是用來介紹目標(biāo)映像中的各個段放在什么位置上。下面該程序的意思是,如果從地址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程序

        下面代碼開始就直接進(jìn)入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燈進(jìn)行初始化,通過GPIO寄存器點亮LED,標(biāo)志著RAM可以投入運(yùn)行;

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

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

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

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

        3.2 Blob的第二階段

        在第一階段結(jié)束的時候,有一條指令(mov pc,r0),這條指令中r0保存的是0x400,因此第二階段將從0x400這個地址開始執(zhí)行,為了跟第一階段進(jìn)行聯(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,進(jìn)入main程序。強(qiáng)調(diào)的是,在C中程序直接進(jìn)入main函數(shù)執(zhí)行主程序,但是匯編無法識別main,因此通過bl指令進(jìn)入main函數(shù),然后再采用C語言完成第二階段的設(shè)置。

        ENTRY([CD#*2]trampoline)

        {

        .=0x00000400;

        .=ALIGN(4);

        ………

        }

        3.2.2 main部分

        (1) 執(zhí)行RAM的測試,相對于閃存中執(zhí)行的測試操作,這一部分是對整個RAM空間進(jìn)行測試,檢查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,而是進(jìn)入(4),執(zhí)行Blob的程序,否則啟動Linux代碼,進(jìn)入(5);啟動Linux代碼;

        (4) 進(jìn)入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) 進(jìn)入Linux代碼,實際上執(zhí)行的是前面裝入RAM的kernel以及ramdisk程序。

        4 結(jié) 語

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

        參 考 文 獻(xiàn)

        [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\\].杭州:浙江大學(xué)出版社,2003.[4]孫天澤,袁文菊,張海峰.嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南[CD2]基于ARM 9處理器\\[M\\].北京:電子工業(yè)出版社,2005.

        作者簡介

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

        人人看人人做人人爱精品| 久久亚洲av成人无码电影a片| 午夜人妻久久久久久久久| 亚洲精品~无码抽插| 婷婷丁香五月中文字幕| 波多野结衣国产一区二区三区| 娇柔白嫩呻吟人妻尤物| 国产成人夜色在线视频观看| 国产午夜福利小视频在线观看| 久久精品av在线观看| 性饥渴的农村熟妇| 97久久精品人人做人人爽| 人妻久久999精品1024| 亚洲处破女av一区二区| 天天色天天操天天日天天射| 亚洲精品~无码抽插| 久久婷婷综合色丁香五月| 亚洲成人av一区二区三区| 国产一区二区三区在线影院| 中文字幕亚洲综合久久| 亚洲精品综合一区二区三| 欧美激情精品久久999| 在线亚洲日本一区二区| 国产区女主播在线观看| 99香蕉国产精品偷在线观看| 精品人无码一区二区三区| 国产熟女乱综合一区二区三区| 久久久亚洲熟妇熟女av| 80s国产成年女人毛片| 少妇av射精精品蜜桃专区| 精品十八禁免费观看| 中文字幕久久人妻av| 日韩在线 | 中文| 国产99久久亚洲综合精品| 麻豆AV无码久久精品蜜桃久久| 少妇被按摩出高潮了一区二区| 欧美午夜刺激影院| 亚洲中文av一区二区三区| 国产理论亚洲天堂av| 国产激情无码一区二区| 国产啪精品视频网站|