0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对于系统启动,bootloader的功能的简单分析

Q4MP_gh_c472c21 来源:互联网 作者:佚名 2018-02-05 10:23 次阅读

这几天一直在纠结于系统启动,bootloader的功能等等,没有系统学过所以总是想不明白,也没有系统的文章,总是对一些细节困惑。最近又被分配了应用程序的任务,担心以后再也没机会看驱动这边的东西了...

今天看了一下mmu相关的,都是嵌入式系统的,pc可能有很大不同

mmu,硬件设备(似乎也有软件实现?),实现虚拟地址到物理地址映射,cpu的指令都是在虚拟地址上执行的(这么说似乎也不准确),或许该说是在没有mmu的时候,cpu的地址是虚拟地址同时也是物理地址(因为没有去映射,直接输出到地址线上了),mmu可以当坐中间的翻译,系统上电后,cpu自然要从某一处读指令,那么我们要做的就是把初始化系统的代码(请允许我叫他bootloader)放在那,

这时候其他外设都(或许有的可以?)驱动不了(cpu不会),cpu的一些工作状态也不一定是我们想要的(寄存器的值),那么放在这的代码就要设置一下cpu的参数(比如关中断),也可以检测一下硬件什么的,比如往某个地址写个什么,但是终极目标是加载OS,驱动周边设备供应用工作

对于系统启动,bootloader的功能的简单分析

关于这个放指令的地方,一般(从来都是)放在rom里,flash、eeprom什么的,这里速度比较慢,运行个bootloader可以(汇编),程序还是要放到ram上(c语言还要堆栈的,不像汇编不要动态内存,堆栈的sp也要往哪分),比如sdram什么的,嵌入式的话就是知道从rom里拷到ram里了,这里你要知道放到哪,那么你就又要知道这个系统硬件怎么连的,ram规格什么样的才能知道物理地址,要不然cpu不知道给你放到哪,放完了跳过去启动就行了,跳过去的方法还是设置一下寄存器什么的

这里有个问题就是不同设备物理地址连的不一样(一般来说很多时候都是不连续的甚至),那么操作系统控制起来就有点麻烦了,每个设备都要重新设置寄存器地址啊,系统和程序分配的地址啊什么的,而且很可能某个应用申请不到连续的地址,用指针加加减减的很麻烦

于是诞生了mmu,在bootloader里配置好(似乎一般来说?),他把所有的物理地址按你的要求映射的虚拟地址,不连续的连续了,不统一的统一了(需要根据不同的设备编写不同的bootloader,但是这似乎比编写写操作系统轻松),需要说明的是mmu配置了一个寄存器存放的地址映射的表格的物理地址基址,开启mmu以后的cpu指令都会根据那个表格翻译了。

操作系统回对虚拟地址设置访问权限,有的只能操作系统涂改,有的分给用户,用户的程序不能随便改操作系统的的虚拟内存范围(这其中就有cpu寄存器之类的),但是cpu也提供了修改它们的接口,这其实是防止意外发生啦,比如你的指针乱指。

再来想想现在的dta的启动,看看能想通多少。

1、内置rom的启动程序(或许也叫bootloader)启动flash里的bootloader,起始地址0xbfe00000(物理地址哦,ps:还可以设置是否效验什么的。。);

2、flash的bootloader读取某处的配置信息,获得应用程序的在flash中的物理地址,然后把应用程序拷到ram里,然后跳过去跑应用,入口应该是个操作系统入口吧

接下来就是我根据各种网上资料对我现在看得这个bootloader的yy

该bootloader的确分两步,但是不知道这两部分别干什么暂时假设:

第一步设置一下cpu、内存控制器什么的寄存器,算是最初始的初始化,gpio引脚点亮一个led说明一下,然后把stage2的文件找个ram的地方展开,运行stage2

第二部也就是stage2,初始化串口(关于串口我实在有几千字的吐槽不提)供调试以及输出信息什么的(似乎嵌入式全部提供串口,而且都会从串口接收发送数据之类的,难道是因为串口驱动起来很简单?),再玩一下led,这时候可以找一下哪些物理地址可以用,不过这里这个嵌入式系统似乎哪些可以用都是之前就定好了的?然后就按之前说的从“定好的”地方(flash某处)读取配置信息,挑一个程序映像,并挑一个ram位置作为目的地拷过去,然后启动那个程序!

那个程序一般来说是个操作系统了,他会建几个任务运行什么的

不过很令我沮丧的是我看的关于bootloader的文章表示不要再os启动前开启mmu。。。关于os和bl实在还有很懂地方不懂啊,不知道14号前这个应用搞得出来不。。

不知道各位看这块的时候,是不是也有同感啊。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3372

    浏览量

    128132
  • bootloader
    +关注

    关注

    2

    文章

    230

    浏览量

    45031
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    17899

原文标题:嵌入式er日常!最近一直纠结于MMU,bootloader,dta....

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MQX操作系统启动到main函数的过程

      当一个嵌入式操作系统上电的时候,是如何从硬件跳转到软件的main函数里面的呢?许多学习嵌入式软件的人一开始都会有这样的疑惑,今天这里将详细介绍MQX系统启动到main函数的这个过程,这个过程
    发表于 11-08 15:48 818次阅读
    MQX操作<b class='flag-5'>系统启动</b>到main函数的过程

    TL3588--系统启动卡制作及系统固化

    TL3588--系统启动卡制作及系统固化
    的头像 发表于 01-25 09:50 1109次阅读
    TL3588--<b class='flag-5'>系统启动</b>卡制作及<b class='flag-5'>系统</b>固化

    TLT507-Linux系统启动卡制作及系统固化

    TLT507-Linux系统启动卡制作及系统固化
    的头像 发表于 01-26 16:54 1295次阅读
    TLT507-Linux<b class='flag-5'>系统启动</b>卡制作及<b class='flag-5'>系统</b>固化

    BootLoader启动代码分析

    BootLoader启动代码分析
    发表于 08-04 10:09

    Linux和Windows系统启动过程的简单分析

    Linux和Windows系统启动过程的简单分析 对于Windows系统的使用和操作,大家应该都比较熟悉,而
    发表于 08-28 11:27

    IAR系统启动流程及修改方法

    硬件初始化和软件运行环境初始化两个部分的工作。一、系统硬件初始化对于硬件初始化,执行步骤流程如下:图‑1CPU复位时,会从系统启动程序代码cstartup中的__iar_program_start函数
    发表于 08-06 13:57

    基于ARM-μCLinux嵌入式系统启动引导的实现

    基于ARM-μCLinux嵌入式系统启动引导的实现:介绍了 ARM-μCLinux 嵌入式系统的结构组成,重点分析了 ARM--μCLinux 嵌入式系统启动引导的过程实现该
    发表于 06-25 08:14 36次下载

    BootLoader启动引导方式分析

    BootLoader启动引导方式分析 在中大规模的嵌入式系统开发中,往往需要BootLoader系统
    发表于 03-29 15:09 2328次阅读
    <b class='flag-5'>BootLoader</b><b class='flag-5'>启动</b>引导方式<b class='flag-5'>分析</b>

    系统启动过程

    系统启动过程系统启动过程主要由一下几步组成(以硬盘启动为例):1. 开机2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:00003. 将硬盘第一个
    发表于 10-11 12:17 2104次阅读

    改进的直接转矩控制系统启动方法

    改进的直接转矩控制系统启动方法
    发表于 01-21 11:54 1次下载

    bootloader模式怎么进入

    对于很多安卓手机用户们来说,相信刷过机的用户们一定对Bootloader模式不会陌生,Bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后引导
    发表于 11-10 16:59 4.8w次阅读

    如何实现简单bootloader功能

    考虑到瑞萨的MCUBoot的ROM占用和某些客户的需求,本篇主要讲述在不使用瑞萨MCUboot驱动下,如何实现简单bootloader功能
    的头像 发表于 09-06 13:13 2010次阅读

    UM2012_osxMotionXX系统启动

    UM2012_osxMotionXX系统启动
    发表于 11-22 19:24 0次下载
    UM2012_osxMotionXX<b class='flag-5'>系统启动</b>

    一张图了解嵌入式系统启动流程

    如下图所示是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为4个阶段,分别是第一阶段 bootloader,第二阶段uboot,第三阶段内核启动,第四阶段app
    发表于 03-07 09:44 524次阅读

    linux双系统启动项设置

    在使用双系统的时候,我们需要设置启动项来选择要启动的操作系统。在Linux系统中,设置双系统启动
    的头像 发表于 11-28 15:05 443次阅读