启动嵌入式间:资源有限的系统启动

启动一个程序,它是在芯片上电复位,以执行,块独立于操作系统而在。由于操作系统须要通过启动这个模块来载入和引导的。所以启动的英文术语是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。详细待见下一篇博文。

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2025-01-04 13:41:21

启动嵌入式间:资源有限的系统启动的相关文章

无法设置光驱位硬盘启动,制作双硬盘双系统启动菜单

前两天把光驱换成了硬盘,折腾了很久才搞定的双系统,这里备忘一下: 光驱坏掉了,刚好有一个以前从笔记本上拆下来的硬盘,就打算把这个硬盘装在光驱上: 我的笔记本是索尼,那个需要装到光驱位的硬盘是从这个笔记本上拆下来的,里面有个正版的win7系统,不过很久没用过了. 既然光驱坏掉了,就买个光驱位硬盘托盘,把那个硬盘再装回去用呗. 把硬盘装回去之后,本以为设置从光驱位启动系统,就能进入以前硬盘里面的那个系统.可是发现,笔记本是不支持从光驱位启动系统的!虽然从主硬盘启动,能看到装在光驱位的硬盘信息,也能使

制作启动U盘与定制多系统启动

制作启动U盘与定制多系统启动 说明:本文将讲述有关bootmgr引导启动与grub引导启动制作的相关经验,文中提到的知识谈不上完全正确,只是一些个人在制作U盘启动获得的心得,但我会尽力正确的解释清楚. 制作启动U盘 所需工具: Bootice:部署U盘/硬盘启动,必须. grub4dos:grub引导必备,必须. grubinst:功能类似Bootice,可选. HPUSBFW:惠普U盘存储格式化工具,可选. NTBOOTautofix:自动修复启动项,功能类似Bootice,可选. 其它工具类

嵌入式启动之一:资源有限型系统启动

启动即是芯片上电复位要运行的程序,启动作为一个模块独立于操作系统而在,因为操作系统需要通过启动这个模块来加载和引导的.所以启动的英文术语是boot loader.我对boot loader的定义包括两部分:1.加载os 2. 为了让os能够正常运行所要做的硬件和软件初始化工作. 我们常常看到boot loader这个词语用于arm引导linux,X86引导windows等等.可见一般意义上,能用上boot loader都是一些计算能力强并外挂SDRAM的SOC方案.那我们咱们去理解内存资源有限型

Windows 2003 Server 标准版启动问题解决(资源转贴)

维护的系统之一是部署在windows2003 Server标准版的服务器上,可能是由于某个应用问题,导致远程重启失败,害得我在机房呆了一早晨,可算是够折腾的.最后按照官方文档解决,刚放文档地址是:http://support.microsoft.com/kb/325375/zh-cn 内容是: 本文介绍在解决 Windows Server 2003 中的启动问题时可使用的一般过程. 成功的 Windows 启动包括以下四个阶段: 初始阶段 启动加载器阶段 内核阶段 登录阶段 如果在上述某个阶段出

Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans都初始化之后,SpringApplication.run()之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作. 接下来我们就运用案

Spring Boot 5:应用程序启动时初始化资源

需求:应用程序启动后,初始化基础数据.加密证书等操作. 可以使用CommandLineRunner接口来实现,在SpringBoot.run()之后完成资源的初始化工作. 注意:多个Runner需要顺序启动的话,可以使用@Order注解 package sun.flower.diver.modules.system.init; import org.springframework.boot.CommandLineRunner; import org.springframework.core.an

JMS 之 Active MQ 启动嵌入式Broke

一.如何启动active MQ 服务 (一).使用命令启动 a./usr/local/activemq-5.9.0/bin 目录下 ./activemq start 默认使用conf/activemq.xml 配置文件 b.[[email protected] bin]# ./activemq start xbean:file:../conf/activemq-slave1.xml 使用指定的配置文件启动 (二).代码启动broker 在程序中可以通过编码的方式启动broker,如果要启动多个b

docker 安装nginx   批量启动 容器间链接

docker 安装在这里就不详细解说了 安装nginx FROM centos RUN rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm RUN yum -y install nginx EXPOSE 80 ENTRYPOINT nginx && tailf /var/log/nginx/error.log docker-compose.ym

Spring 启动加载资源到内存

前言 在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载.初始化缓存.特定任务的注册等等.我找到了三种方式解决下面的问题. 1.使用PostConstruct注解 这种解决方法比较适用于: 在对于接口响应时间要求比较短,而接口中又需要频繁调用数据库查询,或者调用外部系统的情况下,为了加快接口的响应速度,在项目启动时,将通过途径获取的结果初始化到静态变量或者放置到各种缓存中. 首先静态代码块不行,静态代码块的执行顺序在Spring注解之前,当执行的时候,调用请求的Serv