《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 基于S3C44B0X的Bootloader的設計與實現

基于S3C44B0X的Bootloader的設計與實現

2008-04-11
作者:成轉鵬,張 躍,張和君

  摘 要: 介紹一種利用GNU工具鏈開發基于S3C44B0X硬件平臺" title="硬件平臺">硬件平臺的Bootloader的方法,詳細分析了Bootloader的構架、內存分布、異常/中斷處理以及編譯鏈接過程,說明了Bootloader需要完成的主要任務和實現方法。
  關鍵詞: 引導裝載程序 S3C44B0X 嵌入式系統 GNU工具


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


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


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


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


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

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产有码在线一区二区视频| 久久综合久久综合九色| 亚洲无亚洲人成网站77777| 欧美日韩中文字幕精品| 久久se精品一区二区| 欧美xxx成人| 久久久一本精品99久久精品66| 欧美亚洲视频| 国产视频久久久久| 欧美在线精品一区| 久久久精品999| 久久久久一区二区三区四区| 浪潮色综合久久天堂| 久久先锋影音| 国内视频精品| 国内成人精品视频| 国内精品久久久久久久影视麻豆| 99国产精品久久久久久久久久| 久久超碰97人人做人人爱| 伊人婷婷欧美激情| 欧美电影在线观看| 亚洲人成在线观看一区二区| 99国产精品久久久久老师| 国产精品一区二区在线| 樱桃视频在线观看一区| 久久五月婷婷丁香社区| 亚洲第一网站| 在线日韩欧美| 国产精品xvideos88| 一区二区三区欧美成人| 国产美女精品人人做人人爽| 国产亚洲精品aa| 鲁鲁狠狠狠7777一区二区| 午夜久久影院| 伊人春色精品| 亚洲欧美资源在线| 欧美电影在线播放| 精品成人a区在线观看| 欧美jizzhd精品欧美巨大免费| 亚洲欧洲在线一区| 91久久精品国产91久久| 欧美一区永久视频免费观看| 欧美国产在线视频| 亚洲国产成人tv| 国产亚洲午夜高清国产拍精品| 亚洲图片在线观看| 欧美日韩一级视频| 国产精品乱码久久久久久| 亚洲欧美另类中文字幕| 免播放器亚洲一区| 欧美一区二粉嫩精品国产一线天| 欧美劲爆第一页| 国产精品人人做人人爽| 亚洲自拍16p| 国模 一区 二区 三区| 午夜久久美女| 欧美日韩在线一二三| 国内精品国语自产拍在线观看| 久久疯狂做爰流白浆xx| 亚洲伦理久久| 国产精品国产三级国产普通话99| 一区二区欧美激情| 国产一区在线看| 国产视频精品xxxx| 亚洲欧美日韩一区二区三区在线观看| 国产一区二区黄| 欧美日韩在线一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美大学生性色视频| 精品99一区二区三区| 99av国产精品欲麻豆| 亚洲一区二区三区四区五区午夜| 亚洲一区尤物| 一本色道久久综合亚洲精品按摩| 国产精品久久久久久久久久久久久| 国产精品国产精品国产专区不蜜| 国产在线麻豆精品观看| 亚洲精华国产欧美| 久久亚洲捆绑美女| 欧美日韩在线看| 国产亚洲精品aa午夜观看| 99re6热只有精品免费观看| 国产日韩欧美三区| 亚洲欧美日韩天堂一区二区| 亚洲国产美女久久久久| 免费观看在线综合| 激情五月***国产精品| 午夜视频精品| 亚洲日本中文字幕免费在线不卡| 久久精品毛片| 国产喷白浆一区二区三区| 亚洲国产91色在线| 久久精品国产一区二区三| 美女精品国产| 亚洲视频一二| 99国产精品视频免费观看一公开| 模特精品裸拍一区| 亚洲精品日本| 欧美日韩免费| 夜夜嗨av一区二区三区网页| 国产精品美女一区二区在线观看| 免费日韩av片| 久久综合免费视频影院| 在线电影国产精品| 亚洲欧美日本在线| 美日韩精品视频免费看| 亚洲另类在线一区| 久久久久网站| 欧美一级专区| 欧美日韩国产不卡在线看| 一区二区三区国产盗摄| 狠狠色狠狠色综合系列| 国产精品乱码一区二三区小蝌蚪| 国产精品久久久久久久免费软件| 亚洲靠逼com| 一区二区欧美激情| 国产美女精品| 亚洲激情亚洲| 国产伦精品一区二区三区| 一区二区精品在线观看| 欧美日韩网址| 日韩视频一区二区三区在线播放免费观看| 性做久久久久久久免费看| 精品96久久久久久中文字幕无| 欧美成人一区在线| 一区二区三区国产| 精品福利免费观看| 亚洲电影有码| 欧美va天堂va视频va在线| 久久国产乱子精品免费女| 国产精品福利影院| 国产精品国产馆在线真实露脸| 欧美国产在线视频| 久久久久免费观看| 国产亚洲精品高潮| 永久免费精品影视网站| 欧美成人激情视频| 欧美精品色网| 欧美日韩国产二区| 国产精品久久久久久久午夜| 亚洲欧美一区二区三区极速播放| 欧美日韩精品免费观看| 国产麻豆91精品| 欧美日韩视频在线第一区| 久热国产精品视频| 亚洲图片欧洲图片日韩av| 欧美成人四级电影| 在线观看视频一区二区欧美日韩| 麻豆久久久9性大片| 最新成人在线| 亚洲一区999| 亚洲日本一区二区三区| 欧美日本一区| 亚洲高清在线观看一区| 亚洲高清一区二| 久久天堂av综合合色| 亚洲一区精品视频| 欧美成人首页| 国内外成人在线| 欧美日韩国产美女| 亚洲激情网址| 亚洲欧美日韩一区在线观看| 国产精品久久久久91| 欧美精品福利视频| 老司机成人在线视频| 国产欧美日韩亚洲| 久久午夜视频| 国产精品欧美风情| 国产精品久久一级| 欧美日韩国产不卡| 夜夜嗨av色综合久久久综合网| 亚洲大片一区二区三区| 欧美日韩国产成人高清视频| 欧美综合国产精品久久丁香| 国内久久视频| 亚洲欧美文学| 欧美精品乱人伦久久久久久| 欧美在线影院在线视频| 欧美视频在线观看 亚洲欧| 国产日本欧美一区二区三区| 日韩午夜在线播放| 国产精品爱啪在线线免费观看| 一区二区欧美在线| 久久久亚洲午夜电影| 亚洲在线观看免费| 国产日产精品一区二区三区四区的观看方式| 一区二区激情视频| 欧美成人免费网站| 欧美成人一区二免费视频软件| 老牛国产精品一区的观看方式| 国产精品xnxxcom| 激情综合色丁香一区二区| 亚洲风情在线资源站| 国产欧美一区二区三区在线老狼| 久久精品国产一区二区三区免费看| 亚洲一区二区成人在线观看| 久久亚洲电影| 国产视频在线观看一区二区| 国产精品一区二区久久精品| 亚洲欧美偷拍卡通变态| 日韩亚洲精品在线| 国产精品嫩草99a| 久久色在线观看| 亚洲无毛电影| 亚洲国产毛片完整版| 国产精品天天摸av网| 小辣椒精品导航| 欧美网站在线| 国产色综合网| 韩日午夜在线资源一区二区| 一区二区三区波多野结衣在线观看| 久久先锋影音| 欧美本精品男人aⅴ天堂| 噜噜爱69成人精品| 国产精品美女黄网| 国产精品v亚洲精品v日韩精品| 亚洲人成在线播放网站岛国| 欧美精品激情在线观看| 一区在线观看视频| 国产免费观看久久黄| 国产亚洲精品aa午夜观看| 99在线精品视频| 欧美激情精品久久久久久蜜臀| 欧美在线短视频| 久久精品一区二区三区不卡牛牛| 久久久精品性| 美女精品自拍一二三四| 免费视频最近日韩| 亚洲人成艺术| 午夜激情久久久| 欧美性大战xxxxx久久久| 国产目拍亚洲精品99久久精品| 99国产精品久久久久久久久久| 欧美日韩亚洲一区三区| 亚洲欧美亚洲| 99精品久久| 欧美精品1区2区| 狠狠色噜噜狠狠狠狠色吗综合| 黄色免费成人| 久久精品人人爽| 久久久久久噜噜噜久久久精品| 国产精品一区毛片| 国产精品电影观看| 欧美伦理一区二区| 午夜精品久久一牛影视| 久久综合九色综合欧美就去吻| 久久精品成人一区二区三区蜜臀| 亚洲精品国产品国语在线app| 国产精品久久一区二区三区| 国产亚洲精品久久飘花| 亚洲精品一二三| 欧美精品久久久久久久久久| 亚洲免费在线观看视频| 欧美一区二区三区精品电影| 亚洲国产精品久久久久秋霞不卡| 欧美喷水视频| 欧美成人在线影院| 一区二区三区在线免费观看| 99精品欧美一区二区蜜桃免费| 国产日韩精品视频一区| 欧美性淫爽ww久久久久无| 亚洲精品麻豆| 国产精品免费一区二区三区在线观看| 久久久久久婷| 欧美日韩a区| 欧美日韩岛国| 噜噜噜噜噜久久久久久91| 国产精品一区一区| 精品av久久707| 亚洲欧洲日产国产综合网| 伊人婷婷久久| 最新国产の精品合集bt伙计| 乱码第一页成人| 欧美一区视频在线| 激情成人综合网| 久久人人爽爽爽人久久久| 亚洲欧美视频一区二区三区| 国产精品美女视频网站| 韩国女主播一区二区三区| 国产一区二区福利| 欧美国产日韩精品免费观看| 欧美亚洲日本国产| 亚洲人成网站影音先锋播放| 亚洲午夜激情网站| 欧美在线观看你懂的| 欧美777四色影视在线| 国产午夜精品全部视频在线播放| 久久视频一区二区| 一区二区三区精品在线| 久久精品视频导航| 免费亚洲网站| 模特精品裸拍一区| 午夜老司机精品| 欧美亚洲自偷自偷| 国产精品入口福利| 亚洲校园激情| 韩国精品久久久999| 开元免费观看欧美电视剧网站| 欧美在线免费观看亚洲| 国产精品美女www爽爽爽| 在线观看国产成人av片| 国产亚洲视频在线观看| 亚洲美女性视频| 久久精品一区蜜桃臀影院| 国产在线不卡| 欧美日韩情趣电影| 免费成人美女女| 国内视频精品| 午夜伦欧美伦电影理论片| 日韩一级黄色片| 亚洲电影有码| 亚洲一级片在线看| 亚洲精品网址在线观看| 久久永久免费| 激情欧美一区二区| 欧美日韩国产另类不卡| 久久久www| 亚洲第一精品影视| 亚洲视频中文字幕| 国产精品永久| 一区二区三区鲁丝不卡| 在线免费观看日本欧美| 国产精品99久久久久久久久| 欧美日精品一区视频| 免费毛片一区二区三区久久久| 国产精品99久久久久久白浆小说| 欧美成人精精品一区二区频| 欧美日韩精品久久|