吴忠躺衫网络科技有限公司

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

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

3天內不再提示

ARM處理器如何編寫Bootloader

strongerHuang ? 來源:strongerHuang ? 2023-07-26 09:10 ? 次閱讀

前面給大家分享過Bootloader從應用角度執行的相關文章,今天從底層原理來給大家描述ARM處理器如何編寫Bootloader,以及底層流程。

關于Bootloader

Bootloader顧名思義就是引導加載程序,是在操作系統或應用程序運行之前的一段程序,是在系統上電后執行的一段程序代碼

BootLoader是嚴重地依賴于硬件而實現的,特別是在嵌入式平臺。因此,在嵌入式平臺里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對bootloader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。

---來源百度百科

Bootloader在手機電腦、眾多嵌入式系統中都存在,它的作用有很多,比如:初始化底層應用驅動、加載應用程序、更新應用程序等。

不同的設備,Bootloader可能差異很大,通常來說Bootloader比較依賴底層硬件和實際項目需求。

如何編寫bootloader

bootloader是一段引導加載程序代碼,它更新用戶的應用程序代碼,可以使用很多硬件下載通道(例如USB、網絡端口)獲得新代碼。

在執行引導ROM之后,將執行bootloader程序,并在需要時進行更新,然后執行最終用戶應用程序。

引導加載程序和用戶應用程序應作為兩個獨立的Project或Object進行編寫和編譯,從而產生兩個獨立且可執行的(bin/hex)文件。

引導加載程序的主要任務是在必要時對用戶應用程序進行重新編程/替換,并跳轉至用戶應用程序以執行該程序,應用程序不一定需要知道引導加載程序的存在。

引導加載程序通常位于芯片閃存基址,下面通過一張圖來描述內存和Flash代碼映射關系:

wKgaomTAcreAShl8AAC9qrwfuIw063.png

有很多方法可以引導bootloader進入編程模式,以將用戶應用程序重新編程到Flash中,或者直接跳轉到現有的用戶應用程序來執行。最簡單的方法是檢查GPIO引腳以確定是否應進入編程模式。

大多數芯片供應商為用戶提供了一種方便的方式,例如 ISP 和 IAP 接口,bootloader將使用它們來更新閃存內容。

當Flash內容已更新或已經是最新時,引導加載程序將跳轉到用戶應用程序。在執行用戶應用程序之前,這需要許多步驟:

1.確保CPU處于特權模式。

2.禁用NVIC中所有啟用的中斷。

3.禁用所有可能產生中斷請求的使能外設,并清除這些外設中的所有未使用中斷標志。

4.清除NVIC中所有未使用的中斷請求。

5.禁用SysTick并清除其異常掛起位。

6.如果引導加載程序使用了單個故障處理程序,請禁用它們。

7.如果發現內核當前與PSP一起運行,則激活MSP(由于編譯器可能仍在使用堆棧,因此在此之前需要將PSP復制到MSP)。

8.將用戶應用程序的向量表地址加載到SCB-> VTOR寄存器中。確保地址符合對齊要求。

9.最后一部分是將MSP設置為用戶應用程序向量表中找到的值,然后將用戶應用程序的重置向量值加載到PC中,也就是跳轉功能。

比如通過調用下面的示例BootJump()這樣的函數來完成此操作:

staticvoidBootJump(uint32_t*Address)
{
  //1.確保CPU處于特權模式。
if(CONTROL_nPRIV_Msk&__get_CONTROL())
  {  /* not in privileged mode */
EnablePrivilegedMode();
  }


  //2.禁用NVIC中所有啟用的中斷。
  Disable_All_Peripherals();


  //3.禁用所有可能產生中斷請求的使能外設,并清除這些外設中的所有未使用中斷標志。
  NVIC->ICER[ 0 ] = 0xFFFFFFFF;
  NVIC->ICER[ 1 ] = 0xFFFFFFFF;
  NVIC->ICER[ 2 ] = 0xFFFFFFFF;
  NVIC->ICER[ 3 ] = 0xFFFFFFFF;
  NVIC->ICER[ 4 ] = 0xFFFFFFFF;
  NVIC->ICER[ 5 ] = 0xFFFFFFFF;
  NVIC->ICER[ 6 ] = 0xFFFFFFFF;
  NVIC->ICER[ 7 ] = 0xFFFFFFFF;


  //4.清除NVIC中所有未使用的中斷請求。
  NVIC->ICPR[ 0 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 1 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 2 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 3 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 4 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 5 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 6 ] = 0xFFFFFFFF;
  NVIC->ICPR[ 7 ] = 0xFFFFFFFF;


  //5.禁用SysTick并清除其異常掛起位。
  SysTick->CTRL = 0;
  SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;


  //6.如果引導加載程序使用了單個故障處理程序,請禁用它們。
  SCB->SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk |  
                 SCB_SHCSR_BUSFAULTENA_Msk |  
                 SCB_SHCSR_MEMFAULTENA_Msk ) ;


  //7.如果發現內核當前與PSP一起運行,則激活MSP
if(CONTROL_SPSEL_Msk&__get_CONTROL())
  {  /* MSP is not active */
__set_MSP(__get_PSP());
__set_CONTROL(__get_CONTROL()&~CONTROL_SPSEL_Msk);
  }


  //8.將用戶應用程序的向量表地址加載到SCB-> VTOR寄存器中。
  SCB->VTOR = ( uint32_t )Address ;


  //9.跳轉
BootJumpASM(Address[0],Address[1]);
}
再次說明bootloader與底層硬件和實際需求有關,以上代碼僅供參考,主要是提供思路,方便大家理解。

如果還不能理解,建議結合bootloader實際項目進行理解,比如之前給大家分享過的:STM32官方IAP例程詳細說明
審核編輯:湯梓紅

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

    關注

    68

    文章

    19407

    瀏覽量

    231180
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9165

    瀏覽量

    369186
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3624

    瀏覽量

    129749
  • bootloader
    +關注

    關注

    2

    文章

    235

    瀏覽量

    45735

原文標題:ARM處理器Bootloader底層流程

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM處理器簡介及RISC設計要點

    ARM是一個32位RISC(精簡指令集)處理器架構,ARM處理器則是ARM架構下的微處理器。
    的頭像 發表于 04-01 08:17 ?9344次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>簡介及RISC設計要點

    ARM處理器ARM處理器工作模式

    ARM處理器狀態ARM處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理
    發表于 01-27 11:13

    ARM處理器ARM處理器工作模式

    ARM處理器狀態ARM處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理
    發表于 01-27 14:19

    什么是ARM處理器 ARM處理器有哪些系列

    ARM 處理器是一種低功耗高性能的 32 位 RISC(精簡指令系統)處理器。從結構 入手對其進行分析,并針對目前流行的 ARM920T 核詳細描述其硬件結構和編程。
    發表于 09-24 17:47

    Motorola微處理器bootloader分析與應用

    以Motorola 32位處理器ColdFire5307 為例,分析、介紹Motorola公司用于嵌入式系統開發的dBUG通用bootloader 軟件的結構、運行原理及應用。
    發表于 04-15 10:26 ?18次下載

    Motorola微處理器bootloader分析與應用

    引 言??bootloader是用來完成系統啟動和系統軟件加載工作的程序。它是底層硬件和上層應用軟件之間的一個中間件軟件,完成處理器和周邊電路正常運行所要的初始化工
    發表于 03-11 12:39 ?1103次閱讀
    Motorola微<b class='flag-5'>處理器</b>的<b class='flag-5'>bootloader</b>分析與應用

    ARM的位置無關程序設計在Bootloader中的應用

    ARM的位置無關程序設計在Bootloader中的應用 ARM處理器支持位置無關的程序設計,這種程序加載到存儲的任意地址空間都可以正常運
    發表于 03-29 15:12 ?1269次閱讀

    ARM,ARM處理器是什么意思

    ARM,ARM處理器是什么意思 ARM處理器簡介 ARM(Advanced RISC Mach
    發表于 03-26 10:53 ?5304次閱讀

    ARMBootloader啟動流程研究

    講述了基于ARM 處理器的嵌入式系統在上電啟動后應用程序或操作系統運行前,對處理器及其內部功能模塊進行初始化的過程,并結合經過實際驗證的代碼詳細的分析了S3C44B0 Bootloader
    發表于 02-03 14:48 ?70次下載
    <b class='flag-5'>ARM</b>的<b class='flag-5'>Bootloader</b>啟動流程研究

    arm是什么處理器,arm處理器匯總

    ARM處理器是Acorn計算機有限公司面向低預算市場設計的第一款RISC微處理器。更早稱作Acorn RISC Machine。ARM處理器
    發表于 11-10 16:32 ?3187次閱讀

    arm的協處理器有幾個?ARM處理器詳解

    本文首先介紹了ARM處理器特點與主要模式,其次介紹了arm的協處理器有幾個,最后介紹了CP14和CP15系統控制協處理器。
    發表于 04-24 15:34 ?9014次閱讀

    如何編寫ARM處理器Bootloader

    作者 | strongerHuang 微信公眾號 | strongerHuang 之前從應用的角度給大家分享過Bootloader相關的文章,今天從底層原理來給大家描述ARM處理器如何編寫
    的頭像 發表于 10-27 11:02 ?4231次閱讀
    如何<b class='flag-5'>編寫</b><b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>的<b class='flag-5'>Bootloader</b>

    結合 Keil 描述如何編寫ARM處理器Bootloader

    Bootloader顧名思義就是引導加載程序,是在操作系統或應用程序運行之前的一段程序,是在系統上電后執行的一段程序代碼。
    發表于 02-08 15:43 ?5次下載
    結合 Keil 描述如何<b class='flag-5'>編寫</b><b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>的<b class='flag-5'>Bootloader</b>

    ARM處理器如何編寫Bootloader呢?其底層流程是怎樣的呢?

    Bootloader顧名思義就是引導加載程序,是在操作系統或應用程序運行之前的一段程序,是在系統上電后執行的一段程序代碼。
    發表于 08-08 10:28 ?726次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>如何<b class='flag-5'>編寫</b><b class='flag-5'>Bootloader</b>呢?其底層流程是怎樣的呢?

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程? ARM處理器是一種廣泛使用的嵌入式
    的頭像 發表于 10-19 16:35 ?1536次閱讀
    网络百家乐的信誉| 大发娱乐场下载| 伟博百家乐现金网| 九州百家乐官网的玩法技巧和规则| 百家乐官网光纤洗牌机如何做弊| 博彩网大全| 真人游戏 豆瓣| 大发888娱乐城怎么样| 大发888娱乐开户| 大发888老虎机手机版下载安装| 赌场百家乐是如何| 百家乐里面的奥妙| 百家乐官网平注法到6568| 百家乐网址是多少| 做生意招财的花有哪些| 百家乐赢钱战略| 百家乐平台哪个比较安全| 百家乐官网筹码套装包邮| 百家乐单注技巧| 足球百家乐投注| 真人百家乐攻略| 百家乐博百家乐的玩法技巧和规则| 实战百家乐十大取胜原因百分百战胜百家乐不买币不吹牛只你能做到按我说的.百家乐基本规则 | 网上百家乐官网的玩法技巧和规则| 百家乐官网威尼斯人| 奥斯卡百家乐官网的玩法技巧和规则 | 视频百家乐是真是假| 百家乐六合彩| gt百家乐官网平台假吗| 百家乐官网盈利分析路单| k7娱乐城开户| 百家乐官网园sun811| 百家乐官网大轮转| 先锋百家乐官网的玩法技巧和规则 | 网上百家乐官网内| 广州百家乐筹码| 澳门百家乐娱乐城怎么样| 伟博百家乐娱乐城| 大发888 casino exe| 36棋牌的深海捕鱼| ,|