当前位置: 首页 > news >正文

做美食网站的项目背景海外发布新闻

做美食网站的项目背景,海外发布新闻,wordpress怎样做单页网站,西安到北京防疫政策Windows CE最大程度继承了桌面版Windows的丰富功能#xff0c;但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里#xff0c;一款CE系统通常只会针对某一种硬件平台生成。 一般来说#xff0c;Windows CE的开发过程可以分为#xff1a;0AL… Windows 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 几乎是不可能的。不同的 CPU 体系结构有不同的BootLoader而且除了依赖于 CPU的体系结构外BootLoader还依赖于具体的嵌入式板级设备的配置。这也就是说对于两块不同的嵌入式板而言即使它们是基于同一种 CPU 结构而构建的要想让运行在一块板子上的 BootLoader 程序也能运行在另一块板子上通常也都需要修改 BootLoader 的源程序。     2BootLoader在PC机与嵌入式的区别比较 1引导程序在PC机和嵌入式上的区别   一般来说在PC的硬件平台上由于硬件启动根本就不是通过BootLoader而是通过BIOS所以BootLoader就不需要对CPU加电后的初始化做任何工作。在桌面系统中有以下几种设备可以作为启动设备使用硬盘、USB盘、光盘驱动器、还有网卡的Boot ROM等。但无论选择了哪一种启动设备操作系统都会去将该设备起始地址的内容读入内存BIOS将控制移交给引导装载程序。如果启动设备是IDE硬盘这时通常将引导装载程序装入第一个扇区(通常被称做主引导扇区MBR然后将内容读入内存再运行。     在嵌入式平台上引导装载程序是在硬件上执行的第一段代码通常将引导程序放置在不易丢失的存储器的开始地址或者是系统冷启动时PC寄存器的初始值。在嵌入式系统中通常并没有像BIOS那样的固件程序因此整个系统的加载启动任务就完全由BootLoader来完成引导程序完成自己的任务后也将控制权移交给操作系统。因此BootLoader是最先被执行的程序所以就必须包括加电初始化程序。     2BSP在嵌入式和桌面Windows中的区别 其实运行在PC机上的桌面Windows或Linux系统也是有BSP的只是PC机均采用统一的X86体系架构,这样操作系统的BSP相对X86架构是单一确定的,不需要做任何修改就可以很容易支持OS在X86上正常运行,所以在PC机上谈论BSP这个概念也就没什么意义了。     而对嵌入式系统来说情况则完全不同,目前市场上有多种结构的嵌入式CPU(如X86,arm,MIPS等),而且为了性能的需要,外围设备也会有不同的选择和定义。因此一个嵌入式操作系统针对不同的CPU会有不同的BSP又即使同一种CPU,由于外设的差别其BSP也会不一样。所以根据硬件设计编写和修改BSP,是保证嵌入式系统正常运行的一个重要环节。     3嵌入式BSP与PC机主板BIOS的区别   PC机主板上的BIOS首先是负责在电脑开启时检测、初始化系统设备、装入操作系统并调度操作系统向硬件发出的指令。它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。然后为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS正常运行后BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要重新关机开机。     从这个角度来说PC机BIOS的作用就象嵌入式系统中的Bootloader都是最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备。但与Bootloader不同的是BIOS在装载OS系统的同时还传递一些参数设置,而Bootloader只是简单的装载系统。尽管BSP的开始部分和BIOS所做的工作类似,可是大部分又和BIOS不同,作用也完全不同。因为BSP还包含和系统有关的基本驱动程序员可以编程修改BSP在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。而BIOS程序是用户不能更改和编译编程的只能对参数进行修改设置当然更不会包含一些基本的硬件驱动。   3Boot Loader的启动流程 大多数 BootLoader 都包含两种不同的操作模式启动加载模式和下载模式。启动加载模式也称为自主模式即 BootLoader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行整个过程并没有用户的介入。而下载模式则是目标机上的 BootLoader 将通过串口连接或网络连接等通信手段从主机Host下载文件。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时被使用或系统更新时使用。一般嵌入式系统的Boot Loader较为常用的是启动加载模式它的加载流程也是我们要重点讨论的内容。     1启动部分   启动部分主要是实现初始化硬件的功能。在参考板的BootLoader目录下会发现一些.s文件可能会是init.s或者是reset.s等这样的文件是CPU加电后最先执行的代码。接着Oal.exe通过Startup函数完成硬件的初始化StartUp 函数是Boot Loader的入口函数。该函数一般是使用汇编语言编写与CPU关系非常紧密能完成初始化CPU、内存等核心硬件。     Startup.s代码与硬件平台的Bootloader启动代码共用。如果是热启动即在该函数调用之前已经启动了Bootloader程序相当基本硬件初始化已经完成则直接跳转到OALStartUp函数中否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。在系统硬件初始化完毕之后Startup调用OALStartUp函数OALStartUp函数主要完成将OEMAddressTable表传递给内核 然后调用KernelStart函数跳转到内核。因此这部分工作是BootLoader的一大重点。     2主控部分 StartUp 函数初始化CPU等核心硬件并跳转到Main函数后系统就会转入C语言代码执行环境。这时函数分为3个模块BLCOMMON、Download Function、FLASH Function。其中BLCOMMON模块是由微软提供的执行一些逻辑上的功能因此建议开发人员不要对其进行修改。而Download Function、FLASH Function中的函数与硬件平台息息相关因此对于每种硬件平台都要将函数的实现进行修改。     其中BLCOMMON库是与BootLoader程序链接在一起的BLCOMMON库的入口点为BootloaderMain函数它是Startup汇编函数完成后跳转至该入口的。Main函数的主要任务时调用BLCommon中的 BootloaderMain()函数这是BootLoader的主控函数它控制了BootLoader的完整执行流程。这部分代码由C语言实现是BLCOMMON代码的一部分它可以用来执行比较复杂的操作。比如检测内存和Flash的有效性、检测外部设备接口、检测串口并且向已经连接的主机发送调试信息、通过串口等待命令、启动网络接口、建立内存映射等汇编无法完成的工作。     3下载部分   一般在平台调试完毕后可以在不用人工干预的情况下自动加载CE这也是BootLoader的功能之一。而在调试阶段时这需要通过Loader所支持的命令来进行操作的借助于这些命令不仅可以完成硬件平台的部分测试还能完成CE的BootLoader程序最为重要的一个功能--下载CE映像。如果说硬件调试功能可以由其它的程序代替而不放入BootLoader中但是下载映像文件却是BootLoader必需的功能。     CE映像文件通常叫做nk.bin它是Windows CE二进制数据格式文件不仅包含了有效的程序代码还有按照一定规则加入的控制信息。当然也可以选择生成.sre格式的代码文件但是相于对前一种格式它的代码要长很多所需要的下载时间也更长。     4支持DOC部份 对于WinCE操作系统而言丰富的多媒体功能是其一大特点。但是随之而来的问题是如果选择了图形界面和中文支持系统很容易大大超出嵌入式系统上百KB的数量级。而DOCDisk On Chip则提供了一种相对廉价的大存储容量的解决方案。     DOC本质上是一种加以软件控制的NAND格式的Flash通过TFFS这一软件层提供对WinCE的支持。由于DOC不能像内存一样被直接访问所以其加载WinCE的过程有些特殊必须要在BootLoader中加入专门的代码才能使用DOC来存放WinCE映像文件。   4Boot Loader的开发经验总结 1嵌入式系统中Bootloader的意义与作用与PC上的BIOS有点类似它对开发板上的主要部件如CPU、SDRAM、FLASH、串口等进行了初始化也可以使用Bootloader下载文件到开发板和启动系统等。因此一个功能比较强大的Bootloader已经相当于一个微型的操作系统了。     2从CE的BootLoader开发流程可以看出BootLoader在完成下载CE映像和加载映像的主要功能外还具有一些调试硬件的功能。当然这些功能不是必需的随不同的用户有不同的定义但这是在开发CE系统中不可跳过的一环。     3嵌入式系统应用开发不同于PC机其开发过程同时涉及软硬件以及上层应用开发综合考虑而PC机应用开发是建立在已经定制好的硬件和操作系统平台上开发者只需调用系统提供的接口和服务完成相应的功能。考虑到成本约束嵌入式系统的硬件平台通常是根据应用量身定制 通常所用的MPU、存储器、外围设备等有多种选择余地使平台的引导设计变得十分复杂。因此从零实现的话会需要相当长的过程通常的做法是利用微软为每种类型CPU提供的标准开发板的BootLoader例程从这些例程中寻找与硬件平台最接近的作为标本程序然后根据硬件平台作相应的改动。     总而言之BootLoader是开发WinCE系统第一步也是关键的一步。只有得到一个稳定工作的Loader程序才能够进一步开发WinCE的BSP才能得到整个嵌入式系统的成功。
http://www.huolong8.cn/news/1783/

相关文章: