找回密码
 注册
关于网站域名变更的通知
查看: 629|回复: 4
打印 上一主题 下一主题

简单介绍一下ARM Linux启动过程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-7 10:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
. \- r1 u8 X6 @" B: ]* F
ARMLinux启动过程7 t8 |% O' I! u, {1 Y: g% b

( ^# Q4 X# L( s) b, C
' l$ O2 {' x9 ~0 C- H0 g# _: x  ^
由此可见启动流程分为四个步骤,分别是ROM Code -> x-loader -> U-BOOT -> kernel ,下面从四个阶段来进行分析。
  l8 ^0 ~# |) b2 v: {. t& V4 G+ b, O) }6 Y# A
1、第一阶段启动ROM-Code
* K+ ^0 t& Z; W$ v! {  v6 E* M, L! P8 o
        每一个芯片都会有一个片内ROM,在出厂时厂家在其中固化好了一段代码,不可更改,这段代码执行第一阶段的启动任务。当芯片上电后,这段ROM-Code会读取启动引脚配置(boot configuration pins),然后根据引脚配置情况来决定以哪种方式下载接下来的外部启动代码(指的就是x-loader),下载的方式可以是NAND, UART,或者SD/MMC卡。
, d; Q+ i7 Q! F% m) _  Z7 c8 H0 E7 I% e. {# w
        比如BBB板子上,如果上电时没有按住boot按键,那么ROM-Code从板子上的eMMC中的第一启动分区(boot partition)下载x-loader(就是通常板子上电后,电脑上弹出的大概70MB的盘符中的MLO文件);如果上电时按住了boot按键,那么ROM-Code从板子上的SD卡的第一启动分区(boot partition)下载x-loader(编译u-boot后得到的MLO文件,制作SD卡时这个文件连同u-boot.img一起放在第一分区,事实上SD卡分区以及文件的情况和eMMC中是一样的)。那么ROM-Code具体完成了哪些任务呢?
8 a) ~3 H) M3 W/ l
5 |+ s) F( s4 z# \9 o/ H- ^) U5 N* X. \step1:初始化最小运行系统,包括时钟初始化、片内SRAM初始化以及一些芯片级外设的初始化。
: F+ Y7 M$ g1 y
3 Z, s' s/ s2 G( C& \& A% g- _step2:读取系统启动引脚配置后,按相应的启动设备列表的顺序,依次访问这些设备直到下载x-loader到SRAM成功。
' R. W' c* m3 |) r1 T+ v
* ?3 v7 p' i! c7 Z9 M- H  n# ~# \step3:x-loader被下载到片内SRAM后,CPU控制权移交x-loader,ROM-Code任务结束。
; u. `+ J, q5 Y6 H& L7 N3 T3 M3 Z% ]$ q
Note:在step2中假若启动设备列表顺序是1、serial(UART3) , 2、SD card(MMC1), 3、NAND flash(eMMC),那么,- t" S5 c$ ], m' V$ @5 A2 e' H

0 ?1 \9 J3 Z) w. B, E; u  o        首先ROM-Code将发送一个ID到串口(串口3),此时主机在一定时间内响应了这个ID,那么ROM-Code将把接下来收到的数据(MLO)写入片内SRAM,写完后CPU控制权移交MLO。如果一定时间内主机没有进行响应,
( u: R2 G* ^3 n& O( G' @8 b  Y2 ]
        接着ROM-Code将在MMC1控制器上寻找SD卡,如果找到一个SD卡,那么读取第一启动分区(boot partition),接着扫描该分区根目录,在根目录下寻找名为MLO的文件,并将这个文件下载到片内SRAM,再把控制权移交MLO。事实上MLO文件包含了x-loader二进制文件以及一些头部信息,这些信息指示了MLO文件应该下载在片内SRAM的哪个起始地址以及文件大小。如果ROM-Code没有找到SD卡,% U5 H1 n3 N" W) D9 A& C, P$ t2 J

, S/ o+ K% O' m7 {- K' e4 y5 Y        最后ROM-Code将NAND flash的第一个分区寻找MLO文件,如果发现第一个分区损坏或者空白分区,那么尝试第二个分区(最多尝试4个分区),找到MLO文件同样将其下载到片内SRAM,在移交控制权。(对于eMMC将会进行相同的操作)。1 F+ @9 u% {- A& k; W& ^
       ( n6 ~* i1 Z1 Z2 c( X; V5 R
* c( {$ G( w! ^2 ?: h0 p( e* F
2、第二阶段启动x-loader: v# J" R* j7 k
8 L: `9 g9 m1 O7 s6 N* Q
         x-loader事实上是u-boot的一个简化分支而来,其源码目录结构和u-boot比较相似。接上步骤,他运行于片内SRAM中承担着下载第三阶段启动代码u-boot.img到系统片外的主要内存SDRAM的任务。
4 `$ N' G$ r: O/ I+ h/ n5 N/ i' \2 h2 B2 \" ?9 e
由于片内SRAM空间太小,所以u-boot无法在其中运行,而NAND flash也不支持XIP(eXecute In Place),所以只能将u-boot搬至片外主存SDRAM中运行,所以最后应该是x-loader、u-boot被烧写在NAND flash中(即MLO、u-boot.img被烧写在SD卡或者eMMC的第一启动分区中),上电后ROM-Code将体积较小的x-loader搬至片内SRAM中运行,而运行在SRAM中的x-loader又初始化片外SDRAM,并将NAND Flash中的u-boot下载至SDRAM,控制权移交u-boot。- V# A" d9 T' {+ f

$ x, i' ~" C1 Y) ], ~那么X-loader具体完成了哪些任务呢?# {& _. O) @7 J! l! u. \" N! |
游客,如果您要查看本帖隐藏内容请回复

9 s/ ?/ s& o* O1 P7 i2 c+ Z) p6 g. e0 n$ d4 Z% ~0 |' o

9 i1 U3 T. R$ g0 P! i' y( w
' b& O5 T  w( I0 X, J( c. S% \
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-1-7 18:16 | 只看该作者
    这个启动尽然还有阶段,头大
  • TA的每日心情
    奋斗
    2024-12-19 15:16
  • 签到天数: 94 天

    [LV.6]常住居民II

    4#
    发表于 2020-1-9 23:28 | 只看该作者
    学习学习

    “来自电巢APP”

    该用户从未签到

    5#
    发表于 2020-1-12 10:50 | 只看该作者
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-25 17:36 , Processed in 0.171875 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表