主頁 > 軟體設計 > 典型ARM嵌入式Linux設備啟動流程-S3C2440,S5PV210,AM3352x

典型ARM嵌入式Linux設備啟動流程-S3C2440,S5PV210,AM3352x

2021-03-07 11:08:17 軟體設計

導讀:本文將以主流學習芯片為例,梳理以下典型的嵌入式Linux設備的啟動流程,目前比較流行的學習型芯片有S5PV210、S3C2440、AM335x、IMX6ULL、STM32MP157,

目錄

  • 0、基礎概念
  • 1、S3C2440
  • 2、S3C6410
  • 3、S5PV210
  • 4、AM335x和IMX6ULL
  • 4、總結

0、基礎概念

BL0:SOC內置在iROM里的代碼,是芯片廠商事先燒好的代碼,這部分代碼會根據指定的引腳電平決定從什么設備啟動,BL0就是Nand Flash,NorFlash,iNand等設備的復制函式(因為要讀Flash,所以要簡單初始化以下Flash),他的主要作業是把BL1從Flash中拷貝到iRAM或NorFlash上運行,(BL0是SOC出廠前設定的,芯片廠商也不知道板子上將來接的是什么樣的DRAM,因此配置和初始化記憶體和Flash就交給BL1做)

BL1:是開發人員撰寫的代碼,可以是自己寫的裸機程式,也可以是uboot或其他,BL0只做了存盤器的部分初始化,BL1需要關看門狗,設定時鐘,設定例外中斷向量表等作業,

iRAM:Internal SRAM 芯片內置的記憶體,可以直接運行程式,

SOC:System on Chip系統級別芯片,芯片內部集成cpu,記憶體,Flash等控制器,cache等

:系統剛上電時,記憶體和Flash都沒有被初始化而無法使用,只有iRAM(一般十幾K)可以使用,而正真的代碼在Flash里,Flash(Nor除外)不能直接運行程式,硬體相關介紹參考:ARM嵌入式硬體介紹

1、S3C2440

  1. 介紹
    S3C2440三星公司研發的一款基于ARM920T內核的32位CMOS微控制器,主頻最高400MHZ,結構相對簡單,總體性能比S3C6410差,無iROM,4K iRAM,

  2. S3C2440記憶體地址表
    S3C2440記憶體映射表
    如圖所示,當外接了NandFlash并設定OM引腳為Nand啟動,由于程式不能在nand上運行程式,所以片內4K記憶體(iRAM)的0地址就是整個記憶體的0地址;當外接了NorFlash并設定OM引腳為Nor啟動時,NorFlash的0地址就是記憶體的0地址,片內RAM基地址為0x4000_0000,
    S3C2440上電后從0地址開始運行,如果是nand啟動則從iRAM上開始運行,如果時Nor啟動就從NorFlash上開始運行,

  3. 外接Nand Flash時啟動流程
    此時iRAM(片內記憶體)基地址為記憶體0地址,
    第一步:Reset復位后,Nand Flash控制器將Nand前4K代碼復制到stepping stone中運行,
    第二步:這部分代碼負責配置記憶體和Flash,然后將uboot代碼復制到記憶體中,然后跳轉到記憶體中運行,
    第三步:最后uboot啟動Linux內核(OS),然后內核去掛載根檔案系統,進入命令列啟動應用程式,
    在這里插入圖片描述

  4. 外接Nor Flash時啟動流程
    此時NorFlash的0地址為記憶體0地址,
    第一步:Reset復位后,程式直接從NorFlash開始運行,初始化記憶體,將uboot拷貝到記憶體中
    第二步:跳轉到記憶體中運行,然后啟動內核,

補充:NorFlash參與記憶體統一編址,即通過指標指向NorFlash記憶體地址直接操作Nor,而nand不參與,需要操作nand控制器來讀寫nand,

2、S3C6410

  1. 介紹
    S3C6410是三星推出的基于ARM11架構的應用級SOC,主頻最高667MHz
    IROM(0x0800 0000)64M 只用了32K作為BL0, 0地址映射到IROM
    IRAM(0x0C00 0000)64M 只用了8K,加載BL1,作為steppingstone
  2. 啟動流程
    第一步:Reset復位后,從iROM中讀取BL0執行,BL0將BL1復制到iRAM中運行
    第二步:BL1初始化配置記憶體和Flash,然后將BL2(uboot主體代碼)復制到記憶體中,然后跳轉到記憶體中運行(uboot會判斷自己是在iRAM中運行還是記憶體中運行,如果是iRAM則跳轉到記憶體中運行;如果是在記憶體中則直接跳轉到主體代碼運行),可以參考S3C6410啟動流程,
    第三步:BL2負責啟動Linux內核(OS),然后內核去掛載根檔案系統,進入命令列啟動應用程式,
    S3C6410啟動流程圖

3、S5PV210

  1. 介紹
    S5PV210是三星推出的一款適用于智能手機和平板電腦等多媒體設備的應用處理器,采用了ARM Cortex-A8內核,32K一級快取、512K二級快取,作業頻率高達1GHz,支持2D/3D圖形加速,支持全高清、多標準的視頻編碼,
    IROM(0XD000 0000) ,大小為64KB,對于0地址處,是啟動區域,也是采用的映射方式,與6410一樣;
    IRAM(,0xD002 0000),大小96KB,加載 BL1+BL2,steppingstone;
  2. 啟動流程
    第一步:CPU上電后運行BL0,BL0會從相應的外部存盤器去讀取第一部分啟動代碼(BL1,大小為16KB)到iRAM運行,
    第二步:BL1負責初始化Flash,然后將BL2讀取到iRAM(剩余的80KB)運行
    第三步:BL2負責初始化記憶體,將內核(OS)讀取到記憶體中,然后啟動內核,
    S5PV210啟動流程
  3. uboot啟動流程
    由于uboot一般遠大于96K,實際上uboot并沒有按照上述流程啟動,uboot編譯后會生成uboot-spl.bin(BL1)和uboot.bin,啟動步驟如下:
    第一步:上電后BL0開始運行,將uboot-spl.bin(BL1)加載到iRAM中運行
    第二步:uboot-spl.bin直接去初始化記憶體和Flash,直接將uboot.bin復制到記憶體中,然后跳轉到記憶體中運行,繞開了BL2,
    第三步:uboot.bin運行,啟動內核,
  4. S5PV210二次啟動
    BL0加載BL1后會計算BL1的校驗和,如果不通過則啟動失敗,進行第二次啟動,則從第二個設備讀取BL1,如果校驗還是不通過則通過串口啟動,如果失敗則通過USB啟動,如果還是失敗則整個啟動程序失敗,只要有一個成功就執行BL1,
    S5PV210二次啟動

4、AM335x和IMX6ULL

  1. 介紹
    AM335X是TI(德州儀器)推出的基于 ARM Cortex-A8內核的微處理器,最高主頻可以達600M/800M/1GHz,帶NEON協處理器,二級高速快取,24位LCD控制器和觸摸屏控制器,解析度高達2048*2048,
    IMX6ULL是NXP(恩智浦)推出的基于ARM Cortex-A7內核的微處理器,最高主頻800MHz,

  2. 啟動程序

    1. AM335x
      啟動流程和S5PV210類似,支持多種設備啟動,SOC內部會保存一份啟動設備的串列,然后按照這個串列的順序去讀取BL1,讀取成功就執行BL1,失敗就去找下一個啟動設備,如果這是最后一個啟動設備,就進入死回圈,BL1就負責初始化Flash和記憶體,然后運行uboot主體代碼,再啟動Linux內核,
      AM335x啟動流程
    2. IMX6ULL
      IMX6ULL啟動流程和AM335x一樣,第一次啟動失敗就會判斷是不是第一個鏡像,如果是就設定SW引腳,指定下一次啟動為第二個啟動設備,然后復位重啟,

IMX6ULL啟動流程

4、總結

這些芯片啟動流程都比較相似,上電后運行BL0,BL0去啟動BL1,BL1初始化記憶體和Flash,然后將代碼復制到記憶體,再跳轉到記憶體中運行,


詳細內容請參考官方資料手冊:芯片手冊下載

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/267062.html

標籤:其他

上一篇:【程式猿歷程】2020 年總結,2021 年計劃

下一篇:2021年MyBatis核心面試題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more