《pSOS操作系统介绍》由会员分享,可在线阅读,更多相关《pSOS操作系统介绍(9页珍藏版)》请在金锄头文库上搜索。
1、D:Doc技术总结pSOS 介绍.docpSOSystem 操作系统1.概述pSOSystem 操作系统是一个高性能、高度模块化的实时操作系统,他完整的提供了基于开放系统标准的多任务环境,被广泛应用于嵌入式微处理器程序开发。pSOSystem 实时多任务操作系统内核是以库文件方式存在,他有用于不同 CPU 的不同 OS 版本。提供给我们的编程语言接口是 C/C+和汇编。像其他操作系统一样,pSOSystem 操作系统有它的系统调用,让上层应用使用系统的功能。pSOSystem 操作系统的交插开发环境工具(包括编辑、编译和调试)可以驻留在 UNIX 或 DOS 主机上,他们通过串口或以太网同目标
2、机建立通讯链接。2.系统结构D:Doc技术总结pSOS 介绍.docpSOSystem 操作系统是一个模块化高度可配置的操作系统,整个系统的结构如上图:pSOSystem 的内核及各个模块都是硬件独立的,不依赖于具体的硬件,不对硬件作假设。由用户提供或配置 OS 提供的具体的硬件相关的驱动程序或接口程序。在上图的整个系统中,深灰框内是系统内核及系统模块,只需对其按要求进行配置或为其提供驱动程序。在浅灰色框内的部分包括:用户任务(User Task)、中断处理程序(Interrupt Handlers)、设备驱动程序(Drivers) 。这三个部分是由用户来做的,做 BSP 程序主要是编写中断处
3、理程序和设备驱动程序,而编写上层应用程序是编写各个任务(Tasks)。宏观上多个 Task 是可以并行执行的,也就是说,一个 Task 在执行过程中可以被另一个 Task 所打断,存在多个 Task都在执行,但是都未结束的情况。当然在微观上多个 Task 是串行的(对单个 CPU) 。在什么情况下会发生 Task 切换呢?只有在发生某一个系统事件的时候,pSOS+便检查现在该哪个 Task 运行了,如果不是当前 Task,便会发生 Task 切换。一般只有发生系统调用时才可能发生系统事件。BSP(Board-Support Package)板级支持包,是完成用户硬件板功能的程序包,他包括目标系
4、统硬件初始化代码、设备驱动程序和中断处理例程。在 BSP 里都是以原码(Full Source Code) 存放仅仅与板子硬件相关的程序,与上层有何应用毫无关系。这也是我们把程序加入 BSP 的一个准则,如果某个程序仅仅与硬件相关,与上层有何应用没有关系,就可以把这个程序放入 BSP 中。BSP 中为上层应用提供了操作硬件的驱动程序及功能函数,BSP 提供给上层应用的接口都是相同的,只是对不同的 BSP 它们的实现不同而已,这样有利于上层应用程序在不同的板间移植。 pSOS+ 实时单处理器多任务操作系统内核模块作为监控软件来提供应用程序要求的系统服务、调度、管理和资源分配,并且协调各种同步和异
5、步操作。pSOS+的特点是小、快、完全可抢占、可重入。pSOS+将应用程序抽象为:任务、I/O设备驱动程序和中断服务程序ISRs。pSOS+采用了基于优先级的、可抢占的和基于时间片的调度策略,并且每个任务可以有自己特殊的调度策略。pSOS+是完全与硬件无关的,使得用户能在自己的硬件上使用pSOSystem。 pSOS+m 实时多处理器多任务操作系统内核模块是对 pSOS+一些特性的扩展,使 pSOSystem 支持多处理器的操作,处理器间采用的是主从结构。D:Doc技术总结pSOS 介绍.doc pNA+ TCP/IP协议堆栈模块是一个完全的 TCP/IP 协议组,包括网关路由协议、UDP、A
6、RP 和 IGMP 等。pNA+使用标准的 socket 接口,包括 Stream、Datagram 和 Raw Socket。 pRPC+ 远端过程调用库模块提供了与SUN兼容的RPC和XDR服务,允许用户用熟悉的远程调用来构造分布式应用。 pHILE+ 文件系统管理模块可以通过它有效地访问各种不同的存储设备,支持四种文件格式:MS-DOS文件系统、CD-ROM文件系统、pSOSystem特有的快速文件系统、NFS的Client和Server端 pREPC+ 标准C库模块 pROBE+ 调试/分析器3.开发方式嵌入式开发环境主要可以分为两部分,宿主机上的工具和目标机上的软件映像。假如我们的目
7、标板采用的是 MPC860 作为 CPU,它本身不具有自开发能力,即我们无法在MPC860 下开发运行在它之上的软件,只有借助 PC 机(x86)来开发软件。这种开发方式被称为嵌入式开发。不具有自开发能力的、待开发的机器(MPC860 )叫做目标机(Target ),把所借助的 PC 机叫做宿主机(Host) 。我们所能用的编辑器、编译器、调试器等工具都在 HOST 上。首先利用集成开发环境上的编辑器写源代码,其中要根据目标板的功能特性对 BSP 部分做不同的改动;然后编译自己的源文件和 BSP 部分,链接 OS 等不能改动的库文件(操作系统部分是目标代码,是以库文件的方式存放的)形成一个可以
8、在 Target 上运行的 IMAGE;最后用运行在 Host 之上的调试器把代码下载到 Target 上,进行调试。D:Doc技术总结pSOS 介绍.doc结合上图我们所要开发的有如下几块部分:操作系统部分是目标代码,是以库文件的方式存放的,无法修改;I/O Drivers(仅提供标准的系统调用接口)实际上也是固定部分,不需改动;只有嵌入式应用部分和 BSP 是我们要为目标板定做的。4.嵌入式应用部分结合 ATM 和 IP 的经验嵌入式应用部分由支撑软件模块和应用软件模块构成。支撑软件模块又是由以下几个子模块组成:调度系统,定时系统,通讯系统,内存管理,监控系统,控制系统,告警系统,诊断系统
9、,文件和装载系统。应用软件模块可根据具体的应用来分解。5.BSP4.1 初始化上电是指从加电或复位后的第一条指令,到操作系统举起的过程。Boot 的初始化可分为三级:D:Doc技术总结pSOS 介绍.doc1. CPU 的初始化,如 Cache、寄存器的设置。2. 板级初始化,指内存的自检、Flash 的刷新等。3. 系统初始化,为操作系统的运行准备数据结构、配置表等。4.2 驱动程序驱动程序是包含 I/O 操作的子函数,是指目标板上所有硬件的驱动程序。对每个设备,都提供了六种操作的驱动程序:init、open、close、read、write 和 control。驱动程序必须由上层调用,其调
10、用方式有三种:1. 在任务中直接调用设备驱动程序。2. 任务调用内核中的设备驱动程序,由内核根据设备号再调用相应的驱动程序。3. 在任务中调用了某个服务,而该服务需要设备驱动程序的支持,如网卡。cpu initboard initsy init pSO+taskdriver21 3serviceD:Doc技术总结pSOS 介绍.doc这些驱动程序也可抽象为三个层:1. 常规操作包括: I/O 编址方式,即三种寄存器 CR、DR、SR 的编址 如何设置寄存器中的值2. 与内核接口是指: I/O 管理 操作的规整性,定义了六种标准操作 参数的规整性,每个函数的参数个数、类型是固定的3. 与模块接口
11、要符合接口标准,例如: 通过 NI 与 TCP/UDP 通讯的 drivers 要符合 NI 的参数要求 通过 KI 与多处理器通讯的 drivers 要符合 KI 的参数要求我们开发具体硬件的 BSP 就是编写有关处理器初始化和设备驱动程序的函数,所以必须要了解处理器的硬件结构。在购买的系统上,带有 BSP 的模板,可以指导用户如何编写自己的 BSP 程序。pSO+可 选 部 分D:Doc技术总结pSOS 介绍.doc4.3 引导和加载( ATM & IP)用 户 目 标 板CPU ROM FLASHRAM用户板加电或复位,首先运行 ROM 里的引导程序,该引导程序按以下次序处理:CPU 初
12、始化、板级初始化和运行 OS 内核,并把控制权交给 pSOS 内核。pSOS 内核运行我们的应用程序(root 任务,类似于 main) ,在 ROM 里的版本程序包括了我们的支撑系统、文件管理应用和版本加载应用,进行 RAM 版本加载过程(该版本为 OS+APP) 。这当中要校验 FLASH 中的版本文件,如没有则要和后台进行同步,校验通过后将该版本加载到RAM 中指定地址空间里后硬跳转到该地址处运行。ROM 里存放引导程序和版本加栽程序(OS+APP) 。FLASM RAM 是用户板上的电子盘,掉电可保存数据在其上建立了我们的文件系统。RAM 中存放我们的运行程序(OS+APP) 。6.技
13、术细节和难点 引导和装载(boot & load):FLASM ROM,DPRAM ,FLASM RAM 对版本的组织和内存的规划。 ISRs 的使用,主要是与 task 的接口: BSP 软件包的开发:7.内存规划和有关内存的系统调用接口由于用户目标板上软、硬件各部份是可定制的,这给我们带来了许多灵活性同时也带来了许多困难。目标单板上的内存组织有以下几点需要注意。(bsp.h 、sys_conf.h 、memory.bk) ,partition 和 region 有什么区别?1pSOS 的内存划分从内存资源和版本文件的角度来看我们可将内存分成 ROM 和 RAM(版本为D:Doc技术总结pS
14、OS 介绍.docrom.hx 和 ram.hx,他们只需在配置文件中做修改即可,memory.bk) ,这我主要想说明一下 RAM。假设物理内存有 32M,OS 如何得到并使用他呢?RG#0 是运行版本(OS+APP)的内存区(包括代码段、数据段和堆栈段等) ,也即系统使用的内存区,该区域的大小是可配置的他由 SC_RAM_SIZE 和 KC_RN0USIZE x 32767 决定(sys_conf.h) ,取其中最小的。KC_RN0USIZE 是系统内存 RG#0 的每个 unit 的大小,单位是字节。如果系统有 32MB 的内存,应设为 0x400(32KB 0x400 = 32MB);
15、如果有 64MB 的物理内存,应设为 0x800。SC_RAM_SIZE(sys_conf.h)指出系统使用的最大 RAM 内存大小,当指定出的 SC_RAM_SIZE 小于 KC_RN0USIZE x 32767 系统只能访问 BSP_RAM_BASE(bsp.h)到 BSP_RAM_BASE + SC_RAM_SIZE 1 这段内存, BSP_RAM_BASE + SC_RAM_SIZE 可以做别的用,通常给应用程序做内存区用。在做 BOOTROM 程序时,一般把 SC_RAM_SIZE 设为 0x60000,这样BOOTROM 程序只使用 00x60000-1 内存来存放数据。0x600
16、00 以上的保留给 RAM程序使用,我们在链接 ram 程序时,一定要链接到 0x60000 以上,不要和 BOOTROM程序的数据冲突。2pSOS 的内存使用pSOS 在给应用提供可分配的动态内存资源时是将系统内存管理成 partition 和region。在 partition 中又可分出许多个 buffers,每个 buffer 的大小是 2 的幂次方这样就不受 unit 大小限制;而 region 中可分出许多个 segments,每个 segment 的大小由 unit大小决定,每次调用 rn_getseg 从指定 region 动态分配内存的时候,系统以 unit 为单元进行分配,如 unit 大小为 0x400,哪怕你只需要分配一个字节,系统也是给你一个unit ,即 0x400 个字节。为了合理利用系