系统初始技术的发展_第1页
系统初始技术的发展_第2页
系统初始技术的发展_第3页
系统初始技术的发展_第4页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

系统初始技术的发展

0系统初始化代码系统初始化代码是加载系统启动(或卸载)后的代码段。为了应用初始值的所有板级设备,它被称为悬挂一代。通常,系统初始化代码放在目标系统特定板级支持包(BSP)目录中的两个子目录中。start:这个目录包含系统初始化时最先执行的汇编代码,通常命名为start.Sstartup:这个目录包含与系统初始化相关的上层C代码。初始化过程是指从第一条BSP代码被执行开始,直到第一个应用任务开始运行前的整个过程。1基于c代码段的程序实体编码位于start目录中的汇编代码是系统首先执行的代码段,安的作用是对处理器和目标板完成必要的初始化工作,使其能够执行其它BSP代码。这些初始化包括:初始化堆栈(stack)将未初始化数据段(.bss)清零关闭外部中断将初始化数据段从ROM中复制到RAMstart入口点汇编代码有一个重要的设计原则就是它仅执行最少、必须的初始化工作,而其余的系统初始化都由C代码段来完成。初始化汇编例程通过调用函数boot_ard()结束其运行。通常,start符号标识会关联到程序映像的起始地址处。当链接器(linker)将目标文件链接成程序映像时,start目标文件是第一个被链接的对象,以确保start入口点代码段被放置在代码段(.text段)的首部。这个可以通过在指示链接器(linker)如何执行的链接命令文件(linkcmd)中指定来实现目标文件的准确定位。2配置表able变量的复制boot_ard()函数是最先被调用的C代码程序。多数BSP都在这个代码段中执行相同的程序,因此它一般可以不被改写而用于各种BSP中。Boot_ard()函数依次完成以下功能:初始化CPU配置表(Cpu_able变量)复制根据特定应用配置的RTEMS配置表(Configuration变量)到BSP配置表(BSP_Configuration),这样可以改变系统配置而不对原配置表产生影响。调用BSP特定的函数bsp_start()调用RTEMS函数rtems_initialize_early(),初始化RTEMS操作系统,C库和设备驱动,但不初始化多任务且没有打开中断调用共享函数main(),它将一直运行直至调用rtems_shoutodwn_excutive指令后返回调用BSP特定的函数bsp_cleanup(),完成板卡特定的关机关的必要处理3基于特定进程的rtems内核对象这个函数是系统初始化过程中第一个执行的特定BSP相关的C代码段,它完成了一些必须的基础硬件的初始化工作,这些初始化一般不是非在执行C代码前必须使用汇编完成,例如设置总线控制器等。这个函数还负责设置CPU配置表以覆盖其缺省值,以及根据BSP的设备驱动的特定需求更改RTEMS内核对象最大数量值。通常这个函数还会设定以下一些系统初始化回调函数(hook)和空闲任务函数(idletaskroutine):执行多任务前的回调函数(BSPPretaskingHook)设备驱动初始化前的回调函数(BSPPredriverHook)设备驱动初始化后的回调函数(BSPPostdriverHook)另外,此函数还完成一个重要的任务就是设定PTEMS操作系统的工作区(Workspace)。所谓Workspace是指RTEMS操作系统中特定的内存区域,所有内核对象和任务堆栈(taskstack)都从这个区域分配。多数BSP会将RTEMSWorkspace置于内存末端的特定大小空间中。此函数执行完成后,返回到book_card()函数中继续运行下一步初始化过程。4api初始化添加RTEMS的CPU配置表中的pretasking_hook项被设置为特定应用的任务前回调函数,这个函数只在完成RTEMSAPI初始化后但未启动中断和任务程序时调用一次。此时没有任何任务被创建执行,甚至于空闲任务(idetask)也还没有创建。Pretasking_()函数完成需要RTEMSAPI支持的初始化部分合适位置。这些初始工作包括系统调试级(debuglevel)设定、初始化RTESM的C库支持功能(通过调用bsp_libc_init)以及初始化应用程序的堆空间(heap)。5前回凋函数RTEMS的CPU配置表中的predriver_hook表项被废黜为特定应用的设备驱动初始化前回凋函数,此函数在执行设备驱动初始化的MPCI被初始化之前被调用。它紧接着pretaskjing_hook()函数,此时RTEMS的内核初始化己完成而中断和任务都还没有启动,但内核空闲任务(idletask)己创建。在此项目的应用中被设置为NULL,表示未使用此回调函数。6设备驱动表的数据结构在这个系统初始化阶段,所有设备驱动表(DeviceDriverTable)中配置设备的初始化函数都将被调用。初始化例根据在设备驱动表中的老外后顺序调用设备的初始化函数。设备驱动表是RTEMS配置信息表(ConfiguraionTable)的一部分,它定义了相关设备的务种操作函数,包括初始化(initialization)、打开(open)、关闭(close)、读取(read)、写入(write)、和控制(control),其数据结构定义如下:初始化过程调用设备驱动表中所有的设备的initialization函数,此函数以主设备号(major)和次设备号(minor)作为其参数。其中主设备号用于区分设备驱动的类型,次设备号则用于区分同类型驱动的不同设备。7mpci之调用RTEMS的CPU配置表中的postdricer_hook表项被设置为特定应用的设备驱动初始化后回调函数,此函数在执行设备驱动初始化之和MPCI[被初始化之后紧接着被调用。此时中断和任务仍处于不可用(disable)状态。Postdriver_hook是执行需要在设备驱动程序初始化后面又要在执行第一个任务前完成的初始化工作的合适场所。通常在设备驱动后回调函数的实现中打开标准输入(standardin)、标准输出(standardout)和标准错误(error)文件并将它们与/devconsole文件相关联。8启动相关功能的初始调整Main()函数是C代码的主入口点,编译器在编译阶段会识别出这个特殊符号并对它进行特殊的处理。GNUC编译器识别main()函数并在其代码段开始处插入编译器运行时支持函数..main()。..main()函数会初始化基本编译器运行时支持库并完成其重要的功能:调用C++的全局可争辩地造函数。除了隐含地调用..main()函数之外,这个数显区在完成其它初始化功能。安设置rtems_progname变量并通过调用PTEMS函数rtems_initializa_executive_late启动多任务。值得注意的是这个函数将一直运行不返回真到调用了RTEMS指令rtem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论