《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于S3C44B0X的Bootloader的設(shè)計(jì)與實(shí)現(xiàn)

基于S3C44B0X的Bootloader的設(shè)計(jì)與實(shí)現(xiàn)

2008-04-11
作者:成轉(zhuǎn)鵬,張 躍,張和君

  摘 要: 介紹一種利用GNU工具鏈開(kāi)發(fā)基于S3C44B0X硬件平臺(tái)" title="硬件平臺(tái)">硬件平臺(tái)的Bootloader的方法,詳細(xì)分析了Bootloader的構(gòu)架、內(nèi)存分布、異常/中斷處理以及編譯鏈接過(guò)程,說(shuō)明了Bootloader需要完成的主要任務(wù)和實(shí)現(xiàn)方法。
  關(guān)鍵詞: 引導(dǎo)裝載程序 S3C44B0X 嵌入式系統(tǒng) GNU工具


  Bootloader是系統(tǒng)上電" title="上電">上電/復(fù)位后,內(nèi)核啟動(dòng)程序之前執(zhí)行的一段程序,其功能是初始化硬件設(shè)備后,將操作系統(tǒng)內(nèi)核從固態(tài)存儲(chǔ)器中裝載到RAM中并引導(dǎo)其運(yùn)行,它是嵌入式系統(tǒng)開(kāi)發(fā)的一個(gè)難點(diǎn),在整個(gè)開(kāi)發(fā)中占有相當(dāng)大分量。由于高度依賴(lài)CPU體系結(jié)構(gòu)和目標(biāo)板的硬件配置,并沒(méi)有一個(gè)通用的Bootloader程序可供開(kāi)發(fā)者使用,因此需要自行開(kāi)發(fā)或是移植。GNU組織倡導(dǎo)了一整套著名的自由軟件,包括Linux操作系統(tǒng)、編譯開(kāi)發(fā)工具(gcc,g++,as,ld)、項(xiàng)目開(kāi)發(fā)管理工具make以及基于不同硬件平臺(tái)的開(kāi)發(fā)庫(kù),是目前嵌入式開(kāi)發(fā)者常用的軟件開(kāi)發(fā)平臺(tái)。本文以三星公司的S3C44B0X為硬件平臺(tái),利用GUN開(kāi)發(fā)工具,給出了Bootloader的一種設(shè)計(jì)和實(shí)現(xiàn)方案。
1 基于ARM7TDMI內(nèi)核的S3C44B0X的特點(diǎn)
  S3C44B0X是Samsung公司生產(chǎn)的一款16/32位RISC處理器,為手持設(shè)備和一般應(yīng)用提供了高性?xún)r(jià)比和高性能的微控制器解決方案,使用ARM7TDMI內(nèi)核,最高工作頻率可達(dá)66MHz,擁有71個(gè)多功能I/O,并提供了豐富的內(nèi)置部件,包括8KB Cache和內(nèi)部SRAM,LCD控制器,2通道UART,帶PWM功能的5通道定時(shí)器,8通道10位ADC等。S3C44B0X微處理器不具有MMU,不支持虛擬內(nèi)存管理和內(nèi)存保護(hù)。
2 建立交叉編譯環(huán)境
  交叉編譯就是在一個(gè)平臺(tái)上生成可以在另一個(gè)平臺(tái)上執(zhí)行的代碼,由于嵌入式微處理器S3C44B0X上無(wú)法安裝人們所需要的編譯器,只好借助于宿主機(jī),生成可以在目標(biāo)機(jī)S3C44B0X上運(yùn)行的代碼格式。在本課題設(shè)計(jì)中,將使用嵌入式開(kāi)發(fā)中最普遍的GNU編譯工具。
  為了生成能在S3C44B0X上允許的代碼,需要下載腳本文件arm-elf-tools-20030314.sh,然后在宿主機(jī)上安裝該工具鏈。GNU軟件包括C編譯器、C++編譯器G++、匯編器AS、鏈接器LD等,GNU開(kāi)發(fā)工具都是使用命令行的方式,更貼近編譯器和操作系統(tǒng)的底層,提供了更大的靈活性,有助于開(kāi)發(fā)者了解系統(tǒng)設(shè)計(jì)的基礎(chǔ)知識(shí)。
3 Bootloader的設(shè)計(jì)與實(shí)現(xiàn)
  嵌入式設(shè)備與環(huán)境中的Bootloader類(lèi)似于PC系統(tǒng)的BIOS,是系統(tǒng)最底層的引導(dǎo)軟件。Bootloader固化在CPU的上電/復(fù)位的啟動(dòng)地址處(ARM7TDMI的CPU上電后默認(rèn)從地址0x0處開(kāi)始執(zhí)行)。每當(dāng)硬件設(shè)備上電/復(fù)位時(shí),CPU總是先執(zhí)行Bootloader,初始化硬件設(shè)備,改變處理器運(yùn)行模式和重組中斷向量,建立內(nèi)存空間的映射圖,將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)由用戶(hù)定制的特定狀態(tài),然后從遠(yuǎn)程主機(jī)或者本地非易失存儲(chǔ)設(shè)備中裝載可執(zhí)行文件或操作系統(tǒng),為整個(gè)嵌入式系統(tǒng)準(zhǔn)備運(yùn)行環(huán)境。
3.1 硬件平臺(tái)分析
  硬件平臺(tái)是基于ARM7TDMI RISC內(nèi)核的samsung公司的S3C44B0X微處理器,整個(gè)系統(tǒng)擁有2MB的Flash,其地址從0x00000000-0x001FFFFF,有8MB的SDRAM,其地址從0x0C000000-0x0C7FFFFF,有一個(gè)USB1.1接口,及以太網(wǎng)口,還有兩個(gè)串口" title="串口">串口和一個(gè)調(diào)試接口。這里將JTAG接口轉(zhuǎn)換為并口連接方式,可直接與計(jì)算機(jī)的并口相連,避免使用昂貴的JTAG仿真器,串口主要用來(lái)輸出調(diào)試信息和輸入用戶(hù)控制字符。
3.2 Bootloader的具體設(shè)計(jì)
  每種不同的CPU體系結(jié)構(gòu)都有不同的Bootloader,除了依賴(lài)于CPU的體系結(jié)構(gòu)外,Bootloader還依賴(lài)具體的嵌入式設(shè)備的配置。本文將Boot Loader的設(shè)計(jì)分為 Stage1和Stage2兩大部分,依賴(lài)于CPU體系結(jié)構(gòu)的代碼,例如設(shè)備初始化代碼等,通常都放在Stage1中,而且通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn),以達(dá)到短小精悍的目的,而Stage2則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。
3.2.1 Bootloader的總體構(gòu)架
  針對(duì)硬件平臺(tái)特點(diǎn)和嵌入式開(kāi)發(fā)中的功能需求,設(shè)計(jì)了豐富的Bootloader管理功能:串口下載、USB下載、網(wǎng)卡的Tftp服務(wù)器、Flash燒寫(xiě)程序、Linux啟動(dòng)程序等。Bootloader工程的目錄結(jié)構(gòu)如圖1所示,共設(shè)置為兩級(jí)。第一級(jí)目錄下的Makefile和Bootloader.ld是整個(gè)工程的編譯文件和鏈接文件;Stage1.s是Stage1的匯編代碼文件。第二級(jí)目錄為Stage2,其中包括編譯文件Makefile、鏈接文件Stage2.ld、主管理程序Stage2.c,以及各個(gè)功能模塊Xmodem.c、Usb.c、Tftp.c、Flash.c、Linux.c等。


3.2.2 Bootloader的內(nèi)存分布
  硬件平臺(tái)的Flash空間為2MB(0x00000000-0x001FFFFF),SDRAM空間為8MB(0x0c000000-0x0C7FFFFF)。如圖2對(duì)Bootloader進(jìn)行內(nèi)存布局,從零地址處開(kāi)始存放Bootloader的整體執(zhí)行映象" title="映象">映象,Stage1部分存放在最開(kāi)始處,以便系統(tǒng)一上電/復(fù)位就能執(zhí)行Stage1。0x0C700000以上的部分用于放置Stage2的RAM拷貝。0x0C7FFF00以上的255個(gè)字節(jié)存放中斷服務(wù)程序的地址,以下部分用作S3C44B0X的5個(gè)運(yùn)行模式(Undef模式、Abort模式、IRQ模式、FIQ模式、SVC模式)的堆棧。


3.2.3 異常/中斷處理
  S3C44B0X總共有8種異常/中斷,CPU發(fā)生異常/中斷時(shí),會(huì)自動(dòng)跳轉(zhuǎn)到從0x00000000地址開(kāi)始的中斷向量表" title="向量表">向量表中的某個(gè)表項(xiàng)處讀取指令運(yùn)行,由于Bootloader最終要引導(dǎo)μCLinux運(yùn)行,而μCLinux要求中斷向量表設(shè)置在可隨機(jī)讀寫(xiě)的RAM中,為了能夠與μCLinux兼容,這里設(shè)置了兩級(jí)中斷向量表:第一級(jí)為零地址處的中斷向量表,第二級(jí)向量表放在RAM的開(kāi)始地址0x0C000000處,第一級(jí)僅是簡(jiǎn)單地向第二級(jí)跳轉(zhuǎn)。從0x0C7FFF00地址處開(kāi)始存放各個(gè)異常/中斷服務(wù)程序的地址。
  在異常服務(wù)和中斷服務(wù)處理中,將與中斷相關(guān)的例行固定不變的任務(wù)形成一個(gè)“系統(tǒng)函數(shù)”,而相應(yīng)的中斷處理任務(wù)用C代碼編寫(xiě)形成“用戶(hù)函數(shù)”,這樣可以提高編程和開(kāi)發(fā)的靈活性,實(shí)現(xiàn)了Bootloader良好的接口和封裝性能。在其他功能程序中只需要編寫(xiě)“用戶(hù)函數(shù)”,并可以將“用戶(hù)函數(shù)”的地址任意重構(gòu)到0x0C7FFF00開(kāi)始的RAM中。異常/中斷的整個(gè)處理過(guò)程如圖3所示。
3.2.4 Stage1與Stage2的設(shè)計(jì)分析
  Bootloader的Stage1部分是硬件上電/復(fù)位開(kāi)始執(zhí)行的操作,一般用匯編代碼來(lái)編寫(xiě),其目的是為Stage2的執(zhí)行以及隨后kernel的執(zhí)行初始化硬件環(huán)境,主要包括以下步驟:屏蔽所有的中斷->設(shè)置CPU的速度和時(shí)鐘頻率->關(guān)閉CPU的指令/數(shù)據(jù)Cache->設(shè)置CPU的8個(gè)bank配置->設(shè)置RAM控制器(包括刷新時(shí)序)->拷貝Stage2到地址0x0C700000->設(shè)置堆棧指針SP。在上述一切都就緒后,就可以跳轉(zhuǎn)到Stage2去執(zhí)行了,在ARM系統(tǒng)中,可以通過(guò)修改PC寄存器為相應(yīng)的地址來(lái)實(shí)現(xiàn)。


  Stage2繼續(xù)初始化本階段用到的硬件設(shè)備,包括I/O、Cache、中斷控制器和串口等,當(dāng)所有硬件初始化完畢之后,開(kāi)中斷,打印出提示信息。在Stage2階段,還有一個(gè)重要功能就是建立操作界面,提供各種調(diào)試功能,以方便用戶(hù)的開(kāi)發(fā)??梢岳肳indows的超級(jí)終端建立與S3C44B0X串口的連接,完成Bootloader的管理和引導(dǎo)功能,包括串口下載、USB下載、網(wǎng)口下載、Flash燒寫(xiě)以及操作系統(tǒng)的引導(dǎo)等。在調(diào)試階段,將整個(gè)管理過(guò)程設(shè)置成一個(gè)無(wú)限循環(huán),不停地從串口接收和執(zhí)行用戶(hù)命令。若執(zhí)行的是μClinux引導(dǎo)命令,則系統(tǒng)從此進(jìn)入μClinux,而不再返回Bootloader。
3.3 Bootloader的編譯和鏈接
  采用針對(duì)ARM的GNU工具鏈來(lái)對(duì)整個(gè)Bootloader工程文件進(jìn)行編譯和鏈接,具體流程如圖4所示。先編譯生成Stage2的二進(jìn)制可執(zhí)行映象Stage2.bin;然后用二進(jìn)制文件轉(zhuǎn)換工具bin2c將其轉(zhuǎn)化為只包含一個(gè)一維數(shù)組的c文件Stage2_bin.c,GNU工具在對(duì)工程進(jìn)行第二次鏈接的時(shí)候可以在其他程序定位到數(shù)組首地址,從而得到數(shù)組的內(nèi)容,達(dá)到直接調(diào)用Stage2.bin的目的;最后將文件Stage2_bin.c和Stage1.s一起編譯生成總的Bootloader映象,Stage2_bin.c中的Stage2映象數(shù)組最終被編譯進(jìn)Bootloader中的數(shù)據(jù)段。把Stage1的可執(zhí)行映象作為代碼段,把Stage2的可執(zhí)行映象作為數(shù)據(jù)段。Bootloader在Stage1的執(zhí)行過(guò)程中,就可以把自己的數(shù)據(jù)段(即Stage2)拷貝到RAM中,然后跳轉(zhuǎn)執(zhí)行。用arm-elf-ld鏈接各目標(biāo)文件時(shí)需要編寫(xiě)鏈接腳本文件,指定正確的加載時(shí)域和運(yùn)行時(shí)域,對(duì)于Stage1,加載時(shí)域和運(yùn)行時(shí)域都為0x00000000開(kāi)始的Flash地址空間,Stage2運(yùn)行時(shí)域被安排到0x0C700000RAM空間。


4 μCLinux操作系統(tǒng)的引導(dǎo)
  μCLinux的引導(dǎo)共有兩種形式:自舉模式和加載模式,分別適應(yīng)于嵌入式系統(tǒng)的開(kāi)發(fā)階段和產(chǎn)品發(fā)布階段。Bootloader的引導(dǎo)工作主要是為μCLinux操作系統(tǒng)準(zhǔn)備啟動(dòng)參數(shù),包括RAM板塊的組織、內(nèi)核啟動(dòng)命令行、ramdisk在RAM中的位置、硬件的版本、圖形卡參數(shù)等信息。在μCLinux操作系統(tǒng)中,通常需要由Bootloader來(lái)設(shè)置ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_
  RAMDISK、ATAG_INITRD等。Bootloader調(diào)用μCLinux內(nèi)核的方法同調(diào)用一般應(yīng)用程序一樣,直接跳轉(zhuǎn)到內(nèi)核的第一條指令處。根據(jù)內(nèi)核啟動(dòng)協(xié)議,在跳轉(zhuǎn)時(shí)要滿(mǎn)足下列幾個(gè)條件:
  (1)CPU寄存器的設(shè)置:R0=0、R1=機(jī)器類(lèi)型ID、R2=啟動(dòng)參數(shù)標(biāo)記列表在RAM中起始基地址。
  (2)CPU模式:必須關(guān)閉所有中斷、CPU必須為SVC工作模式。
  (3)Cache和MMU的設(shè)置:MMU必須關(guān)閉、數(shù)據(jù)Cache必須關(guān)閉。
  設(shè)計(jì)和實(shí)現(xiàn)一個(gè)性能良好的Bootloader,可以大大增強(qiáng)系統(tǒng)的穩(wěn)定性,提高系統(tǒng)的實(shí)時(shí)性。目前開(kāi)發(fā)的Bootloader已成功應(yīng)用于一款心電監(jiān)護(hù)設(shè)備中。本文給出的一種利用GNU工具鏈開(kāi)發(fā)基于S3C44B0X的Bootloader方法,體現(xiàn)了Bootloader的結(jié)構(gòu)和功能,可以舉一反三,設(shè)計(jì)并定制出各種硬件平臺(tái)的Bootloader,實(shí)現(xiàn)系統(tǒng)的有效、實(shí)時(shí)開(kāi)發(fā)。
參考文獻(xiàn)
1 馮進(jìn)文,楊榮松.用GNU工具鏈開(kāi)發(fā)嵌入式linux系統(tǒng)引導(dǎo)程序.中國(guó)測(cè)試技術(shù),2006;32(1)
2 童大鵬,冉蜀陽(yáng).基于AT91RM9200微控器的BootLoader的分析與開(kāi)發(fā).微計(jì)算機(jī)應(yīng)用,2005;26(3)
3 詹榮開(kāi).嵌入式BootLoader技術(shù)內(nèi)幕.http://www.edw.com.cn/bbs
4 李駒光,聶雪媛.ARM應(yīng)用系統(tǒng)開(kāi)發(fā)詳解-基于S3C4510B的系統(tǒng)設(shè)計(jì).北京:清華大學(xué)出版社,2003
5 S3C44B0X User′s Manual.SUMSUNG Inc,1997

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀(guān)點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話(huà):010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩色婷婷| 正在播放亚洲| 欧美电影在线观看完整版| 午夜视黄欧洲亚洲| 国产一区二区剧情av在线| 久久久久久久久久久久久9999| 亚洲自拍偷拍网址| 国产欧美日韩激情| 久久久精品一区| 久久大逼视频| 影音先锋一区| 欧美片第1页综合| 亚洲午夜伦理| 午夜精品久久99蜜桃的功能介绍| 99在线|亚洲一区二区| 国产欧美91| 久久久久九九视频| 欧美伊人久久久久久午夜久久久久| 欧美在线电影| 亚洲人成在线播放网站岛国| 国产精品久久久久久久第一福利 | 亚洲自拍电影| 欧美一区二区视频观看视频| 亚洲综合激情| 欧美亚洲一区二区在线| 亚洲欧洲午夜| 亚洲精品一二三| 国产自产高清不卡| 欧美日韩亚洲视频| 欧美日韩精品中文字幕| 久久久精品国产免大香伊| 久久精品国产精品亚洲精品| 99视频精品| 亚洲欧美日韩精品久久亚洲区| 在线观看欧美成人| 影视先锋久久| 亚洲肉体裸体xxxx137| av成人天堂| 午夜欧美电影在线观看| 久久国产精品高清| 亚洲日韩视频| 亚洲欧美激情在线视频| 欧美一区二区三区在线| 亚洲国产高清高潮精品美女| 中文在线不卡| 亚洲欧洲日夜超级视频| 一本色道久久加勒比精品| 亚洲一区久久| 久久国产婷婷国产香蕉| 亚洲一级免费视频| 亚洲丶国产丶欧美一区二区三区| 国产精品丝袜xxxxxxx| 欧美精品久久久久久久久久| 久久精品1区| 狼人天天伊人久久| 欧美一区二区免费观在线| 久久久99久久精品女同性| 久久综合九色综合欧美就去吻| 欧美日韩mv| 国产婷婷精品| 国产精品亚洲第一区在线暖暖韩国| 国产区精品视频| 亚洲国产清纯| 国产欧美日韩高清| 亚洲国产成人不卡| 在线观看欧美视频| 一本大道久久精品懂色aⅴ | 久久成人精品视频| 亚洲欧美影音先锋| 亚洲无限乱码一二三四麻| 久久国产精品一区二区| 欧美国产大片| 免费日韩精品中文字幕视频在线| 性色av一区二区三区| 亚洲一区二区三区在线观看视频 | 一区二区免费在线播放| 亚洲精品一区二区三区在线观看 | 亚洲娇小video精品| 亚洲欧美日韩高清| 夜久久久久久| 久久亚洲国产精品日日av夜夜| 午夜精品久久久久久久蜜桃app | 91久久国产精品91久久性色| 欧美一区二区三区日韩视频| 一本色道久久综合亚洲精品不卡| 亚洲精品三级| 欧美一级淫片aaaaaaa视频| 亚洲精品中文字幕女同| 久久成人免费电影| 欧美日韩在线直播| 亚洲大胆av| 欧美亚洲自偷自偷| 亚洲欧美日韩精品久久久| 欧美韩日一区| 激情视频一区二区| 激情久久久久久久久久久久久久久久| 亚洲美女在线视频| 亚洲视频自拍偷拍| 亚洲美女啪啪| 麻豆精品视频在线观看| 嫩草伊人久久精品少妇av杨幂| 国产精品色午夜在线观看| 亚洲精选中文字幕| 亚洲欧洲一级| 美女91精品| 狠狠噜噜久久| 亚洲欧洲精品一区二区三区波多野1战4| 新67194成人永久网站| 亚洲欧美经典视频| 欧美日韩综合久久| 国产精品资源| 一区二区三区欧美在线| 日韩视频一区二区在线观看 | 欧美高清视频一二三区| 精品成人一区二区三区| 欧美在线播放视频| 久久久国产精品亚洲一区| 国产麻豆成人精品| 亚洲男人的天堂在线| 亚洲女同精品视频| 国产精品99一区二区| 国产精品亚洲欧美| 亚洲一区二区三区四区五区午夜| 在线综合视频| 欧美日韩日本国产亚洲在线 | 这里只有精品视频| 亚洲永久视频| 国产精品久久激情| 亚洲欧美精品在线| 久久精品理论片| 国产专区欧美专区| 亚洲国产精品成人va在线观看| 开心色5月久久精品| 在线不卡中文字幕播放| 91久久久在线| 欧美精品在欧美一区二区少妇| 亚洲人午夜精品| 亚洲图片在线| 国产精品美女在线| 黄色成人在线免费| 亚洲国产精品成人| 免费日韩av片| 91久久综合| 亚洲一级在线观看| 国产精品天美传媒入口| 香港成人在线视频| 另类av导航| 亚洲精品综合久久中文字幕| 亚洲视频免费看| 国产精品―色哟哟| 亚洲第一免费播放区| 欧美国产精品日韩| 一本色道综合亚洲| 欧美一区二区三区电影在线观看| 国产午夜精品久久久久久免费视| 亚洲国产欧美一区二区三区同亚洲| 一区二区三区精品久久久| 欧美日韩亚洲网| 亚洲欧洲99久久| 老司机免费视频久久| 亚洲精品免费看| 午夜影院日韩| 精品福利免费观看| 一区二区三区.www| 国产精品永久入口久久久| 亚洲第一黄色网| 久久狠狠婷婷| 亚洲国产aⅴ天堂久久| 亚洲一区在线免费| 国内精品福利| 中文高清一区| 国产婷婷97碰碰久久人人蜜臀| 亚洲人成人99网站| 国产精品日韩欧美一区二区| 亚洲电影天堂av| 欧美日韩中国免费专区在线看| 欧美在线观看一区二区三区| 欧美成人精品一区| 亚洲制服av| 欧美精品二区| 欧美一级播放| 欧美日韩国产区| 久久激情婷婷| 欧美视频日韩| 亚洲国产一区二区视频| 国产精品女人网站| 亚洲毛片av在线| 国产区亚洲区欧美区| 一区二区三区四区在线| 一区国产精品| 羞羞视频在线观看欧美| 亚洲国产日韩一区| 欧美综合二区| 亚洲最新色图| 欧美国产免费| 欧美中文在线免费| 国产精品成人一区二区三区吃奶 | 久久精品亚洲精品国产欧美kt∨| 欧美午夜剧场| 亚洲免费高清视频|