VxWorks kernal programmers guide 联系客服

发布时间 : 星期六 文章VxWorks kernal programmers guide更新完毕开始阅读73f45dfea0116c175f0e48a7

这个镜像在启动时仅拷贝数据段到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任务和多任务信息,参考6. Tasks and Multitasking。关于和C++一同工作的信息,参考5. C++ Development。

4.5 VxWorks头文件

很多内核应用大量使用VxWorks操作系统工具或工具库。这个通常需要源模块引用Vxworks头文件。如下部分讨论了VxWorks头文件的使用方法。

VxWorks头文件支持针对所有全局VxWorks函数的ANSI C函数原型声明。VxWorks通过

ANSI

X3.159-1989标准规范所有的头文件。

VxWorks系统头文件在installDir/vxworks-6.x/target/h目录下和子目录下。 4.5.1 VxWorks头文件:vxWorks.h

头文件vxWorks.h必须在每个使用VxWorks工具的内核应用模块中首先包含。它包含用于其它

VxWorks模块扩展的基本定义和类型。很多其他VxWorks头文件要求这些定义。

#include

4.5.2 其它VxWorks头文件

内核应用可以包含其它VxWorks头文件,若需要访问VxWorks工具。如一个使用VxWorks链接表库的模块必须包含lstLib.h头文件:

#include

针对每个库的API引用入口列出了用于库的所有必须的头文件。

4.5.3 ANSI 头文件

所有的ANSI规范的头文件都包含在VxWorks中。那些编译器独立的或具体VxWorks的头文件在installDir/vxworks-6.x/target/h,而一个编译器独立的(如stddef.h和stdarg.h)在编译器安装时被提供。每个工具链知道如何查找自身的内部头文件;不需要特殊的编译标志。

4.5.4 ANSI C++头文件

每个编译器有自身的C++库和C++头文件(如iostream和new)。C++头文件位于编译器安装目录,不是installDir/vxworks-6.x/target/h。不需要特殊标志来使能编译器查找这些头文件。关于C++开发更多信息,参考5. C++ Development。

注:VxWorks 5.5先前版本,风河推荐使用-nostdinc标志。目前版本不要使用,会防止编译器查找头文件,如stddef.h。

4.5.5 –I编译器标志

默认,编译器首先在源模块中查找头文件,之后在源模块中子目录中查找。通常编译器总是在查找源模块其它子目录之前查找目录installDir/vxworks-6.x/target/h;为了确保这个顺序,总是在VxWorks下增加如下标志:

-I %WIND_BASE%/target/h %WIND_BASE%/target/h/wrn/coreip 一些头文件位于子目录中 。为了在这些目录下引用头文件,确保include对应子目录名,所有使用单元-I标识符指明,文件会被找到。如:

#include #include

4.5.6

VxWorks嵌套头文件