老的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。
- 构件VSB
- 基于VXB创建VxWorks image项目(VIP)
- 建立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.