精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于S3C2410開發板的Bootloader運行原理與實現

電子設計 ? 來源:微計算機信息 ? 作者:劉晶晶 ? 2020-09-22 18:02 ? 次閱讀

在專用的嵌入式開發板上運行操作系統(如Linux)已經變得越來越流行,而Bootloader就是為引導操作系統內核運行的一段代碼。通過它可以初始化硬件設備、建立或檢測內存空間的映射,其功能有點類似于PC機的BIOS(基本輸入輸出系統)程序。它的主要作用是為運行操作系統提供基本的運行環境,并操作系統的內核裝載到存儲器(RAM)中的合適位置上去運行。本文將以Samsung公司的S3C2410開發板為開發平臺,具體闡述了Bootloader的運行原理與實現分析。

Bootloader程序與CPU芯片的內核結構、具體芯片和使用的操作系統等因素有著密切關系,因此要為所有類型的嵌入式開發板建立一個通用的Bootloader幾乎是不可能的。盡管如此,本文將盡量對Bootloader歸納出一些通用的概念,以幫助特定用戶設計實現自己的Bootloader。

1.系統組成

典型的ARM嵌入式系統硬件平臺一般包括一個以ARM為內核的處理器、存儲器和必要的外部接口與設備。在本系統中,采用內嵌ARM920T的Samsung公司S3C2410處理器,工作頻率200MHz,存儲器使用2MB的NorFlash和64MB的SDRAM,外部接口除了用于下載通信的串口,還配備有以太網接口、USB接口。

軟件平臺由以下部分組成:Bootloader、嵌入式操作系統內核(Kernel)、文件系統(Filesystem)。其中,嵌入式操作系統內核是嵌入式系統加電運行后的管理平臺,負責實時性任務和多任務的管理。文件系統是嵌入式系統軟件平臺占用存儲量最大的一部分,也是與用戶開發最相關的一部分。它存儲了系統配置文件、系統程序、用戶應用程序和必需的驅動程序。

2、Bootloader運行流程

系統加電或復位后,所有的CPU通常都從某個由CPU制造商預先安排的地址上取指令。比如SansungS3C2410CPU,在系統加電或復位時就會從地址0x00000000處讀取它的第一條指令。基于CPU構建的嵌入式系統則通常都會有某種類型的固態存儲設備(如本例中的FLASH)被映射到這個預先安排的地址上,而Bootloader程序一般正是被燒錄或者下載到固態存儲設備的0x00000000地址處,因此在系統在加電或復位后,CPU將會首先執行Bootloader程序。

由于Bootloader的實現依賴于CPU的體系結構,因此Bootloader功能的實現基本可分為Stage1和Stage2兩大部分,分別運行于系統的ROM和RAM中。依賴于CPU體系結構的代碼,比如設備初始化代碼等,通常都放在Stage1中,基本都用匯編語言來實現,以達到簡短精練的目的。而Stage2則通常用C語言來實現,這樣可以實現更復雜的功能,而且代碼會具有更好的可讀性和可移植性。

3.1其中,Bootloader的Stage1通常依次執行以下主要步驟:

3.1.1硬件設備初始化。

其目的是為執行Stage2及隨后的操作系統Kernel準備好一些基本的硬件環境。

(a)建立中斷向量表,當程序出現異常后可跳轉到相應子程序執行。如

基于S3C2410開發板的Bootloader運行原理與實現

(b)屏蔽所有的中斷。為中斷提供服務通常是操作系統設備驅動程序的責任,因此在Bootloader的執行全過程中可以不必響應任何中斷??梢酝ㄟ^寫S3C2410的寄存器INTMSK、INTSUBMSK來完成;

(c)設置CPU的速度和時鐘頻率??梢酝ㄟ^寫寄存器LOCKTIME、MPLLCON、UPLLCON來實現;

(d)RAM初始化。包括正確地設置系統的內存控制器的功能寄存器BWSCON以及各內存控制寄存器等。

(e)初始化LED。典型地,通過GPIO來驅動LED,其目的是表明系統的狀態是正常還是出現錯誤。

3.1.2為加載Stage2準備RAM空間,拷貝Stage2到RAM中。

為了獲得更快的執行速度,通常把Stage2加載到RAM空間中來執行,因此必須為加載Bootloader的Stage2準備好一段可用的RAM空間范圍。具體的地址范圍可以任意安排,比如我們習慣將Stage2可執行映像安排到RAM地址最頂部1MB開始的空間內執行??截悤r要確定兩點:Stage2的可執行映像存放在Flash中的起始地址和終止地址;以及RAM空間的起始地址。

3.1.3設置堆棧指針sp。

堆棧指針的設置是為了執行C語言代碼作好準備,通常我們可以把sp(Userstack)設置在上面所安排的那個1MBRAM空間的最頂端(堆棧向下生長)。此外,在設置堆棧指針sp之前,也可以關閉LED燈,以提示我們準備跳轉到Stage2。

3.1.4跳轉到Stage2的C入口點。

在上述一切都就緒后,就可以跳轉到Bootloader的Stage2去執行了。比如通過修改PC寄存器為合適的地址來實現。

3.2Bootloader的Stage2通常依次執行以下主要步驟:

3.2.1進入Stage2的入口程序

Stage2的代碼通常用C語言來實現,但是與普通C語言應用程序不同的是,在編譯和鏈接bootloader這樣的程序時,我們無法使用glibc庫中的任何支持函數。這就需要我們利用匯編語言寫一段trampoline(彈簧床)小程序,并將這段trampoline小程序來作為Stage2可執行映象的執行入口點。然后我們可以在trampoline小程序中用CPU跳轉指令跳入main()函數中去執行;而當main()函數返回時,CPU執行路徑顯然再次回到了trampoline程序。具體程序如下:

.text

.globl_trampoline

_trampoline:

blmain

b_trampoline

3.2.2初始化本階段要使用到的硬件設備

這通常包括:初始化至少一個串口,以便和終端用戶進行I/O輸出信息;初始化計時器等。在初始化這些設備之前,也可以重新把LED燈點亮,以表明我們已經進入main()函數執行。設備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號等。

3.2.3檢測系統的內存映射(Memorymap)

所謂內存映射就是指在整個4GB物理地址空間中有哪些地址范圍被分配用來尋址系統的RAM單元。CPU通常預留出一段足夠大的地址空間給系統RAM,但是在搭建具體的嵌入式系統時不一定會實現CPU預留的全部RAM地址空間。而是往往只把CPU預留的全部RAM地址空間中的一部分映射到RAM單元上,而讓剩下的那部分預留RAM地址空間處于未使用狀態。如S3C2410使用的RAM空間僅為0x30000000-0x33ffffff。

3.2.4加載內核映像和根文件系統映像并從Flash上拷貝

規劃內存占用的布局。這里包括兩個方面:(1)內核映像所占用的內存范圍;(2)根文件系統所占用的內存范圍。對于內核映像,一般將其拷貝到從(MEM_START+0x8000)這個基地址開始的大約1MB大小的內存范圍內(嵌入式Linux的內核一般都不超過1MB)。從MEM_START到MEM_START+0x8000這段32KB大小的內存之所以被空出,是因為Linux內核要在這段內存中放置一些全局數據結構,如:啟動參數和內核頁表等信息。而對于根文件系統映像,則一般將其拷貝到MEM_START+0x0010,0000開始的地方。若采用Ramdisk作為根文件系統映像,則其解壓后的大小一般為1MB。

由于像ARM這樣的嵌入式CPU通常都是在統一的內存地址空間中尋址Flash等固態存儲設備,因此從Flash上讀取數據與從RAM單元中讀取數據并沒有什么不同。用一個簡單的循環就可以完成從Flash設備上拷貝映像的工作。如:

count=kernelsize

while(count》0){

*dest++=*src++;/*theyareallalignedwithwordboundary*/

count-=4;/*bytenumber*/

};

3.2.5設置內核的啟動參數

將內核映像和根文件系統映像拷貝到RAM空間后,設置Linux內核的啟動參數,如ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等,然后就可以準備啟動Linux內核了。

3.2.6調用內核。

Bootloader調用Linux內核的方法是直接跳轉到內核的第一條指令處,也即直接跳轉到MEM_START+0x8000地址處。此時,還需要設置CPU寄存器、CPU模式、Cache和MMU。

3.結束語

Bootloader是依賴于硬件而實現的,每個目標板的硬件配置都不完全一樣,因此Bootloader程序也都不會完全一樣。本文以Samsung公司的的S3C2410開發板為平臺,闡述了Bootloader運行的主要步驟和關鍵技術,為實現引導Linux操作系統內核運行提供合適的環境。文章后面關于Linux內核啟動參數的具體設置及如何調用內核是和具體操作系統密切關系的,未做詳細論述。此外,設計與實現一個優秀的Bootloader程序是一個龐大復雜的過程,在程序中如能多利用LED和串口輸出信息會是幫助我們調試的好方法。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7452

    瀏覽量

    163598
  • 操作系統
    +關注

    關注

    37

    文章

    6737

    瀏覽量

    123190
  • 開發板
    +關注

    關注

    25

    文章

    4943

    瀏覽量

    97188
收藏 人收藏

    評論

    相關推薦

    s3c2410原理圖pcb 2410開發板原理圖

    s3c2410原理圖pcb 2410開發板原理圖 
    發表于 09-09 15:44

    EL-ARM-860或S3C2410開發箱使用問題

    有哪位高手用過S3C2410的,能指點下該開發板如何用J-link仿真的.小弟在此謝過!
    發表于 11-16 16:28

    斯道s3c2410

    斯道s3c2410
    發表于 03-25 11:52 ?21次下載

    s3c2410 pdf datasheet 下載

    s3c2410 pd
    發表于 07-21 14:12 ?430次下載

    s3c2410開發板原理圖,s3c2410原理圖pcb

    s3c2410
    發表于 09-09 15:41 ?954次下載
    <b class='flag-5'>s3c2410</b><b class='flag-5'>開發板</b>原理圖,<b class='flag-5'>s3c2410</b>原理圖pcb

    s3c2410 datasheet

    s3c2410 da
    發表于 03-14 16:05 ?166次下載

    基于S3C2410的Linux移植代碼

    基于S3C2410的Linux移植代碼
    發表于 03-28 09:50 ?32次下載

    U-Boot在S3C2410上的移植

    bootloader是嵌入式系統中必不可少的用以完成系統的啟動加載任務的一段軟件代碼。U -boot作botloader的集大成者.現已得到了廣泛的應用.本文通過將u-boot移植到基于s3c2410開發板
    發表于 03-28 09:51 ?28次下載

    U Boot在S3C2410上的移植

    bootloader是嵌入式系統中必不可少的用以完成系統的啟動加載任務的一段軟件代碼。U -boot作botloader的集大成者.現已得到了廣泛的應用.本文通過將u-boot移植到基于s3c2410開發板
    發表于 11-23 15:57 ?19次下載

    S3C2410處理器 Bootloader(Vivi)源代碼

    S3C2410處理器 Bootloader(Vivi)源代碼分析 這邊的2410開發板提供的光盤上已附交叉編譯器工具:arm-linux-gcc-2.95.3(源碼為cross-2.
    發表于 02-09 15:39 ?22次下載

    基于S3C2410的RTC模塊應用設計

    基于S3C2410的RTC模塊應用設計 摘 要:本文簡要介紹了S3C2410嵌入式微處理器,分析了RTC(Real-time clock)硬件構架及其工作
    發表于 04-08 23:13 ?1597次閱讀
    基于<b class='flag-5'>S3C2410</b>的RTC模塊應用設計

    S3C2410 bootloader(vivi)閱讀筆記

    Bootloader有很多種,如本文將要閱讀的vivi,除此之外還有uboot,redboot,lilo等等。Vivi 是韓國mizi公司專門為三星s3c2410芯片設計的Bootloader
    發表于 09-28 10:08 ?2148次閱讀

    基于S3C2410的CAN總線通信設計與開發

    ARM芯片S3C2410沒有集成控制器,為保障通訊穩定與效率,采用帶SPI接口的獨立CAN控制器MCP2515來給S3C2410擴展CAN接口。以下以自行開發人機界面中CAN總線通訊接口設計實例說明。
    發表于 03-01 10:45 ?2762次閱讀
    基于<b class='flag-5'>S3C2410</b>的CAN總線通信設計與<b class='flag-5'>開發</b>

    基于S3C2410開發原理圖

    基于S3C2410開發原理圖免費下載。
    發表于 07-08 14:56 ?66次下載

    基于S3C2410的CAN總線通訊設計與開發

    基于S3C2410的CAN總線通訊設計與開發說明。
    發表于 04-20 10:28 ?16次下載