Bootrom和Boot image的区别
修改ROM三步走简明图文教程

修改ROM三步走简明图文教程刷rom包的原理ROM称为静态存储器或只读存储器。
它的特点是只读不可写,但是计算机关闭后数据仍然保存。
rom的特点是只读,也就是说你往rom里面放进去东西后里面的东西就不会改变了。
而我们手机上的操作系统就是装在rom里面的。
在这个地方就有很多人有这个疑问,为什么rom只读不可写为什么我们还能刷机?事实上,随着技术的发展,现在有的rom是可以写的,例如我们手机上的rom称为flash,也就是我们平时说的闪存。
这里我觉得rom这个名字有点误导人,因为rom是Read Only Memory的简称,延续这个名字容易让人误以为不可写。
总之现在手机上的rom也是可写的,然后厂商把rom的一部分划出来安装手机的操作系统和自带的应用,剩下的rom留给用户自己装其它的应用或放自己的其它文件使用。
这也就可以解释为什么我们买来的手机容量一般都没有手机参数写的那么大,例如16G的买来一看就剩下15点多。
因为有一部分被系统占用了。
而且rom中作为存放操作系统的那一部分用户是没有权限访问的,除非通过特殊的方式,也就是我们常说的刷机,那这么说的话大家就明白为什么刷机也叫刷rom了吧?rom包的结构我从miui官网下了一个rom包,解压下来后如图。
META-INF里面是一些升级脚本和ROM签名。
recovery里面是我们刷机在recovery时要用到的一些文件。
system是这个rom的具体内容。
boot.img是内核文件。
这个教程我们想要达到的目的就是修改rom,所以我们只要看system这个文件夹就可以了。
把system打开以后如下图。
下面简单说明下这些文件夹。
app:系统自带的应用。
bin:android系统本地的一些可执行的程序。
etc:android系统配置文件。
fonts:字体样式和字体库。
framework:android系统框架。
lib:动态链接库。
media:铃声、开机动画之类的媒体文件。
[VIP专享]Mobile手机系统启动过程
![[VIP专享]Mobile手机系统启动过程](https://img.taocdn.com/s3/m/1d5dd1f0284ac850ad0242e9.png)
powerON--〉BootROM--->x-loader---->Eboot----->IPL--->OS
下面围绕上述过程展开: 1 powerON
这里指的是硬件 power ON,当按触 powerON 键后,系统上电,同 时触发 CPU 复位管脚。系统进入到 BootROM 中,执行其中固化的 代码。
2 BootROM: BootROM 中固化了一段引导代码,用于系统初始化,初始化必要的 寄存器,决定启动流程是正常启动或者启动 flashing,进入到 x-load er。
Boot ROM 的初始化工作有:
关闭可屏蔽中断 时钟设置和 DPLL 设置 配置 ULPD 寄存器,为 UART 提供 48MHz 的时钟频率 配置 ARM CORE 内部寄存器 配置 EMIFS 寄存器 建立 ARM CORE 中断向量表 上面的工作实际上就是初始化必要寄存器,例如 EMIFS 初始化。
1) B2Ak+22+1=2+15+c51mc+=m5=21c11+m++12+2+1++=212=2+1+2+1+2+2+22+32k+1+2
Real-time Operating System ETHERNET BOOT Initial Program Loader
RTOS EBOOT IPL
相关术语:
硬件平台:TI omap 软件平台:WM5.0
深入剖析 Mobile 手机系统启动过程! 介绍一下 mobile 系统的启动流程,仅供大家学习之用:
1) B2Ak+22+12=+15+c51mc+=5m=2c111++m+12+21+++2=12=2+1+2+1+2+2+22+32k+1+2
VxWorks启动过程详解

VxWorks启动过程详解vxworks有三种映像:VxWorks Image的文件类型有三种- Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM- ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行。
-ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM。
注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它必须借助另一个叫做Boot Image的映像(可以在Torn ado 中的build->build boot rom中生成)才能运行起来,也就是利用Boot Image引导起来然后通过网口或串口下载真正包含VxWorks的Loadable Image,然后才能运行起来。
也就是说Boot Image是和Loadable Image 结合使用的。
现在看来一共有四种映像文件,让我们看看它们的组成吧:-Boot Image:包含一段叫做BootStrap Programs的程序+一段ROM BOOT Program程序。
-Loadable Images:有操作系统VxWorks和应用组成的映像。
-ROM-based Images(压缩/没有压缩):包含一段叫做B ootStrap Programs的程序+ Loadable Images(即有操作系统VxWorks和应用组成的映像)-ROM-Resident Images:同上通过上面我们可以看出,ROM-based Images,ROM-Resid ent Images,Boot Image三种映像都包含一段叫做BootStrap Programs的程序,它具有启动功能,可以把ROM中的代码段和数据段拷贝到RAM中;下面让我们看看三种VxWorks的启动过程:Boot Image +Loadable Images:我们说过Loadable Images是依靠Boot Image加载启动的,首先有Boot Image中的程序BootStrap Programs把Boo t Program程序加载到RAM中的RAM_HIGH_ADRS处,然后控制权交给Boot Program,由Boot Program负责一系列简单的硬件初始化(网口,串口等),开始下载Loadable Images(即包含应用的VxWorks操作系统)到RAM_LOW_ADRS,然后控制权交给VxWorks操作系统开始执行。
zynq的启动方式

Zynq-7000AP SOC器件有效利用了片上CPU来帮忙配置。
在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。
ZYNQ的两种启动模式:从BootROM主动启动,从JTAG被动启动。
ZYNQ的启动配置分多级进行的。
配置至少需要两步,但通常按如下三个阶段进行:阶段0:该阶段简称为BootROM,控制着整个芯片的初始化过程。
放在BootROM中的代码是固化的,不可修改的,处理器核在上电或者热启动时自动执行这部分代码。
阶段1:该阶段的启动加载器(FSBL)也可以由用户代码控制。
阶段2:这阶段通常可以是用户的PS端的设计代码,当然也可以是第二阶段的启动加载器(SSBL),这个阶段可以完全由用户控制,是可选的。
ZYNQ外部启动条件:1、电源要求:在阶段0 BootROM状态时,PS与PL的电源要求如表所示:在阶段1 FSBL时,PS与PL都是必须上电的,因为PL将在这个阶段进行配置,而PS将负责配置的过程。
2、时钟要求:必须满足时钟3、复位要求:主要有两个外部复位源将影响BootROM的执行。
(电源复位信号,系统复位信号)4、启动引脚设置:需要配置好引脚才能正确启动平台。
BootROM1、BootROM的作用:上电复位以后,PS端即开始进行配置。
在不使用JTAG的情况下,ARM将在片上的BootROM中开始执行代码。
BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,使得ARM核可以访问、使用这些外设。
而DDR等其他外设将在阶段1或者之后进行初始化。
BootROM中的代码还负责加载阶段1的启动镜像。
PS的启动源是由外部模式引脚的高低电平来选择的,也就是指BootROM将根据外部配置引脚的设置来从不同的外部存储中加载阶段1的启动镜像,当然也支持在线性Flash 上直接运行。
需要注意的是PL的配置并不在BootROM中完成,BootROM只为配置PL做好准备。
嵌入式操作系统启动流程

1嵌入式操作系统启动流程1.在通电后,初始化硬件(bootrom)2.支持VxWorks与硬件驱动通信(Image的底层驱动)3.本质上是硬件驱动、初始化的合集;2研究BSP内容:1.系统image的生成与image的种类2.image的download下载过程3.系统的启动顺序与过程4.调试环境的配置及远端调试的方式与方法5.相应BSP设置文件的修改(网络,串口..)6.BSP各文件的构成与作用.7.要对系统底层驱动清晰,也就是对CPU及有关的硬件有所熟悉.要紧是32微处理器(上电启动过程, download image的方式方法,读写ROM,地址空间分配,MMU,寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.3BSP要紧文件目录的构成及要紧文件的作用:3.1目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更换里面的任何文件.configAll.h:缺省定义了所有VxWorks的设置.假如不用缺省的设置,可在BSP目录下的config.h文件中用#define或者#undef方式来更换设置.bootInit.c:在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压与ROM image的放置.bootConfig.c:完成Boot ROM image的初始化与操纵.usrConfig.c: VxWorks image的初始化代码.3.2目录target/config/comps/src:涉及系统核心的components,要紧由target/config/All中usrConfig.c中函数调用3.3目录target/config/bspname:包含系统或者硬件有关的BSP文件.MakefileREADMEBSP公布纪录,版本,总的文档config.hconfigNet.h网络驱动的要紧设置文件,要紧对END驱动设置.romInit.ssysALib.s汇编语言文件,程序员能够把自己的汇编函数放在这个文件里,在上层调用.VxWorks image的入口点_sysInit在这个文件里,是在RAM中执行的第一个函数.sysLib.c包含一些系统有关的函数例程,提供了一个board-level的接口,VxWorks与应用程序能够以system-indepent的方式生成.这个文件还能包含目录target/config/comps/src的驱动.sysScsi.c可选文件用于Scsi设备设置与初始化.sysSerial.c可选文件用于所有的串口设置与初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件VxWorks.st完全的,连结后,standalone,带有符号表的VxWorks二进制文件4VxWorks Image4.1VxWorks images consist of:•Text segment---executable instruction.•Data segment---Initilized global and static varibles.•BSS.4.2分类与工作机理:Bootrom不是VxWorks Image,不参与讨论它本质上是一段Boot program,最少的系统初始化,要紧用于启动装载VxWorks image.通常有压缩与不压缩两种形式,如bootrom与boot_uncmp.与VxWorks image的区别在于一个Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c.VxWorks 本质上分为两大类:1.Vxworks分为两大类:1)Uploaded images(通过网口、串口、硬盘、软盘、DOC、ROM中加载到RAM中执行的)vxWorks - basic Tornado, shell 与symbol table 在主机端vxWorks.st(文件很大)- 独立的image,包含shell与symbol table 在目标板运行2)ROM based images(直接烧入ROM的VxWorks):VxWorks_Rom类的Vxworks又分了两类:1)驻留的resident 2)不住留的1.不住留的ROM – Based VxWorks Image2.驻留的VxWorks_rom_resident2.说的再具体点:1)可下载的Vxworks image2)ROM中烧制的Image1.vxWorks_rom - Tornado in ROM,非压缩, 在RAM 中运行2.vxWorks.res_rom_nosym - Tornado in ROM, 非压缩,在ROM 中运行3.vxWorks.st_rom - Stand-alone in ROM, 压缩, RAM 中运行4.vxWorks.res_rom - Stand-alone in ROM, 非压缩, ROM 中运行3.VxWorks在存储介质中的存放方式5启动5.1启动概述1.Bootrom 的启动最少的系统初始化,要紧用于启动装载VxWorks image.通常有压缩与不压缩两种形式,如bootrom与boot_uncmp.与VxWorks image的区别在于一个Bootrom 调用bootConfig.c,而VxWorks调用usrConfig.c.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->文件bootConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)其中 /target/config/all/bootConfig.c是Boot ROM设置模块.用于通过网络加载VxWorks image.usrRoot()---->bootCmdLoop(void)命令行选择,或者autobooting----->bootLoad(pLine, &entry)加载模块到内存(网络,TFFS,TSFS...)----->netifAttach()---->go(entry)----->(entry)()从入口开始执行,不返回.•各个函数的要紧作用romInit()-----power up,disable interrupt,put boot type on thestack,clears caches.romStart()-----load Image Segments into RAM.usrInit()-----Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysHwInit()-----Interrup locked,Initializeshardware,registers,activation kernelKernelInit(usrRoot,...)-----•Initializes and starts the kernel.•Defines system memory partition.•Activates a task tUsrRoot to complete initalization.•Unlocks inierrupts.•Uses usrInit()stack.usrRoot()•初始化内存分区表(memory partition library)•初始化系统系统时钟(system clock)•初始化输入输出系统(I/O system)----可选•Create devices----可选•设置网络(Configure network)--------可选•激活WDB目标通信(Activate WDB agent)---------可选•调用程序(Activate application)2.VxWorks的启动1)Loadable VxWorks的启动a)使用Bootrom进行最小系统起动b)加载程序段、数据段、BBS段c)跳转到RAM中运行的VxWorks的启动(详见下面)2)VxWork_ROM的VxWorks启动1.ROM中运行的VxWorks的启动VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM的首地址,运行VxWorks.注意:ROM运行的VxWorks并不支持所有的主扳,应以主扳手册为准.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->文件usrConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)VxWorks在ROM中运行要紧是为了节约RAM空间,以便应用程序有更大的空间运行.只把VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行.ROM中运行的VxWorks缺点是运行速度慢.2.RAM中运行的VxWorks的启动VxWorks在RAM中运行,即写入ROM中的Boot或者VxWorks Image是压缩的,需要先解压copy所有的text与data到RAM的LOCAL_LOW_ADRS中,下面sysInit()要紧是初始化RAM用的,系统直接跳到RAM的首地址,运行VxWorksusrInit()前面不压缩,即romInit(),romStart()不能压缩.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->sysaLib.s中的sysInit()---->文件usrConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)RAM运行的Boot或者VxWorks image的text段或者data段会从ROM复制到RAM,在RAM中运行.其中usrRoot()是VxWorks启动的第一个任务,由它来初始化 driver,network等描述:romInit.s first execute in flash,minal initiliz,then jump to romStart.romStart()开始装载与解压image到RAM,sysaLib.s是在RAM中执行的第一个函数.。
bootimg的详细介绍&使用实例

文件系 /挂载点/
统
大小
描述
BOOT: /dev/mtdblock[?]
/
(RAM)
Raw
内核、内存盘和引导配置。
DATA:
/dev/mtdblock5
/data/ yaffs2
91904kb
用户、系统配置,软件配 置以及软件(没有 a2sd 的
话)
CACHE:
/dev/mtdblock4
/cache/ yaffs2
*/
boot 的 ramdisk 映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文
件,例如:初始化 init 进程以及 init.rc(可以用于设置很多系统的参数)等文件。
以下是一个典型的 ramdisk 中包含的文件目录列表:
│ default.prop
│ init
│ init.goldfish.rc
** appended to the kernel commandline in the tags.
** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
** 6. if second_size != 0: jump to second_addr
** else: jump to kernel_addr
│ default.prop
│ init
│ init.rc
│ initlogo.rle
//开机第二屏图片
│ ueventd.goldfish.rc
│ ueventd.rc
│ ueventd.swift.rc
│
├─data
├─dev
├─etc
│ recovery.fstab
BSP映像分析和启动流程

BSP映像分析和启动流程Vxworks映像有:bootrom,bootrom_uncmp,bootrom_res,vxworks,vxworks.st,vxworks_rom,vxworks.st_com,vxworks.res_com,vxworks.res_rom_nosym。
引导代码通常也是一种Vxworks映像,习惯称之为引导映像。
BSP本质上就是执行bootrom.bin,vxworks.bin这两个文件中的所有指令。
(也有可能是.st文件)Bootrom.bin就是bootrom(引导)映像。
Vxworks.bin就是vxworks映像。
映像区别:1.基于RAM,还是基于ROM?2.是否是ROM驻留型?3.是否压缩?4.是否带符号表?Bootrom (引导) 映像典型执行过程:romInit.s:romInit()→bootInit.c:romStart()→bootConfig.c:usrInit()→bootConfig.c:usrRoot()→ bootConfig.c:bootLoad()类型划分:1.基于ROM的压缩映像----bootrom将bootrom或flash中的代码段(即TEXT段)和数据段解压搬移到RAM中执行。
在bootInit.c的romStart()函数中实现。
2.基于ROM的非压缩映像----bootrom_uncmp将bootrom或flash中的代码段和数据段直接搬移到RAM中执行。
3.驻留ROM的非压缩映像----bootrom_res仅将bootrom或flash中的数据段搬移到RAM中,代码在ROM或Flash中执行。
Vxworks映像执行过程:sysAlib.s:_sysInit()→ usrConfig.c:usrInit()→ usrConfig.c:usrRoot()类型划分:1.可加载(Loadable)的映像类型:可加载型映像的执行需要通过引导代码(在引导映像中)把它加载到目标机RAM的RAM_LOW_ADRS中执行。
AR18系列路由器版本升级指导

AR18系列路由器版本升级指导网络设备的版本升级是网络维护的一部分,但是维护人员在升级过程中,总是会遇到这样或那样的问题,造成升级失败,引起网络中断的情况屡见不鲜。
今天就让我来引导大家来开始我们的升级之旅吧!一般来说,版本升级分为两部分:BOOTROM(相当于PC主板上的BIOS芯片)和VRP 文件(相当于windowsXP操作系统)的升级;BOOTROM文件又分为upgrade和full文件。
升级顺序为先升级BOOTROM,再升级VRP;BOOTROM文件升级顺序为先升级upgrade,再升级full。
(一般来说,升级时只需要升级full文件)BOOTROM文件和VRP文件的下载地址(登陆时需要用户名和密码,若为最终用户,请联系代理商,若为代理商,请联系自已的上级代理商获取用户名和密码):/cn/support/softwarelist.jsp?category=ROOT%3ECN%3E%B7% FE%CE%F1%D6%A7%B3%D6%3E%C8%ED%BC%FE%D6%D0%D0%C4%3EIP%CD%F8% C2%E7%B2%FA%C6%B7%3EQuidway%26reg%3B%CF%B5%C1%D0%B2%FA%C6%B7%3 E%C2%B7%D3%C9%C6%F7%CF%B5%C1%D0%3EQuidway+AR+18%CF%B5%C1%D0注意:请在下载版本文件后,先打开版本说明书,查看版本配套表,确认此版本适用的设备型号和与之配套的BOOTROM版本。
一、在配置界面通过命令行进行版本升级方法一:通过FTP方式进行版本升级(此例中假设下载下来的BOOTROM文件和VRP文件存放在C:\ftp目录下)步骤1、在PC机“开始菜单”的“运行”栏中键入“cmd”,进入DOS界面,保证PC机可以PING通设备。
步骤2、在路由器上启动FTP服务器,并配置从PC机上FTP登陆时的用户名和密码<Quidway>system-view/进入到系统视图/[Quidway]ftp server enable /启动FTP服务/% FTP server has been started[Quidway]local-user h3c /增加一个本地用户,用户名为h3c/New local user added.[Quidway-luser-ftp]password simple h3c /配置用户名为h3c的密码为h3c/ [Quidway-luser-ftp]service-type ftp ftp-directory flash://指定此用户的服务类型为ftp,且ftp后的上传下载目录为flash下/步骤3、将下载到本地c:\ftp目录下的BOOTROM文件和VRP文件解压缩,将大小为512K 的BOOTROM文件(*.btm)更名为bootromfull,将VRP(*.bin/*.app)文件更名为system。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARBOR
楼主发帖时间:2007-12-10 11:03:00 博客播客收藏回复加为好友发送消息建议删除该贴!!
bootrom 是指on-chip bootrom,在CPU芯片内部,内嵌有小的boot程序(bootloader),类似于PC机主板上的BIOS的存储区域。
和boot image不是一回事。
VxWorks文档中的bootrom区是指boot image存放的位置。
boot image的作用是把VxWorks image 加载到主板。
boot image只初始化很少的硬件系统如串口,网口等。
为加载VxWorks image做准备,当VxWorks系统下载完毕后,boot image的作用也就完成了。
VxWorks image含有完整的VxWorks OS。
是真正运行于目标板上的操作系统。
应用程序运行于VxWorks 系统之上。
boot image 和VxWorks image生成在使用BSP文件上的区别在于:在启动顺序中Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c.
在ROM中vxworks运行的方式(和bootrom编译到一起还是单独固化到ROM中),在ROM中的内存分配?
VxWorks加载到主板运行,分不同的情况,如果VxWorks是压缩的,加载时解压到RAM的
RAM_HIGH_ADRS.
如果是ROM based VxWorks,VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行。
既不压缩又不ROM based的VxWorks直接copy到RAM_LOW_ADRS运行。
若在config.h中修改系统设置,如增加网卡等,是否需要重新烧bootrom?如果增加其他oem产品呢?如果主板中有Boot image存在则不需要重新烧,用FTP等download加载VxWorks即可。
VxWorks 系统编程中任务级与中断级的通讯如何实现?
中断是由硬件触发,软件的作用只是将中断服务例程(ISP)与中断事件连接起来.
1.使能中断,函数intEnable().
2.用intConnect()登记中断号,和相应的中断例程ISR.
这样一旦有中断发生,系统自动跳转到相应位置执行ISR.
Bootloader怎么得到,如果对开发板有些改动,还能使用开发板的bootloader吗?bootloader起到什么作用?
Bootloader相当于PC机主板上的BIOS,是最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备.
有些bootloader已经嵌在CPU内了,没有bootloader的CPU可以在片外的eeprom内做bootloader,也可以不要bootloader,直接通过JTAG口灌入程序,开发板改动基本上不会影响bootloader.
VxWorks 应用程序编译下载时常见问题及原因分析
Tornado环境下编译产生的错误:标准C函数或自己的函数,变量不认识(undefined symbol),编译失败。
Tornado支持c 和 c++ ,文件后缀为.cpp时编译器会认为是c++文件,这样有些定义类型为C的函数在编译或下载时不被认可。
解决方法是 1.把如果在c++文件(.cpp)中调用c函数,应该把这些不被认可的c类型函数用语句extern "C"说明一下为c函数。
另外,如果将c文件的后缀小写的.c误写为大写的.C,也会出同样的错误,编译时不会编译这个文件。
Tornado环境应用程序下载产生的错误:函数不认识(undefined symbol),下载失败。
虽然编译通过,可是下载时依然会有这样的问题,仍然是函数或变量没有定义。
系统不认识,这是出错的原因基本上时没有定义的错误。
查找包含函数或变量的头文件是否加了进去。
如果实在找不到定义的话,简单的办法是先把这他们去掉(当然是没有其他地方用到的情况下)试一试,先down下去,能运行后,然后添加,再继续查找。
在ARM下不用Boot image,直接烧入VxWorks image的过程
有些ARM CPU一般分两种运行方式,一种是Boot方式,一种是normal方式。
在Boot方式下直接烧写VxWorks image到Flash, 这种VxWorks image包含有boot的功能(类似VxWorks.rom形式),中间那段烧写到flash的程序是必须的,第一次通过串口下载VxWorks image到Dram 是一个简单的过渡,有boot loader控制。
当烧写完成后,切换CPU到normal模式,系统启动,开始逐行读Flash中的指令,是由VxWorks BSP 控制,根据不同的VxWorks image定义,执行不同的操作,例如若VxWorks是压缩的,则解压复制到DRAM 的高位地址,...。
VxWorks image 和Boot image中的两次硬件初始化之间的区别
Boot image和VxWorks image都对硬件进行了初始化。
两次硬件初始化的是不同的。
BootRom映像主要作用是通过网口或串口下载VxWorks系统,所以它只是初始化很少的硬件系统如串口,网口等来满足下载VxWorks的需要,一旦VxWorks下载完毕。
这些初始化过的硬件的作用也就完成了。
VxWorks启动后会从新对几乎所有的硬件设备进行完全的初始化来满足VxWorks操作系统运行的需要。
汇编语言在VxWorks系统编程的使用:
汇编语言主要出现在BSP文件roInit.s,sysAlib.s等,这些汇编指令是系统初始化硬件用的,硬件系统Power up时硬件特别是内存没有初始化,C函数库没有装入内存,系统此时不支持C语言程序,只支持它自己的32位汇编指令,所以只能用汇编指令来初始化硬件,为后续的操作系统包括C语言支持做准备.在OS正常运行后,就可以用C了.
Tornado不支持汇编指令,
汇编在编译连接BSP,生成bootrom或VxWorks映像,才被编译.有两种方法:
1.现在可以在Tornado环境下生成bootrom或建 Bootable 的 project 生成 VxWorks
2.传统的方法,在命令行方式,用make编译生成.
在Tornado下的downloadable的project,application中不能用汇编.
不过一般汇编很少用.
可以与其他bsp文件在tornado下作成bsp或用命令行make.
VxWorks 下写驱动需注意的问题
1。
MMU 对该硬件的地址映射正确(改 BSP )
2。
中断向量表该中断的定义位置,知道相应中断的中断标志位等信息(改 BSP )3。
查出中断号及中断级别,硬件中断登记(INTCONNECT ),及 ISR
4。
系统任务协调,保证在该程序执行时,没有其它任务占用 CPU。