VxWorks kernal programmers guide(3)

2019-05-24 21:20

仍保持在ROM中。因此描述为ROM-resident。启动比较快,使用RAM很小,但是运行比较慢,因为ROM访问提取指令比RAM提取指令慢。对于有内存限制的系统比较有用。启动参数配置信息,参考2.7.3 Boot Parameter Configuration for Standalone VxWorks Images。

2.7.1 默认VxWorks镜像

默认VxWorks镜像文件在installDir/vxworks-6.x/target/proj/projName下。如: /home/moi/myInstallDir/vxworks-6.x/target/proj/wrSbc8260_diab/default_rom/vxWorks_rom

2.7.2 针对开发和生产系统的VxWorks镜像

对于很多生产系统通常必须在ROM中存储一个和VxWorks链接的内核应用模块。VxWorks要配置在启动时自动执行应用。系统镜像可以见到存储应用模块允许被其它函数调用,或被终端用户交互使用(如,诊断程序)。

为了生产一个基于ROM的系统,你必须链接模块到v xWorks,并编译为适合ROM的系统镜像类型。相关信息,参考4.12 Configuring VxWorks to Run Applications Automatically。若你想在启动时自动启动应用,你必须配置VxWorks如下(4.12 Configuring VxWorks to Run Applications Automatically)。或参考4.13 Image Size Considerations。

注明,开发过程中,VxWorks必须配置WDB目标代理通讯接口,用于连接主机和目标机系统(网络,串口等)。默认,配置为一个增强网络驱动(END)连接。更多信息,参考D. WDB Target Agent。注明在使用主机开发工具之前,如shell和debugger,必须启动一个目标服务器,配置为通讯的相同模式。

关于配置带不同操作系统工具的VxWorks的信息,参考2.3.2 Device Driver Selection。 若你想在flash在存储镜像,想使用用户TrueFFS,参考13.3.6 Reserving a Region in Flash for a Boot Image。

2.7.3 单独VxWorks镜像启动参数配置

依赖系统需求,你可能需要为一个独立的镜像静态的重新配置启动参数——也就是说,不需要一个boot loader——指所有的系统镜像,除了downloadable vxWorks镜像。如一个网络目标机大多数需要设置本身的IP地址为一些默认的信息。

使用INCLUDE_BSP_MACROS组件的DEFAULT_BOOT_LINE配置参数设置启动参数。针对vxWorks的配置过程和boot loader的配置过程一样。关于boot loader的信息,参考3.5.2 Description of Boot Parameters。关于静态配置的信息,参考3.7.3 Configuring Boot Parameters Statically。

3 Boot Loader

3.1 介绍

一个VxWorks boot loader是一个应用,目的是加载一个VxWorks image到目标机。有时

VxWorks

Bootrom,但是这个词不推荐使用(合并应用和媒介)。如VxWorks,boot loader可以用

不同的工具配置,如命令行工具动态设置启动参数,一个网络loader,和一个文件系统loader。 相同的boot loader VxWorks 配置用于单处理器(UP),对称多处理器(SMP),和非对称多处理器(AMP)。

在一个开发环境中,boot loader对于从一个主机系统加载一个VxWorks镜像时非常有用的,在主机系统上,VxWorks可以快速修改和编译。当boot loader和操作系统都存储在磁盘

上或其它媒介上时,也可以用于生产系统。

Self-booting (standalone) VxWorks images不要求一个boot loader。这些镜像通常用于生产系统(存储在non-volatile设备上)。更多信息,参考2.7 VxWorks Image Types。

常常,boot loader被烧录到一个non-volatile设备(flash内存或EEPROM)上具体地址处,这个地址是目标机上电或重新启动后,处理器执行的第一条代码处。获取烧录在non-volatile设备上的boot loader,或写入到一个磁盘的方法取决于目标机,在BSP参考文档中描述。

VxWorks产品安装包括针对每一个安装BSP的默认boot loader。若它们不满足要求,你可以创建定制boot loaders。如,你可能需要使用一个不同的网卡驱动通过网络来加载Vxworks镜像,或你为了部署系统删除boot loader shell。

本章涉及的信息,特别是关于安装一个cross-development环境的信息,参考Wind River Workbench by Example。

3.2 使用默认boot loader

默认boot loader设计用于一个网络目标,必须配置相关参数,如主机和目标网络地址,加载文件全目录和文件名,用户名等。为了使用默认boot loader,你必须使用boot loader shell交互式的改变默认参数,以至于loader可以找到主机上的VxWorks镜像,并加载到目标机。

进入引导参数后,目标机启动VxWorks镜像。大多数目标机,新的设置会保存(在non-volatile设备或磁盘上),所有你可以直接启动目标机,不需要重新设置默认参数。

在一个终端控制台上,可以和boot loader shell交互,这个终端控制台,通过串口连接主机和目标机,在主机上启动一个终端应用程序。建立通讯的具体信息,参考相关文档。

默认boot loade镜像位于installDir/vxworks-6.x/target/config/bspName。Boot loader命令和参数在3.4.1 Boot Loader Shell Commands描述和3.5 Boot Parameters。提供不同的Boot loader镜像类型,如3.3 Boot Loader Image Types描述。

3.3 Boot Loader Image类型

Boot loader镜像可以存储在ROM,flash,磁盘,或存储在网络上。Boot loader镜像是ELF个数。二进制版本(.bin)用于磁盘,16进制文件版本(.hex)用于烧录non-volatile设备。什么样的目标机选择什么样的boot loader,参考BSP相关文档。

下面描述了boot loader的不同版本。下面列出的每一组镜像的第一个镜像是通过PROFILE_BOOTAPP配置原型产生的,第二个通过传统的bspDir/config.h方法。关于编译方法的更多信息,参考3.7 Configuring and Building Boot Loaders。

Compressed Image

vxWorks_romCompress 和 bootrom 文件 这个镜像几乎是整个压缩的。有一小部分未压缩部分,在设备上电或复位之后处理器立即运行。这部分初始化内存和解压缩压缩部分(存储在非易失性设备上)到RAM,导致处理器切换到RAM执行。压缩镜像比其他boot loader镜像小,因此使用比较小的非易失性存储空间。然而,解压缩增加了启动时间。

Uncompressed Image

vxWorks_rom 和 bootrom_uncmp 文件 这个镜像没有压缩。拷贝本身到RAM,处理器切换到RAM执行。因为镜像没有压缩,所以比压缩镜像大。然而,启动时间比较快,因为不需要要求的解压缩操作。

Resident in Non-Volatile Storage

vxWorks_romResident 和 bootrom_res 文件

这个镜像在启动时仅拷贝数据段到RAM,文本段保留在非易失存储上。这意味着处理器总是在非易失性存储外执行指令。因此有时描述为ROM-驻留型。这种类型的boot loader要求足够大的RAM来加载VxWorks内核。因此对于带有较小的RAM板卡,RAM是为应用保存数据的情况是很有用的。

Boot loader镜像位于installDir/vxworks-6.x/target/config/bspName。注明大多数默认BSP的默认镜像都需要配置网络开发环境。关于创建一个定制boot loader的信息,参考3.7 Configuring and Building Boot Loaders。

3.4 Boot Loader Shell

Boot loader shell提供了如何命令:

? 改变启动参数(如主机和目标IP地址) ? 重新启动目标系统 ? 管理启动过程

配置INCLUDE_BOOT_SHELL组件到boot loader,来包含boot loader shell。

提醒:不要增加INCLUDE_WDB_BANNER,INCLUDE_SIMPLE_BANNER,INCLUDE_SHELL或组件到boot loader。这些组件和boot loader shell冲突。若你包含了这些组件中的的其中一个,你会遇到错误。

3.5 Boot Parameters

启动参数包括需要定位和加载一个VxWorks内核的所有信息,还有其它用于管理启动过程的信息。根据具体启动配置要求,可以包含主机和目标机IP地址和全路径和要引导的VxWorks镜像名,用户名等。启动参数可以在运行时交互改变,也可以在创建boot loader时静态配置。交互改变启动参数要通过重启生效(在一个非易失性设备或磁盘上)。启动参数用于独立VxWorks镜像——不需要一个boot loader——boot loader自身用(更多信息,参考2.7 VxWorks Image Types)。 3.5.1 显示目前的启动参数

3.5.2 启动参数描述

3.5.3 交互式改变启动参数

3.6 Rebooting VxWorks

3.7 配置和编译Boot Loaders

3.8 安装boot Loaders

3.9 从一个网卡启动

3.10

从一个目标文件系统启动 从使用TSFS的主机文件系统启动

3.11

4 内核应用程序

4.1 介绍

VxWorks内核应用执行在和内核本身一样的模式和内存空间。这方面和用于其它操作系统的应用不一样,如UNIX和Linux;也和VxWorks实时进程RTP应用不一样。

内核应用可以交换下载和运行在一个VxWorks目标机上,或链接到操作系统镜像中,(可选)在启动时自动执行。

这一章提供了关于编写内核应用代码,创建为用户使用的静态库,内核对象静态实例化,执行应用等相关的信息。关于多任务,I/O,文件系统,其它内核中有的vxWorks工具相关的信息,参考相关章节。

关于Workbench和命令行编译环境相关信息,参考Wind River Workbench by Example和VxWorks Command-Line Tools User’s Guide。

关于开发用户模式RTP应用相关信息(作为用户模式的实时进程一样执行),参考VxWorks Application Programmer’s Guide。

4.2 关于内核应用

执行在内核中的VxWorks应用创建为一个浮动对象模块。它们可以被称为最特别的kernel-based application modules,但是通常为了方便称它们为kernel application modules或kernel applications。不要和执行在用户模式(实时进程RTPs)的应用混淆。

当一个基于内核应用模块编译后,用户代码被链接到请求的VxWorks库,产生一个ELF二进制文件。内核应用包含定义操作系统接口和数据结构的头文件后使用VxWorks工具。

内核应用模块可能是:

通过对象模块loader加载或动态链接到操作系统中。 静态链接到操作系统,作为系统镜像的一部分。 下载内核模块对应快速开发和调试非常有用,因为操作系统不需要为应用的每个迭代重新编译。这个方法也可能用于生产系统的诊断工具。不同的开发工具,包括调试器和shell(主机或内核),可以用于下载和管理模块。模块可以从任何主机支持的文件系统中(NFS,ftp等)下载到目标机。

内核应用模块也可以存储在目标机flash或ROM中,在ROMFS文件系统中,或磁盘上。一旦它们已经加载到目标机,内核应用模块可以在shell或Wrokbench上立即启动这些应用。

静态链接到操作系统的应用模块可以在shell或Workbench中交互运行。VxWorks也可以配置它们为启动时自动启动。静态链接和自动启动在生产系统中比较稳定。

一个运行在内核空间中的应用不会像一个进程一样执行;简化为另外一组执行在内核空间的其它一组任务。内核不保护任何一个参与的内核应用导致的任何不良行为——内核应用和内核以管理员模式运行在同样的地址空间。

警告:若你想移植一个内核应用到用户模式应用,执行为一个RTP,你必须确保代码满足一个RTP应用的要求和编译为一个RTP。你必须确保VxWorks配置支持RTPs。更多信息,参考VxWorks Application Programmer's Guide。

4.3 C和C++库

风河固有C库和Dinkum C和C++库都为VxWorks应用开发提供了。如Table 4-1展示,VxWorks固有库用于C内核应用开发,和库用于所有案例。

VxWorks固有C库提供ANSI规格外函数。注明不对多字节字符提供支持。

关于这些库的更多信息,参考VxWorks and Dinkum API references。关于C++工具更多信息,参考5. C++ Development。

4.4 内核应用结构

内核应用代码和通常C或C++应用相似,不一样的地方是,内核应用不需要传统的main()函数(不像一个基于进程的VxWorks应用)。仅需要一个入口点函数,启动应用运行需要的所有任务。

注明:若你的内核应用包括一个main()函数,也不会自动启动。下载或存储在系统镜像中的内核应用模块必须被交互启动(或被另外一个已经运行的应用启动)。操作系统也可以配置为自动启动(参考a4.12 Configuring VxWorks to Run Applications Automatically)。 入口点函数执行所有需要的数据初始化,启动所有运行应用使用的任务。如一个内核应用可能有一个函数命名为myAppStartUp( ):

void myAppStartUp (void) {

runFoo();

tidThis = taskSpawn(\(FUNCPTR) thisRoutine,0,0,0,0,0,0,0,0,0,0); tidThat = taskSpawn(\(FUNCPTR) thatRoutine,0,0,0,0,0,0,0,0,0,0);

tidAnother = taskSpawn(\(FUNCPTR) anotherRoutine,0,0,0,0,0,0,0,0,0,0); return (OK); }


VxWorks kernal programmers guide(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:平板挤压式核桃破壳机的设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: