以三星的四核处理器Exynos4412为例,该开发板属于armv7架构,contexA9系列,32bit,cpu4核心1.5GHZ主频,eMMC 大小型号为:KLM4G。

ARM里面,启动MMU以后,我们编程看到的地址都是虚拟地址,经过MMU以后才是具体的物理地址。

4412在上电以后,MMU是关闭的,也就是说这个时候其实和单片机差不多,可以直接跑裸机程序(裸机程序,就是直接对CPU进行编程),就跟单片机一样,但是,在Linux启动以后,操作系统就会把MMU打开,也就是说,虚拟地址就会出现。

1. BootLoader启动过程

ARM上电后,是从0地址开始取指令执行,先看:

可以看出0地址在iROM中,即上电以后会执行它芯片内部iROM中的一段程序,这段程序是固化在芯片内部的,厂家烧进去的,我们看不到。iROM这段程序作用是什么?

答:它会做一些初始化的工作,同时大部分开发板都可以从TF卡启动,也可以从EMMC启动,还可以从USB启动,这些功能的切换就是通过IROM来实现的。

OM 就是启动方式,例如设置如下:

IROM程序会根据管脚设置(板子上可以搞个拨动开关),选择从eMMC中寻找启动程序,如果找不到有效程序,再选择从TF卡启动。继续:

已经知道,上电后,先执行iROM程序,会选择好从哪里启动(假如是eMMC),所以,自然而然的就去外部eMMC芯片找启动程序,找到以后,首先会拷贝8K的程序到内部RAM执行(垫脚石),这8k程序在BL1(BootLoader1)中,在这里得8k是被三星固化了隐藏起来的,看不到。执行BL1干嘛呢?

BL1可以初始化系统时钟,UART,SDRAM等设备,然后会跑到BL2(Bootloader2)中,拷贝其内部程序到SDRAM中执行。BL2干嘛的呢?

BL2可以支持更强大的功能,它会把我们熟悉的真正的Bootloader(例如Uboot)拷贝到内存中执行,这样BootLoader就可以启动起来了。

2. 内核启动

上面介绍了加载引导程序的过程,包括固化在固件中的boot代码(看不见、不能改)和BootLoader(开发者移植)两大部分。但并不是所有嵌入式系统中,都必须有这两部分,有些就没有固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成,同样是从地址0x00000000处开始执行,而这个地址处安排的通常就是系统的BootLoader程序。

bootloader一上电就拿到了cpu 的使用权,它当然得干一些初始化的工作啊,比如关闭看门狗、设置cpu 的运行模式、设置堆栈等等比较急迫的事情。当然还要对主板的一些其他硬件进行简单的初始化,比如外部DDR内存、网卡、显示屏、nand flash等等的初始化工作,最后当bootloader 完成它的使命之后就会把cpu 的使用权交给下一部分代码:kernel(内核) 。


内核启动的作用就是进行系统硬件探测硬件驱动的初始化(比如SPI、蓝牙、以太网等等,所有的驱动都在里面,内核空间的相关工作已经完成,开始向用户空间转移,内核空间通过一个间接的initrd(一个虚拟的文件系统)向用户空间过度,然后开始挂载根文件系统。

3. 挂接文件系统

文件系统的百科解释:

文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

表现出来就是,可视化界面,用户对文件的复制、粘贴、删除等等操作。

文件系统实现对磁盘空间的统一管理,一方面文件系统对磁盘空间进行统一规划,另外一方面文件系统提供给普通用户人性化的接口。就好比仓库中的货架,将空间进行规划和编排,这样根据编号可以方便地找到具体的货物。而文件系统也是类似,将磁盘空间进行规划和编号处理,这样通过文件名就可以找到具体的数据,而不用关心数据到底是怎么存储的。

其过程:initrd ----> /sbin/init ----> /etc/inittab

initrd是一个虚拟的文件系统,里面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录,其目录有点像真的/,所以我们称之为虚拟的根文件系统,作用就是将kernel和真的根文件系统建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,并以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。

init执行完毕以后会启动系统内的/etc/inittab文件,来完成系统的初始化工作。

补充:Android系统 = 大改的Linux内核+Android文件系统

基础——ARM系统的启动流程(boot loader,Linux 内核,文件系统之间的关系)相关推荐

  1. 结合源码探讨Android系统的启动流程

    结合源码探讨Android系统的启动流程 由于本人能力有限,所考虑或者疏忽错漏的地方或多或少应该存在.同时,Android从启动过程开始,实际上就涉及多个技术难点和多种通信机制的知识点. 基于上面两个 ...

  2. 鸿蒙操作系统详细流程,鸿蒙系统的启动流程

    鸿蒙系统的启动流程 Liangkz 2021.04.11 Ver1.0 目录 1. 第一阶段:U-Boot启动 2. 第二阶段:汇编代码引导LiteOS-a内核 3. 第三阶段:内核LiteOS-a的 ...

  3. 鸿蒙系统分享,鸿蒙系统的启动流程学习分享

    鸿蒙系统的启动流程 Liangkz 2021.04.11 Ver1.0 目录 1. 第一阶段:U-Boot启动 2. 第二阶段:汇编代码引导LiteOS-a内核 3. 第三阶段:内核LiteOS-a的 ...

  4. Android系统 lk启动流程简析

    本篇文章是对初步学习Android系统lk启动流程的一个大致简介.方便掌握lk启动流程的大致框架,具体细节后续再进行更新 1. 前言 需要了解的文件类型: 1)编译LK的链接文件(.ld) 2)汇编文 ...

  5. Android系统的启动流程简要分析

    这是我结合网上的资料以及自己分析android4.4的源码整理的笔记,对整个安卓系统的流程启动进行了梳理,很多细节并未展开,只是简要的进行了介绍. 一.Android系统的架构介绍 Android的整 ...

  6. Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  7. linux开机引导进程是什么,Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  8. Android系统开机启动流程及init进程浅析

    Android系统启动概述 Android系统开机流程基于Linux系统,总体可分为三个阶段: Boot Loader引导程序启动 Linux内核启动 Android系统启动,Launcher/app ...

  9. arm裸机程序启动流程

    Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader),它是SOC上电后开始运行的地方, ...

最新文章

  1. hdu1754(简单线段树)
  2. php join a.id b.id,mysql求助 请问where a.id=b.id 和join on a.id=b.id 在效率上的区别
  3. C和指针之函数之在数组中找特定元素并返回指向该位置的指针
  4. Apollo进阶课程㊷丨Apollo实战——车辆与循迹驾驶能力实战
  5. 揭秘政企安全加速解决方案的架构与应用场景实践
  6. linux跨ip拷贝,Linux的虚拟机拷贝到另外的操作系统时,NAT方式的静态IP无效,一直是获取的DHCP动态地址...
  7. CanFestival字典生成
  8. 分布式ID(数据库多主模式,这些知识点你会吗
  9. python自动化写作_50行代码让python自动生成文章
  10. 微服务架构下的轻量级定时任务解决方案
  11. java营销活动动态引擎规则_JAVA规则引擎 Drools 教程
  12. 磁盘精灵 4.5 版本
  13. python pip什么意思_“pip install”和“python -m pip install”有什么区别?
  14. 使用android新特性:Material Design
  15. iOS PayPal集成和使用
  16. 如何自己学习51单片机
  17. Win系统 - BIOS设置中找不到U盘选项该怎么办?
  18. ubuntu mysql密码忘记了怎么办,ubuntu怎么查看mysql密码
  19. Support for password authentication was removed on August 13, 2021
  20. c语言程序设计授课进度安排表,12级C语言程序设计教学进度表

热门文章

  1. JDBC executeBatch批量插入数据
  2. 人工智能、机器学习、深度学习的区别
  3. matlab中scope是什么,matlab中的scope
  4. html中伪类的兼容性,css,ie8兼容性_CSS 伪类在IE8中样式无法生效,css,ie8兼容性,伪类 - phpStudy...
  5. Codeforces Round #742 (Div. 2)
  6. 英语口语测试软件在线,在线英语口语测试
  7. 短文本相似度在线计算_短文本相似度在线比较_短文本相似度在线查询_自然语言处理_百度AI开放平台
  8. ubuntu系统使用wireshark对websocket抓包
  9. Linux df -h
  10. python 安装 psycopg2 报错问题处理