老的BSPs(VxWorks 6.9.3.x 还有之前版本)与 VxWorks 7 不兼容,原因存在以下基本差异。

  • VxWorks 7 使用新的VxBus基础架构,其中基于设备探测而不是设备信息的硬编码进行配置。
  • VxWorks 7 BSP使用了完全不同的目录结构。
  • VxWorks 7 BSP提供了处理器系列特定组件和板特定组件的分离。

然而,传统的BSP仍然可以使用在VxWorks 7中。只要它只使用VxBus旧设备的驱动程序,并且只要修改为采用新的目录结构即可。

下表突出显示VxWorks 6.9.3.x和VxWroks 7之间的源树结构的相关转换:

Category VxWorks 6.9.3.x VxWorks 7
BSP target/config pkgs/os/board/bsp_legacy-6.9.0.0/
Driver Source target/src/hwif pkgs/os/drv/vxbus_legacy-version_string/src
Driver Header target/h/hwif/ target/src/hwif/h/ pkgs/os/drv/vxbus_legacy-version_string/h/
Driver Supports target/config/comps/vxWroks pkgs/os/drv/vxbus_legacy-version_sting/cdf/

上面的version_sting提供了当前的vxbus_legacy包的版本。对于vxWorks第一版,它是1.0.0.0,对于较新的更新,它可能更高,例如1.0.0.3 。

有关存储驱动程序(SD,ATA,SATA等),请参阅 Migrating File Systems and Storage Devices 获取更多信息。

一般工作流程

  如果当前的VxWorks 6.9.3.x 环境尚未更新到最新版本(本文为6.9.3.3),请先更新它。虽然这不是必须的,但是只有在VxWorks 6.9.3.3迁移到VxWorks7时才会测试此迁移文档。您的BSP应该在更新的环境中构建和运行。

  以下是所需步骤的概述。所有步骤都可以在VxWorks Development Shell或者 Workbench 4中完成。一旦Workbench4运行,赚到Project选项卡并启动VxWorks Development Shell。默认情况下,Workbench 4启动WrTool终端。

在VxWorks 6.9.x中,确保BSP构建并运行。

将旧BSP复制到VxWorks 7(installDir/vxworks-7/pkgs/os/os/board/bsp_legacy-6.9.0.0)中用于传统的BSP的目录。

修改复制的BSP目录中的Makefile和20bsp.cdf文件。

修改复制的源文件中的包含路径。

如有必要,请将旧驱动程序文件(源,标题和支持文件)复制到vxbus_legacydirectory,如上表所示。还有确保每次VxWorks7更新时,如果vxbus_legacy版本已经增加,请将驱动程序复制到最新版本的vxbus_legacy目录。

  使用WrTool执行以下步骤,您可以从Workbench4或命令行启动WrTool。

  1. 构件VSB
  2. 基于VXB创建VxWorks image项目(VIP)
  3. 建立VIP

注意:

在VxWorks 7 中,BSP被复制到项目目录中,当您在VIP创建过程中对BSP进行更改时,如果这些更改在bsp_legacy-6.9.0.0目录中进行,则需要每次重新创建VIP。“vxb vip creae ...”命令行上的-force 选项可以按照上面要求创建。如果使用Workbench 4 创建VIP,所有对BSP的更改都必须在项目的BSP目录中进行

  这是一个迭代过程,当您修改包含路径和消除错误从缺少的6.9.3.3驱动程序必须从6.9.3.3中复制。在所有错误解决之前不会创建VIP。

将VxWorks 6.9.3.x基于PPC的BSP导入VxWorks 7

  您可以将VxWorks 6.9.x基于PPC的BSP迁移到VxWorks 7。

  此过程使用默认配置为标准VxWorks image构建BSP和VxWorks Integration Project(VIP)。对于任何旧版本的 PPC_BSP,您可以使用相同的步骤,也有部分稍有不同。此过程使用fsl_p4080_ds BSP(板)作为示例。

  这里说明假定使用默认的Workbench 4工作区创建VSB和VIP。在Workbench 4终端选项中使用 Development shell和WrTool shell 来迁移BSP。

  您可以将以下旧版PPC_BSP(在Vxworks-6.9/target/config下迁移到Vxworks7):

  • ads8572
  • cds8548
  • ads8544
  • fsl_bsc9132_qds
  • fsl_mds8568
  • fsl_mds8569
  • fsl_mpc8536_ds
  • fsl_p10xx_rdb
  • fsl_p1010_rdb
  • fsl_p2020_rdb
  • fsl_p1020_mds
  • fsl_p1022_ds
  • fsl_p2041_rdb
  • fsl_p3041_ds
  • fsl_p4080_ds
  • fsl_p5040_ds
  • fsl_t4240_qds
  • wrSbc8548
  • wrSbcP3041
  • wrSbcP4080
  • wrSBcP5020

注意:

Wind River建议您将VxWorks 6.9.xBSP移动到工作空间的某个位置(your_vx7_workspace),而不是在主VxWorks 7 BSP目录树(installDir/vxworks-7/pkgs/os/board/archName)。

步骤1:

  确保您的板子在6.9.3.3环境中构建和引导。

步骤2:

  设置WIND_BSP_PATHS环境变量,以便它识别您的工作空间(your_vx7_workspace),对于linux开发环境,通过修改.cshrc或者.login来设置WIND_BSP_PATHS环境变量。对于Window开发环境,请执行以下操作:

打开控制面板->系统

点击高级系统设置

点击环境变量

在系统环境变量区域,添加一个名叫 WIND_BSP_PATHS 新的变量,并设置新的变量指向您的地址(your_vx7_workspace).

三次点击确定即可保存和退出。

步骤3:

  运行Workbench4 并打开 development shell 还有 WrTool。

步骤4:

  在VxWorks 的 development shell 中,将您旧的BSP完整目录复制到您的VxWorks 7 安装的工作区中的目录。

  使用CP命令,如下所示:

cp -r legacyBSPPath yourVx7Workspace

  在这个例子中,VxWorks 6.9.3.3 legacy BSP在6.9.3.3 installDir/vxworks-6.9/target/config/fsl_p4080_ds

步骤5:

  使用编辑器,在新创建的BSP目录(your_vx7_workspace/fsl_p4080_ds)中创建一个名为bsp.vsbl的文件。该文件应该含有如下格式内容:

layer bsp6x_fsl_p4080_ds
    {
    SYNOPSIS A legacy fsl_p4080_ds BSP to be used in VxWorks 7 
    VERSION 6.9.3.3.p    #.p stands for ported
    LAYER_REQUIRES VXBUS_LEGACY
    LAYER_CONTENT compat69      
    }
步骤6:

  复制必须的VxBus 旧驱动程序。

步骤7:

  使用vxprj命令可以查看和验证新的BSP。使用 vxprj vsb listBsps 命令:

vxprj vxb listBsps -compat69

  因为BSP是VxWorks 6.9.x BSP,您需要使用compat69标识。VxWorks7 通过将bsp6x_添加到 从_6_9_0_0开始到6.9BSP名称末尾来更改BSP的名称。目录名称不可更改,只有BSP被查看的方式。在此示例中,所需的BSP bsp6x_fsl_p4080_ds_6_9_0_0以粗体显示。

wrtool> vxprj vsb listBsps -compat69
Valid compat69 BSPs:
    bsp6x_itl_x86_2_1_1_1
    bsp6x_itl_x86__NITX_315_2_1_1_1
    bsp6x_itl_x86atom_2_1_1_1
    bsp6x_itl_x86atom__NITX_315_2_1_1_1
    bsp6x_itl_x86core2_2_1_1_1
    bsp6x_itl_x86coreix_2_1_1_1
    bsp6x_itl_x86coreix__shumway_2_1_1_1
    bsp6x_linux_6_9_0_0
    bsp6x_simpc_6_9_0_0
    bsp6x_wrSbc8548_6_9_0_0
    bsp6x_fsl_p4080_ds_6_9_0_0
    itl_64_1_0_0_2

可能你的列表不一定相同,但是你应该能够看到你的BSP包。

步骤8:

  改变你的目录到VxWorks 7 旧BSP目录。在这里的列子中,目录应该是 installDir/vxworks-7/pkgs/os/board/bsp_legacy-6.9.0.0/fsl_p4080_ds.

步骤9:在迁移的BSP目录中编辑Makefile文件

  修改CPU从PPC32到PPCE500MC。如下行:

CPU = PPC32

改为下面这行

CPU = PPCE500MC

移除或者注释掉TGT_DIR定义

#TGT_DIR = $(WINDBASE)/target

修改下面两行:

include $(TGT_DIR)/h/make/defs.bsp
include $(TGT_DIR)/h/make/rules.bsp

到下面这两行:

include $(WIND_KRNL_MK)/defs.bsp.mk
include $(WIND_KRNL_MK)/rules.bsp.mk
步骤10:

  将BSP{}构造从20bsp.cdf移动到新的bsp.cdf文件。您可以复制20bsp.cdf并将其重命名为bsp.cdf。在原来的20bsp.cdf文件中,删除BSP{}构造。在新的bsp.cdf文件中,删除除BSP{}构造之外的所有内容。

步骤11:修改bsp.cdf文件

将CPU从PPC32修改为PPCE500MC。

如果存在ENDIAN和MP_OPTIONS的值,请确保其合理。在这里你应该看到如下定义:

Bsp fsl_p4080_ds{
    CPU            PPC32
    MP_OPTIONS     UP SMP
    ENDIAN         big
    FP             hard soft
    ... .
    ... .
}

将其修改为如下定义:

Bsp fsl_p4080_ds{
    CPU           PPCE500MC
    MP_OPTIONS    UP SMP
    ENDIAN        big
    FP            hard soft
    ... .
    ... .
}

这里就修改了CPU的定义。

步骤12:基于此BSP创建VSB。

  从Workbench4 中的终端窗口中的WrTool,使用此vxprj vxb create命令:

vxprj vsb create -force -bsp bspName -compat69 vsbName -S   在这里的例子中,命令和下面相似:

vxprj vxb create -force -bsp bsp6x_fsl_p4080_ds_6_9_0_0 -compat69 myP4080VSB -S

Successfully created project.
wrtool>prj list
myP4080VSB(Wind River VxWorks 7 Source Build Project)

输出也显示在Workbench 4 构建控制台上。

步骤13:编译VSB

  从Workbench 4中的终端窗口中的WrTool,使用此prj build命令:

prj build vsbName 在这个例子中,输出应该如下:

wrtool>prj build myP4080VSB
... .
... .
Build Finished with JOBS=48 in Project 'myP4080VSB': 2014-03-05 07:58:30  (Elapsed Time : 00:32)
步骤14:创建VIP

  使用vxprj vip create命令创建:

vxprj vip create -force -vsb vsbName bspName diab vipName

在这个例子中,命令输出和下面类似:

wrtool> vxprj vip create –force -vsb myP4080VSB bsp6x_fsl_p4080_ds_6_9_0_0 diab
myP4080VIP
…
…
"sysLib.c", line 134: error (dcc:1621): can't find include file vme.h
"sysLib.c", line 169: error (dcc:1621): can't find include file h/vxbus/vxbAccess.h
"sysLib.c", line 813: error (dcc:1621): can't find include file mem/flashMem.c
"sysLib.c", line 814: error (dcc:1621): can't find include file mem/nvRamToFlash.c
"hwconf.c", line 58: error (dcc:1621): can't find include file ../src/hwif/h/vxbus/vxbRapidIO.h
"hwconf.c", line 63: error (dcc:1621): can't find include file ../src/hwif/h/end/vxbDtsecEnd.h
"hwconf.c", line 68: error (dcc:1621): can't find include file ../src/hwif/intCtlr/vxbIntDynaCtlrLib.h
make: *** [headerMacros] Error 1
"make headerMacros BSP2PRJ=TRUE
TOOL_OPTIONS_FILES_DIR=/ala-analysis1/vx7/PreventMar04am/vxworks/workspace/myP408
0VIP OPT=-inet6 CPU=PPCE500MC TOOL=diab VSB_DIR=/ala-analysis1/vx7/PreventMar04am/
vxworks/workspace/myP4080VSB TO OL_VERSION=diab_5_9_1_0
_CC_VERSION=diab_5_9_1_0" failed
Project creation failed (process exist value was 255: 2014-03-05 08:22:51
Elapsed Time: 00:13
wrtool>
步骤15:纠正所有错误:

  构建和创建VIP是一个迭代过程。VxWorks目录结构从VxWorks 6.9到VxWorks7大幅度变化。您需要更改包含文件的一些路径名,并将一些VxWorks 6.9.x文件复制到迁移的BSP。

  发现和修复错误最有效的方法就是查看VIP创建时候的输出了。

a). 更新一些包含文件的路径名:一般情况下,你需要修改下面的路径名字:

Vxworks 6.9.x pathname VxWorks 7 pathname
../src/hwif/h hwif/
../src/hwif/h/vxbus vxbus/

在此示例中,您需要在hwconf.c中进行以下修改:

VxWorks 6.9.x statement VxWorks 7 statement
#include <../src/hwif/h/vxbus/vxRapidIO.h> #include <vxbus/vxbRapidIO.h>
#include <../src/hwif/h/end/vxbDtsecEnd.h> #include <hwif/end/vxDtsecEnd.h>
#include <../src/hwif/h/intCtlr/vxbIntDynaCtlrLib.h> #include <hwif/intCtlr/vxbIntDynaCtlrLib.h>
#include <h/vxbus/vxbAccess> #include <vxbus/vsbAccess>

b). 将任何缺少的文件从VxWorks 6.9.x安装复制到迁移的BSP目录并更新其脚本。在此示例中,您必须复制sysLib.c使用的一下文件:

vxworks6.9Dir/target/h/vme.h
vxworks6.9Dir/target/src/drv/mem/flashMem.c
vxworks6.9Dir/target/src/drv/mem/nvRamToFlash.c

到以下目录:

installDir/vxworks-7/pkgs/os/board/bsp_legacy-6.9.0.0/fsl_p4080_ds

然后更改这些sysLib.c 中 #include 语句中使用的路径名;

VxWorks 6.9.x statement VxWorks 7 statement
#include #include "vme.h"
#include <mem/flashMem.c> #include "flashMem.c"
#include <mem/nvRamToFlash.c> #include "nvRamToFlash.c"

可能还有其他文件需要你复制。

重复这些步骤以创建VIP和更正错误,直到没有更多的错误,您会看到以下内容:

wrtool>vxprj vip create -force -vsb myp4080VSB bsp6x_fsl_p4080_ds_6_9_0_0 diab myP4080Vip

Successfully created project.
wrtool>

这样子您的项目列表就存在两个项目了:

wrtool>prj list
myP4080VIP (Wind River VxWorks 7 Image Project)
myP4080VSB (Wind River VxWorks 7 Source Build Project)
wrtool>
步骤16:编译VIP项目:

  使用prj build命令编译

prj build vipName

  在这里的例子中:如下所示

wrtool>prj build myP4080VIP
...
...
...
make[1]: Leaving directory '/ala-analysis1/vx7/PreventMar04am/vxworks/workspace/myP4080
VIP/default'
make: built targets of /ala-analysis1/vx7/PreventMar04am/vxworks/workspace/myP4080VIP
Build Finished with JOBS=48 in Project 'myP4080VIP': 2014-03-05 12:59:37 (Elapsed Time: 00:07)
wrtool>

  项目完成后,您可以下载到您的目标板上,由于这是一个Workbench 4构建,Vxworks image文件位于vxworks/workspace/myP4080VIP/default中。

  在使用VxWorks image引导您的目标板之后,您应该可以看到:

Loading... 1905316 + 252 + 556 + 430520
Starting at 0x100000...
Target Name: vxTarget
VxWorks 7
Copyright 1984-2014 Wind River Systems, Inc.
Core Kernel version: 1.0.0.0
Build date: Mar 5 2014 12:59:33
Board: Freescale QorIQ P4080
OS Memory Size: 512MB
ED&R Policy Mode: Deployed
Adding 7524 symbols for standalone.