存储器以及BootLoader的总结
- 格式:doc
- 大小:18.50 KB
- 文档页数:3
存储器实验总结存储器是计算机系统中非常重要的组成部分,用于存储程序和数据。
在本次实验中,我们通过实际操控和操作存储器,加深了对存储器工作原理的理解,并学会了如何正确地使用存储器。
以下是我对本次实验的总结。
首先,在实验中,我们学会了如何选择适当的存储器型号和容量。
不同的计算机系统有不同的存储器需求,因此选择合适的存储器十分重要。
在实验中,我们分析了不同型号和容量的存储器的优缺点,并选择了最适合我们的计算机系统的存储器。
这一过程让我深入了解了存储器的工作原理和特点。
其次,在实验中,我们了解了存储器的层次结构。
存储器的层次结构是计算机系统中的一个重要概念,它以不同的速度和容量来组织存储器,以满足不同的存储需求。
在实验中,我们通过对比和分析不同层次的存储器的性能指标,如访问时间和存储容量,进一步理解了存储器层次结构的作用和优势。
这对于我们合理地设计和配置计算机系统的存储器十分重要。
第三,实验中我们学习了存储器的读写操作。
存储器的读写操作是计算机系统中的基本操作之一,因此我们必须掌握正确的读写操作方法。
在实验中,我们通过实际操作存储器,学会了如何正确地读取和写入存储器中的数据。
我们了解到存储器的读写速度是十分重要的,因此我们需要根据业务需求选择合适的存储器。
第四,在实验中,我们学会了存储器的容错措施。
存储器的容错措施是保证数据安全和可靠性的关键。
在实验中,我们学习了常见的存储器容错技术,如奇偶校验和纠错码等,以及如何正确地使用这些技术。
这对于我们保护存储器中的数据安全十分重要,特别是对于一些重要的计算机系统。
最后,在实验中,我们还学习了存储器的性能优化。
存储器的性能优化是提高计算机系统整体性能的重要手段之一。
在实验中,我们学习了存储器的性能瓶颈以及解决方法,如减少访问时间、提高带宽等。
这对于我们设计和配置高性能计算机系统的存储器十分重要。
总而言之,通过本次实验,我深入了解了存储器的工作原理和特点,学会了如何选择适当的存储器型号和容量,掌握了正确的存储器读写操作方法,学会了存储器的容错技术和性能优化方法。
式操作系统的镜像,包括使用外设端口如以太网、USB、串口、并口从开发计算机上下载,也可以从本地存储设备如FLASH、CF卡、DOC或硬盘读取镜像并且跳转执行。
在开发调试Windows CE系统的过程中,最常见的方法是通过以太网口从开发计算机下载操作系统镜像到目标设备,这种类型的BootLoader有一个专门的名字叫做Eboot,E就是Ethernet的首字母。
DeviceEmulator的BootLoader就是一个典型的Eboot。
除Eboot外,比较常见的还有使用串口端口、以Serial的首字母命名的Sboot,以及专用于PC原理机型的BiosLoader等。
1.2微软建议Windows CE的BootLoader所应实现的功能微软建议Windwos CE的Bootloader所应实现的功能主要有以下6项。
(1)Windows CE的BootLoader应该存放在嵌入式设备的非可易失的存储设备中,比如Flash存储器。
此外如果硬件支持的话,最好还应该对BootLoader所在的Flash存储块实行加锁(locking)以保护它在运行过程中不被破坏。
(2)BootLoader应该在加载Windows CE操作系统镜像的过程中对加载进度、状态及错误消息等信息进行提示输出,这一般通过一个目标嵌入式设备与开发PC的串口端口连接来实现。
(3)用户在开发Windows CE的BootLoader时,应该尽可能地利用微软所提供的支持库里的功能函数。
这样做不仅可以减小开发的工作量,也是为了保证所开发的BootLoader的软件质量。
(4)Windows CE的BootLoader不仅应该可以加载操作系统的镜像,也应该有能力加载BootLoader自身的镜像文件。
不仅是下载到嵌入式系统的RAM内存,还应该能够将操作系统的或者BootLoader自身的镜像写入系统的非可易失存储器中。
③2④(5)Windows CE的BootLoader应该有能力对所加载的镜像(操作系统的或者BootLoader 自身的)的数据执行校验,并且开发者要注意在校验完全通过之前不得将镜像的任何数据写入系统的非可易失存储器中。
单片机bootloader原理一、引言单片机是一种集成了微处理器核心、存储器和输入输出接口的微型计算机系统。
在单片机的开发过程中,bootloader(引导程序)被广泛应用,其作用是在系统上电或复位时,负责加载和启动应用程序。
本文将介绍单片机bootloader的原理和工作流程。
二、bootloader的作用bootloader是单片机系统的第一个运行的程序,其主要作用如下:1. 初始化系统的硬件资源,如时钟、中断等。
2. 加载和运行应用程序。
3. 支持固件更新,可以通过串口或其他接口加载新的应用程序。
4. 提供调试和故障排除的功能。
三、bootloader的原理bootloader的原理可以简要概括为以下几个步骤:1. 系统上电或复位后,单片机会从固定的地址开始执行代码,这个地址就是bootloader的入口地址。
2. bootloader首先会进行硬件初始化,包括时钟设置、中断向量表的初始化等。
3. 然后,bootloader会检查是否存在新的固件更新。
如果有更新,bootloader会加载新的固件到指定的存储空间。
4. 如果没有固件更新,bootloader会加载应用程序到内存中,并跳转到应用程序的入口地址开始执行。
5. 应用程序执行完毕后,bootloader可以对系统进行复位或其他操作。
四、bootloader的工作流程下面以一个简单的bootloader工作流程来说明其原理:1. 单片机上电或复位后,开始执行bootloader的代码。
2. bootloader首先进行硬件初始化,设置时钟、中断等。
3. bootloader会检查是否存在固件更新的标志。
如果有标志,则执行固件更新操作。
4. 如果没有固件更新标志,bootloader会加载应用程序到内存中,并跳转到应用程序的入口地址开始执行。
5. 应用程序执行完毕后,bootloader可以对系统进行复位或其他操作。
五、bootloader的优点bootloader具有以下几个优点:1. 灵活性高:bootloader可以根据需求加载不同的应用程序,实现系统的灵活升级和更新。
简述bootloader的作用
Bootloader(引导加载程序)是计算机系统启动过程中的一个关键组件,其作用是在计算机硬件初始化之后加载操作系统(如Windows、Linux等)或其他引导代码(如UEFI固件)。
具体来说,bootloader的主要作用包括:
1. 启动硬件初始化:当计算机上电或重启时,bootloader会首先负责初始化计算机硬件设备,如处理器、内存、显卡、硬盘等。
这确保了操作系统能够正确地与硬件进行通信和操作。
2. 加载操作系统:Bootloader会通过读取存储设备上的指定位置(如硬盘的引导扇区)中的操作系统映像文件,将其加载到内存中。
然后,它会将控制权转交给操作系统,使其开始执行。
3. 提供启动选项:有些计算机系统上可能安装了多个操作系统
或多个版本的操作系统。
Bootloader可以提供一个菜单或交互界面,供用户选择要启动的操作系统。
这使得用户可以在启动时选择不同的操作系统或配置。
4. 执行引导代码:除了加载操作系统,一些特殊的引导加载程
序还可以加载其他引导代码,如UEFI固件。
这些引导代码负责初始
化硬件和加载其他软件组件,以便计算机系统能够正常运行。
总之,bootloader在计算机的启动过程中起到了桥梁的作用,
负责初始化硬件、加载操作系统以及提供启动选项。
它确保计算机能够正确启动并运行所需的软件和操作系统。
Boot LoaderWindows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。
在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。
一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。
其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。
1.什么是BootLoader嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。
其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。
第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。
(1)什么是板级BSP?BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。
不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。
所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上层OS保持正确的接口,良好的支持上层OS。
(2)什么是Boot Loader在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。
一般来说,在嵌入式世界里BootLoader 是严重地依赖于硬件的,因此想建立一个通用的 BootLoader 几乎是不可能的。
C8051单片机BootLoader心得8051至今仍占据着MCU的大量市场,以其通用、价格低廉等众多原因而被学校和大多公司作为微控制开发的首选。
随着ARM等32位控制器的出现,使得8051的追随者对于其使用编程器烧片子的方式逐渐的难以接受。
不论是从易用性、以及程序的可靠性来说,都添加了诸多不便。
此时很多人想到了ARM中常用的BootLoader得概念,其实这是一个很好的方法。
要想在MCU中实现BootLoader,首先要求单片机具有IAP功能,或是可以对其自身的FLASH进行擦除、写入的功能。
其次要考虑FLASH的空间,毕竟加入一个boot的代码是需要付出代价的。
下面以C8051F340为例说明一下我的心得与体会。
1.整体规划分区作用说明中断向量区中断向量保存 1.1APP区应用程序区 1.2BOOT区BootLoader代码存放区1.31.1中断向量区中断向量区提供复位以及异常中断的跳转, 鉴于51的特点,这部分必须存放在0地址开始的区域。
1.2 APP区应用程序区存放用户应用程序,亦即boot操作区。
这部分可以存放在FLASH的任意区域。
下载程序时,bootloader需要将下载的数据写入该区。
正常启动时,bootloader需要让CPU跳转至此执行。
1.3 BOOT区BootLaoder代码存放区。
这部分可以存放在FLASH的任意区域。
2.实现方法地址作用说明0000H -- 0002H Boot入口地址2.10003H -- D_APP_LIMIT APP程序 2.2D_RUN_ADDRESS APP入口地址2.3D_BOOT_ADDR Boot程序 2.42.1 Boot入口地址8051上电后执行的第一条便是0x0000—0x0002处的指令,考虑到程序的通用性,此处必须跳转到Boot 程序区,以便从boot开始引导或是装入程序。
STARTUP.A51文件中:CSEG AT 0?C_STARTUP: LJMP STARTUP1这两条语句便是实现了程序的跳转。
飞思卡尔HS12 BootLoader开发流程1.设置BootLoader代码装载地址该操作在Prm文件中设置,在Flash分区中加入下列代码:ROM_F000 = READ_ONLY 0xF000 TO 0xFCFF;把所有BootLoader文件存储设置为都保存在ROM_F000中,代码如下:PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */ _PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */STARTUP, /* startup data structures */ROM_VAR, /* constant variables */STRINGS, /* string literals */VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment *///.ostext, /* eventually OSEK code */NON_BANKED, /* runtime routines which must not be banked */DEFAULT_ROM,COPY /* copy down information: how to initialize variables *//* in case you want to use ROM_4000 here as well, make surethat all files (incl. library files) are compiled with theoption: -OnB=b */INTO ROM_F000; //ROM_C000 /*, ROM_4000*/;2.设置进入BootLoadr 模式的flag该操作在start12文件中修改,常见的有I/O检测,延时,通信。
bootloader通俗解释【实用版】目录1.Bootloader 的通俗解释2.Bootloader 的功能和作用3.Bootloader 的种类和应用正文一、Bootloader 的通俗解释Bootloader,中文俗称“引导程序”,是计算机系统启动时运行的第一个程序。
它可以理解为一个“中介”,负责在操作系统启动前,协调硬件与软件之间的沟通,将操作系统从存储设备加载到内存中,并最终将控制权交给操作系统。
二、Bootloader 的功能和作用1.硬件初始化:Bootloader 负责对计算机硬件进行初始化,包括内存、外设、总线等,为操作系统运行做好准备。
2.加载操作系统:Bootloader 将操作系统从存储设备(如硬盘、U 盘等)中读取到内存中,为操作系统的启动提供支持。
3.设置启动参数:Bootloader 可以根据用户需求,设置不同的启动参数,例如选择不同的操作系统、进入 BIOS 设置等。
4.诊断和自检:Bootloader 可以对计算机硬件进行自检,诊断硬件是否存在问题,并在启动时显示相关信息,方便用户了解系统状态。
三、Bootloader 的种类和应用1.BIOS:BIOS(Basic Input/Output System,基本输入输出系统)是一种最基本的 Bootloader,主要应用于早期的计算机系统。
它主要负责硬件的初始化和操作系统的加载。
2.UEFI:UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是一种更先进的 Bootloader,主要应用于现代计算机系统。
相较于 BIOS,UEFI 具有更好的兼容性和可扩展性,可以支持更多的硬件设备和操作系统。
3.GRUB:GRUB(GNU GRand Unified Bootloader,GNU 统一引导加载程序)是一种开源的 Bootloader,广泛应用于 Linux 系统。
1、简述Bootloader的功能和工作原理。
答:Bootloader的功能是硬件初始化,如CPU、SDRAM、Flash、串行口;引导操作系统;下载程序(串口、网口、USB);烧写flash;工作原理:Bootloader相当于PC机中的BIOS,只是BIOS引导的是硬盘启动分区MBR 指向的XP、WIN7、Adroid-X86、Snow leopard、LILO,而Bootloader的主要任务就是将内核映像从闪存MDT读到RAM中,然后跳转到内核的入口点去运行,也即引导嵌入式操作系统。
Bootloader依赖于硬件,带有BSP,并根据BSP中指定的信息初始化目标板硬件系统,包括硬件I/O配置寄存器、存储器、操作系统所需的参数配置等。
2、简述Linux虚拟内存管理的特点。
答:Linux系统采用了虚拟内存技术,存在着两个内存空间:虚拟内存空间和物理内存空间;处理器运算器和应用程序设计人员看到的只是虚拟内存空间。
采用了虚拟存储技术之后,一个应用程序被执行时要进行两次映射:第一次是映射到虚拟内存空间,即用虚拟地址为程序编址;第二次是映射到物理内存空间,即把要运行的程序段复制到物理内存,确定程序的物理地址。
为了提高速度,第二次映射的这两项工作是由硬件和软件共同来完成的。
承担这个任务的硬件为MMU,而软件就是操作系统。
第二次映射时要建立一张软件映射表,把已复制到物理内存的程序段的虚拟地址与物理地址的对应关系用这个表格记录下来,作为存储管理单元MMU访问的依据。
使用虚拟内存,处理可以运行一个大于实际物理内存的应用程序,程序段在两个内存中换入和换出,处理器似乎拥有了一个大于实际物理内存的内存空间。
虚拟内存空间的大小是由程序计数器的寻址能力来决定的,如ARM的虚拟内存空间就为4GB。
3、简述Linux虚拟文件系统的特点和工作原理。
答:为了能使用各种不同的文件系统,Linux构建了一种“虚拟文件系统”VFS(Vitual File System),来隐藏不同文件系统的差异和实现细节,使用户可用统一的方法对处理不同文件系统中的文件。
Bootloader的概念和作用(1)Bootloader的概念和作用Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于 PC 机上的 BIOS。
在完成对系统的初始化任务之后,它会将非易失性存储器(通常是 Flash或 DOC 等)中的Linux 内核拷贝到 RAM 中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。
由此可见,bootloader 和 Linux 内核有着密不可分的联系,要想清楚的了解 Linux内核的启动过程,我们必须先得认识 bootloader的执行过程,这样才能对嵌入式系统的整个启过程有清晰的掌握。
(2)Bootloader的执行过程不同的处理器上电或复位后执行的第一条指令地址并不相同,对于 ARM 处理器来说,该地址为 0x00000000。
对于一般的嵌入式系统,通常把 Flash 等非易失性存储器映射到这个地址处,而bootloader就位于该存储器的最前端,所以系统上电或复位后执行的第一段程序便是 bootloader。
而因为存储 bootloader的存储器不同,bootloader的执行过程也并不相同,下面将具体分析。
嵌入式系统中广泛采用的非易失性存储器通常是 Flash,而 Flash 又分为 Nor Flash 和Nand Flash 两种。
它们之间的不同在于: Nor Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。
而Nand Flash并不支持XIP,所以要想执行 Nand Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。
实际应用中的 bootloader根据所需功能的不同可以设计得很复杂,除完成基本的初始化系统和调用 Linux 内核等基本任务外,还可以执行很多用户输入的命令,比如设置 Linux 启动参数,给Flash 分区等;也可以设计得很简单,只完成最基本的功能。
一、BootLoader是怎么下载应用程序的?应用程序的写入可通过S19文件。
S19文件为飞思卡尔推荐使用的标准文件传送格式,是一段直接烧写进芯片的ASCII码格式:记录类型、记录长度、存储地址、代码数据和校验码5个部分组成每一行总是以S开头,后一位跟着的数据表示改行记录的类型。
S0:说明性信息,非程序数据S1:程序数据,且地址为16位S2: 程序数据,且地址为24位S9:整个S19文件的结束行浅谈BootLoader中的Flash与RAM划分:二、为什么要划分出一块RAM区?对P-Flash擦除与写入操作的时候,不允许同时对其进行读取,故此,对Flash的擦除、写入以及CAN终端信号的处理代码,应复制到RAM中运行。
怎么做?(在飞思卡尔XET256中,这一功能可通过关键字RELOCATE_TO实现。
)因此在划分Flash的同时也应对RAM进行划分,以实现这一功能。
(定义RAM的关键字为READ_WRITE)这样做后得到什么样的结果?划分出一个与P-Flash大小相等的一块RAM区三、关于BootLoader中的地址分配问题飞思卡尔16位单片机复位后总是从优先级最高的中断向量地址0xFFFE处取第一条执行指令。
因此,BootLoader 可执行代码的首地址应安排在此处,以保证上电后BootLoader最先执行。
这可以通过在prm文件中定义VECTOT 0 实现,即将VECTOR 0 定义为Bootloader程序的入口地址。
而应用程序也同样希望对VECTOR 0 定义,以实现在单片机上电后直接执行应用程序的目的。
由于存在这一中断资源冲突,因此,BootLoader在刷写时需要对应用程序的中断向量表进行重新分配。
四、通信协议BootLoader的通信协议的目的是什么?实现BootLoader于上位机之间的命令和状态传输怎么做?在标准的CAN协议基础上,定义一套简单的通信协议。
该协议中所使用的命令和状态均以报文ID表示,即每一个ID代表一个特定的命令或状态。
Bootloader学习笔记一.what is bootloader?Bootloader是一种独立的程序,类似于Application程序,尽管体积小,但具备启动代码、中断、主程序(Boot_main函数)和操作系统(可选)等“全部五脏”。
百度百科的词条解释:Bootloader是在加电后执行的第一段代码,完成CPU及相关硬件的初始化后,将操作系统映像或固化的嵌入式应用程序装载到内存,并跳转到操作系统空间启动运行。
下面是学习bootloader的系统路线:1.了解bootloader的定义:Bootloader是嵌入式系统在启动时执行的第一段代码,它完成硬件初始化,加载操作系统或固件。
2.掌握bootloader的工作原理:当系统开机时,CPU执行的是bootloader的代码,它读取存储设备(如硬盘,U盘,SD卡等)中的操作系统镜像或固件,加载到内存中,并进行跳转。
3.了解常见的bootloader的类型:如U-Boot,Grub等,并了解它们的特点和适用场景。
4.学习bootloader的开发:包括硬件初始化,文件系统的读取,代码的跳转等。
5.掌握bootloader的应用:比如系统升级,系统恢复等。
二.为什么需要bootloader?Bootloader是用于启动操作系统的引导程序,它是计算机启动过程中的第一个执行的程序。
需要Bootloader的原因有以下几点:1.引导操作系统:Bootloader负责读取和加载操作系统,并将控制权转交给操作系统。
2.进行硬件初始化:Bootloader初始化计算机硬件,确保操作系统能够正确识别和使用硬件。
3.提供系统恢复选项:Bootloader可以提供系统恢复选项,例如进入安全模式或恢复到原始配置。
4.实现多操作系统启动:Bootloader可以用于启动多个操作系统,例如通过引导菜单选择启动Windows或Linux操作系统。
因此,Bootloader是计算机启动过程中不可或缺的一部分,它起到了重要的辅助作用。
存储器实验实验总结
以下是存储器实验的实验总结:
实验目的:
通过实验,理解存储器的工作原理,学习如何通过操作存储器实现数据的读写。
实验原理:
存储器是计算机中非常重要的一部分。
它可以存储数据,包括程序和数据。
存储器分为随机存取存储器(RAM)和只读存储器(ROM)两种类型。
RAM存储器可以读写,ROM存储器只读不写。
存储器根据存储单元长度的不同,又可分为字节存储器、字存储器和块存储器。
实验步骤:
1. 准备实验设备:单片机、存储芯片、PC机等。
2. 将存储芯片插入到单片机的适配器中,连接到PC机上。
3. 打开单片机的开关,启动PC机。
4. 在PC机上打开编写好的程序,将程序下载到单片机中。
5. 通过单片机的读写指令,将数据写入存储芯片中。
6. 通过单片机的读指令,从存储芯片中读取指定数据。
7. 程序执行完毕后,可以通过单片机的清零指令清空存储器中的数
据。
实验结果:
通过实验,可以发现存储器的读写速度非常快,可以存储大量的数据。
同时,在读写数据时需要注意数据的地址和格式,否则数据可能会被误读或写入错误的地址。
实验结论:
存储器是计算机中重要的组成部分,掌握存储器的读写原理对于实现计算机的高效运行非常重要。
在进行存储器实验时需要注意数据的格式和地址,避免数据的错误操作。
U-Boot之一:BootLoader 的概念与功能一般情况下嵌入式Linux 系统中的软件主要分为以下几部分:1) 引导加载程序:其中包括内部ROM 中的固化启动代码和BootLoader 两部分。
内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。
有的芯片比较复杂,比如Omap3 在flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。
而S3C24x0 则很简单,只有Norboot 和Nandboot。
2) Linux kernel 和drivers。
3) 文件系统。
包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。
4) 应用程序。
用户自定义的应用程序,存放于文件系统之中。
在Flash 存储器中,他们的分布一般如下:但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader 参数区,等等。
1.2 在嵌入式Linux 中BootLoader 的必要性Linux 内核的启动除了内核映像必须在主存的适当位置,CPU 还必须具备一定的条件:但是在CPU 刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在主存中运行程序,更不可能处在Linux 内核启动环境中。
为了初始化CPU 及其他外设,使得Linux 内核可以在系统主存中运行,并让系统符合Linux 内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(Boot Loader)。
而BootLoader 并不是Linux 才需要,而是几乎所有运行操作系统的设备都需要。
我们的PC 的BOIS 就是Boot Loader 的一部分(只是前期引导,后面一般还有外存中的各种BootLoader),对于Linux PC 来说,Boot Loader = BIOS + GRUB/LILO。
Bootloader 介绍bootloader 的定义:相当于pc 机的BIOS,在操作系统启动内核运行之前运行的一段小程序,通过这段小程序我们可以初始化cpu 内部的硬件设备,建立内存空间映射范围,从而将系统的软硬件环境带到一个合适的状态,以便最终调用os 内核准备好正确的环境。
可以得出bootloader 主要有2 个任务,1 是初始化cpu 内部的硬件设备,2 是将os kernel 带到内存中去。
在讲bootloader 之前,我们先讲讲pc 机的启动过程,pc 机中有bois,这个是固化在硬件的,当pc 机一加电以后,bios 就会自己启动,完成硬件检测和资源的分配,然后将硬盘中的引导程序调入内存,然后把控制权交给引导程序,引导程序主要的用途就是将操作系统的kernel 调入内存,然后跳转到内核的开始地址,然后os 就开始启动了。
就pc 而言,启动的过程相对复杂,从bios--->引导程序(grub 等)---->os但是嵌入式系统来说,他没有bios 这样硬件,所以它的启动过程全部都是交给bootloader 去完成的。
bootloader 是放在flash 的最前面的位置,原因是:系统在加电或复位的时候,所有的cpu 通常都从cpu 制造商预先安排地址开始执行的,(通常是0x00000000 位置),所以bootloader 通常是放在flash 中的最前面的位置。
这是一个简易的flash 分布图,bootloader 在flash 的最前端。
关于bootloader 的启动过程还可以分为两种,1 是单阶段,2 是多阶段的现在很多的bootloader 是2 个阶段的stage 1 的步骤(用的是汇编)。
bootloader详细介绍Bootloader对于计算机系统来说,从开机上电到操作系统启动需要⼀个引导过程。
嵌⼊式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。
6.1.1 Bootloader介绍Bootloader是在操作系统运⾏之前执⾏的⼀段⼩程序。
通过这段⼩程序,我们可以初始化硬件设备、建⽴内存空间的映射表,从⽽建⽴适当的系统软硬件环境,为最终调⽤操作系统内核做好准备。
对于嵌⼊式系统,Bootloader是基于特定硬件平台来实现的。
因此,⼏乎不可能为所有的嵌⼊式系统建⽴⼀个通⽤的Bootloader,不同的处理器架构都有不同的Bootloader。
Bootloader不但依赖于CPU的体系结构,⽽且依赖于嵌⼊式系统板级设备的配置。
对于2块不同的嵌⼊式板⽽⾔,即使它们使⽤同⼀种处理器,要想让运⾏在⼀块板⼦上的Bootloader程序也能运⾏在另⼀块板⼦上,⼀般也都需要修改Bootloader 的源程序。
反过来,⼤部分Bootloader仍然具有很多共性,某些Bootloader也能够⽀持多种体系结构的嵌⼊式系统。
例如,U-Boot就同时⽀持PowerPC、ARM、MIPS和X86等体系结构,⽀持的板⼦有上百种。
通常,它们都能够⾃动从存储介质上启动,都能够引导操作系统启动,并且⼤部分都可以⽀持串⼝和以太⽹接⼝。
本章将对各种Bootloader总结分类,分析它们的共同特点。
以U-Boot为例,详细讨论Bootloader的设计与实现。
6.1.2 Bootloader的启动Linux系统是通过Bootloader引导启动的。
⼀上电,就要执⾏Bootloader来初始化系统。
可以通过第4章的Linux启动过程框图回顾⼀下。
系统加电或复位后,所有CPU都会从某个地址开始执⾏,这是由处理器设计决定的。
⽐如,X86的复位向量在⾼地址端,ARM处理器在复位时从地址0x00000000取第⼀条指令。
存储器以及BootLoader的总结
在大学的时候很少关心单片机内部存储器的结构及应用,只是大概的知道RAM和ROM的区别,甚至只是知道程序下载到ROM中就能运行了。
其他的如何工作程序如何启动的就不了了知了。
因此在接触嵌入式的时候就会出现很多盲区。
在此本人将工作三个多月以来接触到的一些关于嵌入式新的理解分享给大家,有什么错误的地方在所难免,希望大家给予指正。
本文引用地址:/article/221309.htm
RAM和ROM在单片机中的相关应用
ROM和RAM指的都是半导体存储器,ROM是ReadOnlyMemory的缩写,RAM是RandomAccessMemory的缩写。
ROM在系统停止供电的时候仍然可以保持数据,而RAM 通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
RAM有两大类,一种称为静态RAM(StaticRAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU 的一级缓冲,二级缓冲。
另一种称为动态RAM(DynamicRAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM 相比SRAM要便宜很多,计算机内存就是DRAM的。
DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDRRAM、RDRAM、SGRAM以及WRAM等。
所谓内存就是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的“动态”,指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。
ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。
另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。
简单来说,最原始的单片机比如at89c51,内部集成了ROM,RAM。
ROM用来存储编好的程序、常数、表格等,当单片机掉电ROM中的数据不会丢失,因此单片机掉电再上电还会继续运行;RAM可以存放用户的临时变量、还有单片机内部的特殊寄存器等,单片机掉电后数据会丢失,当在上电后程序执行,重新初始化寄存器和变量的值。
在这里简单说一下MCS-51的程序执行流程,MCS-51单片机的存储器组织结构,采用典型的哈佛结构,即程序存储器和数据存储器完全独立,拥有各自的寻址系统,包括片内数据存储器与片外数据存储器都拥有自己独立的寻址系统。
所以,在地址空间上允许重叠。
如:程序存储器的地址空间中有0000H这个单元,片内数据存储器也有0000H这个单元,片外数据存储器中还有0000H这个单元。
89S51片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。
在这里会跳转到main 函数,但是据说在跳转到main函数之前,还会做一些判断的处理,具体没有研究过。
Flash在嵌入式系统中的应用
现在很多的芯片内部都是用flash,或者是外挂Flash来存储程序。
目前的Flash主要有两种NORFlash和NADNFlash。
NORFlash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NORFLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。
NANDFlash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。
用户不能直接运行NANDFlash上的代码,因此好多使用NANDFlash的开发板除了使用NANDFlah以外,还作上了一块小的NORFlash来运行启动代码。
一般小容量的用NORFlash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NANDFLASH。
NORFlash可以拥有SDRAM的接口,拥有更多的地址线来方便读取内存中的每一个字节;NANDflashAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于flash的管理和需要特殊的系统接口。
SerialFlash拥有spi的接口可以页读、任意地址读。
并且它可以有四线SPI,双线SPI 的DDR接口。
它可以利用spi的外部地址总线的方式来直接在外部flash中运行程序,不过运行速度是个有待考虑的问题。
嵌入式BootLoader
在嵌入式中一些产品中,采用的启动方式中,根据不同的芯片结构而不同。
拿计算机的启动来说,计算机引导加载程序由BIOS和位于硬盘MBR中的OSBootLoader组成,其实BIOS就是一段固化程序,现在很多嵌入式的芯片内部都会有一段类似的程序来,这段程序的用途通俗的讲就是来加载BootLoader的。
计算机也一样,BIOS在完成系统硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OSBootLoader,BootLoader的主要任务就是将内核映像从硬盘读到RAM中,然后跳转到内核的入口点运行,即开启操作系统。
我们常说的嵌入式的BootLoader其实就是和上面提到的OSBootLoader差不多,只不过很多嵌入式的CPU没有BIOS那样的固化程序,他们上电复位到0x0000000地址后一般是BootLoader的开始地址。
有些嵌入式的CPU会有片内的ROM,会有一段固化的程序,去加载BootLoader。
简单来说BootLoader有两种模式,一种叫做DownLoader,一种叫做loader;DownLoader 这种模式中主要是程序员开发阶段需要一种模式,这种模式主要是通过调试器将程序代码下载到内部RAM中去,然后通过BootLoader写到目标机的Flash或者其他存储设备中去。
这
种模式只是在开发人员在项目开发阶段使用的一种模式。
在项目完成后的成品中,BootLoader会一直工作在loader模式中。
其大概做的事情就是硬件设备初始化,为BootLoader 以后的工作设定先决条件;设置堆栈、检测系统内存映射,将系统映像或者程序代码段从Flash上读取到内部RAM中,有的系统会加载到SDRAM中,还有的会直接在外部FLASH 上运行。