Arm linux系统启动流程简介
文章目录
- 介绍
- 一、Bootloader
- 1.总体流程
- 二、Linux内核
- 1.总体流程
- 2.具体流程
- 总结
介绍
Arm Linux 系统启动流程可分为四个部分:
1.引导加载程序(bootloader)
2.启动Linux 内核
3.挂载文件系统
4.等待应用程序执行
一、Bootloader
1.总体流程
Bootloader是系统上电后运行的第一段程序,主要做一些初始化任务,之后会将Flash中的Linux 内核拷贝到 RAM 中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核.
大致步骤是初始化RAM->初始化串口->检测处理器类型->设置linux启动参数->调用Linux内核映像。
二、Linux内核
1.总体流程
大致步骤流程:查找处理器内核类型和处理器类型->建立页表->跳转到 start_kernel()函数开始内核的初始化工作->调用 rest_init()函数创建系统的init 进程->挂载根文件系统->用cpu_idle()函数来使系统处于闲置(idle)状态并等待用户程序的执行
2.具体流程
Linux 内核的入口位于文件/arch/arm/kernel/head-armv.S 中的 stext 段。
该段的基地址就是bootloader的跳转地址。
该程序通过查找处理器内核类型和处理器类型调用相应的初始化函数(即获得处理器的 ID 号,RAM基地址,IO基地址等),
再(即将 RAM 基地址开始的 4M 空间的物理地址映射到 0xC0000000 开始的虚拟地址处),最后跳转到 start_kernel()函数开始内核的初始化工作
start_kernel是内核初始化的入口函数,它主要完成与硬件平台相关的初始化工作,该函数所做的具体工作有:
1.调用 setup_arch()函数进行内存结构的初始化,调用paging_init()开启 MMU,创建内核页表,映射所有的物理内存和 IO空间。
2.创建异常向量表和初始化中断处理函数;
3.初始化系统核心进程调度器和时钟中断处理机制;
4.初始化串口控制台(serial-console);
5.创建和初始化系统 cache,为各种内存调用机制提供缓存,包括;动态内存分配,虚拟文件系统(VirtualFile System)及页缓存。
6.初始化内存管理,检测内存大小及被内核占用的内存情况;
7.初始化系统的进程间通信机制(IPC);
8.调用 rest_init()函数创建系统的init 进程
9.Init 进程进行一系列的硬件初始化,然后通过命令行传递过来的参数挂载根文件系统。最后 init 进程会执行用 户传递过来的“init=”启动参数执行用户指定的命令
10.调用cpu_idle()函数来使系统处于闲置(idle)状态并等待用户程序的执行
总结
关于每个流程里面具体结构及做了什么事,可在具体的专栏中阅读
Arm linux系统启动流程简介相关推荐
- arm linux系统启动流程
===================================================== arm linux系统启动相关文章列表: arm linux系统启动流程 http://bl ...
- linux 系统重启过程,linux 系统启动流程
linux系统启动流程可以简单总结为以下几步 1)开机BIOS自检 2)读取MBR,进行MBR引导 3)启动bootloader 4)加载内核kernel 5)启动init进程,依据inittab文件 ...
- Linux 系统启动流程及其介绍
熟悉Linux系统启动流程可以更好的排除Linux系统在启动的过程中所遇到的错误,下面介绍Linux系统在启动过程. 开机,BIOS自检:检测外置设备,目的是为了把外围设备的信息提供给操作系统使用 寻 ...
- Linux 进内核,arm linux 启动流程之 进入内核
原标题:arm linux 启动流程之 进入内核 还是从编译链接生成vm 的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel/arch//kernel/head-armv.o ,而且我们 ...
- Linux系统启动流程(4)制作自定义linux之一
Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一 ...
- 嵌入式linux内核启动过程,嵌入式Linux:ARM Linux启动流程
ARM Linux启动流程大致为:bootloader---->kernel---->root filesystem.bootloader 是一上电就拿到cpu 的控制权的,而bootlo ...
- linux 打开设备 流程,Linux系统启动流程
1.linux系统启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分.负责完成对CPU.主板.内存.硬盘子系统.显示 ...
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
- linux系统启动流程详解
系统启动流程(CentOS6) Post加电自检: 开机检查cpu.内存.磁盘等是否存在 Boot Sequence: BIOS:Basic Input and Output System 按照BIO ...
最新文章
- 分布式定时任务xxl-job的常用姿势都集齐了,So Easy!
- tensorflow 代码阅读
- 机器学习--Hoeffding Inequality--界定概率边界
- 招聘 | B站前端架构师(直播)
- mongodb系列~mongodb慢语句(2)
- Oracle 检查点队列和HASH Bucket
- oracle ebs技术开发,Oracle EBS应用架构技术方案.pdf
- Bash:把粘贴板上的内容拷贝的文件中。(脚本)
- 复制远程服务器的文件 报错 scp: not a regular file
- java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?
- dos, echo写文件不追加回车的方法
- python 分隔符截取字符串_Python重新分割()保留分隔符的一部分作为第一个字符串的一部分,另一部分作为第二个字符串的一部分,...
- 20191204每日一句
- 深入浅出23种设计模式(最全面)
- uml 流程图符号 含义
- 常用的第三方ui框架
- 《伸手系列》之分布式锁Redssion入门和源码解析
- 北京三日自驾游-和狗狗的秦皇岛之旅
- 计算机开放电子书归档 2018 1
- r语言list 转换成 vector
热门文章
- 孝感app商城开发需要注意的问题
- Linux系统编程网络编程1
- Sony电脑重装系统Linux,索尼 SONYSVF15可以装windows8.1系统吗_索尼 SONYSVF15如何安装win8.1系统-系统城·电脑系统下载之家...
- C#代码生成之T4模板组成
- SEMI-SUPERVISED KNOWLEDGE TRANSFERFOR DEEP LEARNING FROM PRIVATE TRAINING DATA(PATE)论文笔记
- NoSQL数据库入门与实践——整理(一)
- 用sass替代node-sass
- 风口浪尖扬帆,汽配向“新”而生之路
- Qt之布局设置setLayout详解-源码剖析(下)
- 7-1 Forever (20分)