zoukankan      html  css  js  c++  java
  • 嵌入式启动之一:资源有限型系统启动

        启动即是芯片上电复位要运行的程序,启动作为一个模块独立于操作系统而在,因为操作系统需要通过启动这个模块来加载和引导的。所以启动的英文术语是boot loader。我对boot loader的定义包括两部分:1.加载os 2. 为了让os能够正常运行所要做的硬件和软件初始化工作。

               我们常常看到boot loader这个词语用于arm引导linux,X86引导windows等等。可见一般意义上,能用上boot loader都是一些计算能力强并外挂SDRAM的SOC方案。那我们咱们去理解内存资源有限型的嵌入式系统的启动呢?就以51为例。

               51体系SOC一般都是内置K字节级别的nor flash用于运行代码,并内置一块K级别较小的ram用于数据读写。很明显这种系统跑不了linux这种高大上的系统,那51的启动都干嘛呢?我们从程序开发流程说起:

               1)编写程序,编译,链接成可执行文件。一般在keil集成环境中。

               2)keil的二进制工具(类似gcc的objcopy)解释1)中的可执行文件,抽取code和data数据,生成带有加载地址的.HEX格式文件。记住是加载地址,而不是运行地址。

               3)烧写.HEX文件数据到nor flash,其根据的是文件中的加载地址。一般来说,代码段的加载地址和运行地址是一样的,这样才能在nor flash中跑起来。但是data是要放在内置ram区域才能可读写的,可是ram掉电会消失啊。所以data是先加载到nor flash的。即data的运行地址在ram区域,而加载地址在flash区域。

               4)上电复位后,启动代码会进行硬件初始化,例如时钟,看门狗,串口等等

               5)准备好栈,然后把data从加载的地方copy到ram的运行区域(链接地址)

               6)初始化好bss,然后就jump到主程序开始跑啦。

              简单的嵌入式系统一般没有os,就是上面的流程。这种系统的代码量一般比较小,全部放到内置的nor flash中,没有外挂的nand flash或者card。它可以支持读写卡,但是代码只放到内置的nor flash,而没有放到外置的卡中。

              事实上51也可以像arm那样引导操作系统的,当然操作系统不仅对内存有要求,对CPU计算能力也有要求,所以51是不能胜任跑linux的。但是51也能引导并跑简单的操作系统的,例如UCOS等等,只有ram足够大就可以。所以基于51的SOC系统也可以长得像S5PV210这种SOC的系统,代码是放在外置的nand flash或者card中,那启动就要成为一个独立的模块和U启动COS、应用程序放在外置的nand中,上电的时候先通过irom来加载启动的代码到iram中,然后跑启动代码,并在启动代码中引导os。具体待见下一篇博文。

  • 相关阅读:
    蛙蛙推荐:改进了一个DBAccess类,顺便说说啥是线程安全
    蛙蛙推荐:SQLServer优化资料整理
    快速配置Eclipse3.1.1+Tomcat5.0+Lomboz dodo
    建立asp.net应用程序提示:无法与服务器建立连接 dodo
    tomcat连接sqlserver配置 dodo
    如何让DNN页面中的html控件中的文本项显示为中文? dodo
    DropDownList 不能有多个项被选定 dodo
    转换DATAREADER为 dataset dodo
    使用ComponentArt.WebUI.for.Asp.net.3.0的TreeView控件 dodo
    ASP.NET的WEB项目不能添加WEB用户控件的解决 dodo
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/4026474.html
Copyright © 2011-2022 走看看