vxworks 笔记

vxworks 笔记

 

1    安装

Vxworks 有两张安装盘,安装有以下步骤:

1)        安装tornado 2.2.1

使用第一张盘,注意安装时必须保证当前没有安装过tornado,如果安装过必须从注册表中清空所有的tornado;选择“ManualLicense”,即License手动安装

 

2)        安装BSP/Drivers

第一张盘和第二张盘都用了,不知什么东西,也不懂

 

3)        安装License

复制license.dat文件到某个位置,然后设置“系统环境变量”,指向这个文件license.dat,注意必须是“系统环境变量”,不能是“用户环境变量”

这就是手动安装License 环节。

 

安装完成,tornada 被安装到D:\Tornada2.2

 

2    调整

本次任务是完成vxworks 环境下ppc 85xx系列的SDK发布环境,因此需要将之前准备好的ppc 85xx环境复制过来。当时直接将以前开发人员的target、host目录直接复制过来覆盖即可,注意备份。

 

3    vxWorks 简介

3.1                  目录树

下图为目录树结构,目前我们仅关注的是host、target两个;如果获取帮助可以直接查看docs中的books.html即可。

 

3.2                  工具包

编译vxworks 时使用gnu工具,包括make、grep等等,这些工具都是专门编译好的windows 程序,具体位置在host/x86-win32/bin/目录下,因此在使用脚本编译时必须将该目录包含到path环境变量中。

 

3.3                  交叉编译工具链

交叉编译工具链包括编译器、头文件、库文件。

1)        编译器

gcc编译器位置在host\gnu,当前使用gcc作为编译器

vxworks 提供的diab编译器,位置在host\diab

 

2)        头文件

可以理解为Linux 下的libc库头文件,此为vxworks头文件,位置在target/h,注意,此目录下不仅在C语言头文件,也包含vxworks的编译框架makefile头文件

 

3)        库文件

此为vxworks库文件,位置在target/lib

 

 

3.4                  BSP

即板级支持包,位置在target/config/目录下,基本上每个目录为一个BSP,每个硬件类型都有一个BSP对应,特例如下:

目录comps,为所有BSP的基本模块描述文件

目录all,所有BSP的公共部分,当前放置在xvfi8548目录下了,由于xvfi8548的BSP中Makefile如此写,因此没有更改all的位置。

 

3.5                  project

位置在target/proj/目录下,对应使用tronado集成环境下的工程,创建一个工程即生成一个目录,当前使用的工程为xvfi8548。

 

3.6                  Image

vxworks image分两种:

bootrom,即引导器,用于加载和启动vxworksimage,bootrom由BSP编译获得,这个东西目前是通过烧录器烧录到flash上,相当麻烦;希望可以使用uboot来代替。

vxworks,即vxworks主程序,相当于Linux内核加root文件系统,由BSP外加启动程序实现。由target/proj/xvfi854/目录下编译获得。

 

 

4    编译框架

vxworks编译使用gnu make工具,工程之间互相独立,BSP也互相独立。目前需要编译的东西就是bootrom和vxworks两个。

下面以编译vxworks为例详细介绍整个编译过程。

4.1                  编译组成

当前工程下的Makefile和target/h/make 目录组成,在编译之前务必要设置环境变量,这些环境变量有:

WIND_BASE              此为vxworks安装的主目录,也即host、target目录的上一层目录

WIND_HOST_TYPE  即当前系统的架构,均为x86-win32

PATH                            主要是添加工具包路径和编译工具链路径

 

设置好环境变量后,在需要编译的工程(或者BSP)目录下执行make即可,比如当前的vxworks工程在target/proj/xvfi8548/目录下,直接到该目录下make 即可。

 

vxworks的编译组成相当复杂,实在是讨厌至极啊。

4.1.1        Makefile

工程的Makefile做了如下的事情:

1)        定义需要编译的.o文件集合,以及这些.o文件的编译方式,某些.o文件对应的.c文件来自于BSP,某些来自当前目录

2)        包含一堆其他的makefile,其中最重要的是两个,defs.project和rules.project

3)        定义编译参数CFLAGS,注意在PPC环境下务必要使用-mstrict-align确保对齐访问

4)        定义链接参数LIBS,链接其他外部模块,这里包括ezdriver的模块和SDK模块

 

注意这个Makefile没有指定default要做什么,这个default 目标在defs.project中定义

 

4.1.2        defs.project

顾名思义,该文件主要是定义变量。

定义了default目标,它依赖于exe条件,注意,这个default是整个Makefile的第一个目标,所以make 命令会以它做为编译的目标。这个exe又在rules.project中定义。

         还要注意其中的CFG_GEN变量,它用来产生依赖关系,但由于我们不会在vxworks 上做多少二次开发,不需要生成什么依赖,全部重新编译即可,因此后续可以看到将这个生成依赖的命令去年了。

         同时这个文件包含了一系列的makefile文件,以下详述:

1)        defs.link

定义link(链接)时的一些变量

2)        defs.x86-win32

定义一堆gnu工具,包括RM、CP等等

3)        defs.vxworks

定义POSTLINK_MODULES,包括生成ctdt.o这个文件,该文件以后在链接vxworks image时会用到

4)        make.ppc85xxgnu

定义编译工具链

 

4.1.3        rules.project

顾名思义,该文件主要定义编译规则。

终于找到exe目标的规则了,它依赖于$(default_rule),这个default_rule在工程的Makefile中就已经定义了,为vxWorks。

该文件包含了rules.vxWorks,其中定义了vxWorks的编译规则,它依赖于partialImage.o和POSTLINK_MODULES。而其中的partialImage.o 就是Makefile中定义的.o文件集合聚合生成的。

 

4.2                  编译过程

4.2.1        生成.o文件

.o文件集合由Makefile定义,包含sysALib.osysLib.o usrAppInit.o linkSyms.o npclib.o mmuE500LibExt.o i2clib.o bspDebug.omotTsecEnd.o usrprjConfig.o,注意这些文件对应的源文件有些在当前工程下有些在BSP下。

 

4.2.2        生成partialImage.o文件

该文件由如下文件生成:

1)        4.2.1编译生成的所有.o文件

2)        version.o文件,其源文件位于target/config/comps/src目录下,版本号文件

3)        CPU专用库文件,当前为target/lib/libPPC85XXgnuvx.a

4)        所有外部库文件,包括ezdriver编译的.a和SDK编译的.a文件

 

注意此处是链接过程,但链接时如果某函数没有被调用则不会链接进去。

 

4.2.3        生成vxworks image

该文件由如下文件生成:

1)        4.2.2生成的partialImage.o文件

2)        ctdt.o 文件,该文件的源文件ctdt.c是由partialImage.o生成的,内容相当简单,不知道有什么用处

3)        symTbl.o文件,该文件的源文件symTbl.c是由partialImage.o生成的,其中包含了所有的导出symbol,包含函数和变量,某个函数是否被编译进vxworksimage可以直接查看该文件

4)        dataSegPad.o,源文件位置target/config/comps/src/,代码段保护文件

 

 

 

 

 

 

                               

 

 

 

 

 

 

 

                                                                                                        


 

5    启动调试

vxworks的应用程序均在usrAppInit.c 文件usrAppInit函数中启动,如果需要vxworks启动时执行自定义的任务则需要在此函数中嵌入代码。

目前调试环境是在vxworks shell中,为确保SDK和ezdriver的库文件均编译进入,在usrAppInit函数中调用AHE_root函数,但不是启动时调用,是永远不可能到达的分支中调用。

 

l  波特率

目前vxworks和bootrom使用的是9600的波特率,和uboot以及Linux不一样(115200),这个可以在configAll.h中修改。

 

l  bootrom

bootrom 修改启动参数无效,当前的bootrom 写死了ftp server为192.168.6.56,本机地址为192.168.6.91,ftp用户名、密码均为w,如果要修改则必须重新刷bootrom,这个问题可以通过修改bootrom来解决,查看文件bootconfig.c,函数bootcmdloop在处理命令’c’时,会将用户输入的配置调用函数sysNvRamSet刷新入内存,但目前会失败,sysNvRamSet函数有太多的实现地方,估计正好编译了某个不支持内存写的函数。

 

l  文件操作

vxworks没有使用文件系统,但可以打开和关闭文件,在代码中使用fopen时,vxworks会从FTP server上下载一个文件,unlink时会在FTP server上删除一个文件。

 

l  NP启动

NP启动时会需要打开一个EZdat.dat文件,这个文件貌似是NP的配置,必须的,否则会导致NP异常,因此必须将该文件放置到FTP server上供下载。该文件位置如下:

$(EZDRIVER_DIR)/host/tbs/lib/

 

l  多次调试

AHE_root函数只能执行一次,再次执行时会报NP初始化错误,但仍然可以进行多次测试。在执行完第一次的AHE_root后退出,然后再执行SDK的测试函数即可,此刻NP初始化已经完成,不需要再初始化了。


你可能感兴趣的:(server,image,工具,makefile,编译器,linux内核)