armlinux入门与实践 基于ti am335x处理器_解析 AM335x Arm Cortex-A8 处理器的启动流程...

这是我的嵌入式笔记第三篇,原文写于 2015 年。


在真实世界中,一个操作系统是如何被加载的?对于单片机、SoC 以及我们常见的计算机,由于硬件设备和软件系统的不同,启动流程肯定会有差异。不过对于大型操作系统,启动流程有不少共通之处,本文将简单解析一个消费类电子产品常用的系统(基于 TI 的 AM335x 处理器)是如何被加载启动的。
这篇笔记其实是在组队项目时,由一位队友 Adrian Huang 所写。相比我们这些 “愣头青”,Adrian 已经有八九年的 Linux 底层工作经验,先后在 HP、联想、MTK 工作过,是十足的大佬。

正文开始


圖一為 AM335x 開機流程,其包含 ROM Code、MLO、U-Boot 與 OS Image,底下將說明 ROM Code、MLO 與 U-Boot。

da526116a8e74c4128c5abf6048e8892.png

Figure 1: High-level Overview to AM335x Boot SequenceROM Code
ROM Code 主要有幾項任務:

  • Stack Setup
  • Watchdog timer 1 configuration (set to three minutes)
  • System clock configuration
  • Search bootable devices (must be the FAT 12/16/32 partition) for a valid booting image (the image name must be MLO)
  • Load the content of the file “MLO” from a bootable device to internal RAM (the 128KB on-chip memory)
  • Execute the file “MLO” stored in internal RAM

圖二為 ROM Code 架構,由”Public ROM Code drivers” 可知 ROM code 支援如下裝置:

  • MMCSD (MultiMediaCard SD)
  • NAND
  • XIP (eXecute In Place)
  • SPI
  • USB UART
  • EMAC (Ethernet Media Access Control)

也就是說,系統一上電,ROM Code 會掃描上述裝置,以便找到 Bootable device。由於 ROM Code 只支援 FAT 檔案系統格式,所以 Bootable device 一定要是 FAT 檔案系統 (FAT12/16/32 檔案系統都可以)。
注意:該架構的 On-chip boot ROM 大小為 176 KB。

876b0e838fb04b1070fb52661c708cb7.png

Figure 2: ROM Code Architecture
圖三為 ROM Memory Map:

  • ROM Exception Vectors (0x20000-0x2001F): 該區段定義 Exception Handler 的位址。譬如: 0x20000 存放 Reset Handler 的位址,也就是板子一上電,第一個執行的地方,課程第七周有詳盡的說明,可參考此文件。詳盡的 ROM Exception Vectors 如表一所示。

a106b74d9618cd363d3525efc12e097c.png

Chart 1: ROM Exception Vectors

  • Public ROM Code CRC (0x20020): 由 0x20000-0x2BFFF 計算得出的四個位元組 CRC 值。
  • Dead loops (0x20080-0x200FF): 該區段定義預設的 exception handlers,其預設 handlers 都是執行 while (1) 迴圈,程式設計者可以定義相同名字的 exception handler,如此便能覆蓋 (override) 對應之預設 exception handlers。可參考 mini-arm-os 與 freertos 程式碼,以便了解其設計概念。
  • Code (started from 0x20100): ROM 程式碼
  • ROM Version (0x2BFFC-0x2BFFF): ROM Code Version

3c4465f838fe47dd47332f18a648594c.png

Figure 3: ROM Memory MapTwo Stage U-Boot Design - MLO (MMC Loader) & U-bootMLO (File Name: MLO)
AM335x ARM Cortex-A8 處理器的 On-chip memory (internal SRAM) 大小為 128KB (詳見 AM3358 Data Sheet),其 Memory Map 如圖四所示:

  • 1KB Secure Area: 此區域無法存取
  • 109KB downloaded image (0x402F0400-0x4030B7FF): 此區域最多可以容納 109KB 二進制檔案,此檔案可以存放在儲存裝置,或透過 UART/USB 傳輸,進而 ROM Code 載入至位址 0x402F0400。MLO 其實就是小型的 U-Boot Boot loader (其大小必須小於 109KB)。所以,其簡化版 U-Boot (MLO) 主要任務如下:
    • 初始化 DDR (512MB)
    • 一旦初始化 DDR 成功後,MLO 將 u-boot.img 載入至 DDR,並交由 U-Boot 接管。
  • 18KB area (0x4030B800-0x4030FFFF): ROM Code 使用該區域。

cb81a7935187f40243fb6c9a144f60a1.png

Figure 4: Memory Map for 128KB on-chip memoryU-boot (File name: u-boot.img)
此完整版 U-Boot 主要做額外 platform 初始化 (如:初始化網卡等),並載入 OS Kernel。為何需要 two-stage U-boot?
由於 On-chip memory 只能提供 109KB 給 Boot loader。然而,對於一個完整版的 U-Boot,其大小約 350KB (參考 ARMhf 編好的 u-boot)。為因應此限制,便需要一個小型的 U-boot (MLO),用以初始化 DDR 並將完整版 U-boot 載入至 DDR,再將控制權交給完整版 U-boot。下圖在 BeagleBoard Black 成功載入 MLO 與 U-Boot 終端機輸出。

859012b362000ddc3cd9209b50f0415e.png

相关文章

  • 观影简记:《Revolution OS(操作系统革命)》
  • 小练习:通过反汇编一段 C 代码观察栈行为
  • 那些年我拿到阿里巴巴 Offer 所参加的面试
  • 本文作者: John Chou
  • 本文链接: https://blog.joouis.com/2019/12/15/am335x-arm-cortex-a8-boot-sequence/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-ND 许可协议。转载请注明出处!

# embedded system course # embedded system # arm # cortex-a8 # rom # ram # u-boot # boot # os

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值