一般而言嵌入式系统的启动思路详解

前言
看了一些教程,总感觉没头没尾,让我有一种知其然而不知其所以然的模糊的感觉,于是在看完不少资料后结合自己的感悟写下了这篇博客

不少人,都从uboot阶段开始介绍嵌入式系统的启动,然而uboot之前呢?是不是应该要有一个环境的准备?又或者说,没有操作系统的嵌入式系统是如何启动的?

首先上电以后芯片会在固化好的一个地址寻找第一个启动程序(在有操作系统的时候,这个引导程序也叫做bootloader),完成初始化工作,然后转跳到预定的一个地址来执行裸机程序(没有的操作系统嵌入式系统到这儿就算是启动成功)或者UBOOT程序。
bootloder会完成初始化CPU和相关的IO设备的工作(准备环境),之后将linux存入内存中

bootloder
bootloder 可以分为 boot 和 loader 两个部分来实现相应的功能
boot:
1、关闭看门狗, 中断 , MMU , cache(关掉这些的原因,主要是由于系统处于一些启动状态,不需要这种优化操作如看门狗(启动过程中,因为没有及时喂狗,直接重启了,那玩个锤子),cache(启动过程中出现bug,找起来不方便)。而且有些功能是没有准备好的,如MMU的地址映射表,中断的中断处理函数
2、配置系统时钟(时钟可是处理器的心脏,当然得先配好
3、配置SDRAM的控制器(行地址数,列地址数,多少块),
4、初始化堆栈(跑程序的必要条件,程序会自动将sp指针指向的地址,当作栈顶指针)
loader:完成初始化工作,然后转跳到预定的一个地址来执行裸机程序(没有的操作系统嵌入式系统到这儿就算是启动成功)或者UBOOT程序。

而uboot工作就是准备操作系统的运行环境,任务如下:
1、 初始化相关的硬件组件
2、初始化系统内存,准备将系统的控制权交给相应的系统
3、分配系统的资源
4、 提供相应的机制,用于定位和加载系统镜像
5、加载操作系统,并将控制权移交给操作系统

在U-boot完成初始化工作以后,它剩下的唯一工作就是加载并启动linux操作系统的内核了(uboot到这里就结束工作了)。当U-boot开始加载指定物理地址的操作系统内核以后,U-boot引导装入程序的使命就到此结束了,接下来系统由linux内核接管。

当linux内核开始启动以后,开始打印各种设备信息,此时做的工作就是对各个外设进行驱动初始化,让他们各就各位。在执行完这些操作以后就要开始挂载根文件系统了。

当内核完成挂载文件系统的工作以后,就要开始运行一个启动名为init的应用程序。此时,系统便进入了用户空间,在这种操作模式下,将不能再像内核进程中那样直接访问所有的资源权限。这也就解释了我们在编写程序的时候通过内核系统的调用来请求相应的内核服务。

用户空间进程以及应用程序都是在虚拟内存空间中执行的。虚拟内存空间由内核进行随机分配和管理,内核和处理器的内存管理单元(也就是MMU)配合,完成虚拟地址到物理地址的转换。这种体系结构的最大好处就是,一个用户进程的内存空间进程的错误不会引起其他内存空间的错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值