关于 #
应用程序开发者的角色是为特定的 VxWorks 源码构建(VSB)和 VxWorks 镜像工程(VIP)创建可下载内核模块(DKMs)、实时进程(RTPs)和库。 软件开发套件(SDK)为开发者提供了编译、调试和测试应用程序及库所需的工具。
- RTP (Real-Time Process) – 在用户空间中运行的可执行应用程序。RTPs 在隔离的环境中运行,增加了健壮性。它们生成
.vxe
文件,可以从文件系统(RomFS、NFS、SD卡)加载,或者直接通过 WRDBG 调试器加载。 - DKM (Downloadable Kernel Module) – 一种内核模式应用程序,具有完整的系统和硬件访问权限。DKMs 生成
.out
文件,可以静态链接到内核,从文件系统动态加载,或通过 WRDBG 加载。
注意: 调试时,RTP 应用程序必须使用 .vxe
扩展名,DKM 应用程序必须使用 .out
扩展名。
前提条件 #
-
Python 3.6+
- Linux
sudo apt-get install python3 && python3 -m pip install -U pip
- Windows 下载 Python 并在安装过程中选择 将 Python 添加到 PATH。
- Linux
-
平台开发者提供的已生成 SDK。
SDK 目录结构 #
一个已生成 SDK 的示例布局:
WRSDK_VXWORKS-7_<VIP_NAME>_<VSB_ARCH>_<HOST_TYPE>_<TIMESTAMP>
├── bsps # BSP 镜像和启动文件
│ └── <BSP_NAME>
│ ├── boot/vxWorks
│ ├── uboot/uVxWorks, vxWorks.bin
│ └── readme/readme.md
├── toolkit # 开发者工具和交叉编译器
│ ├── wind_sdk_env.linux / wind_sdk_env.bat
│ ├── host_tools
│ ├── wrdbg_tools
│ ├── sdk_tools/qemu
│ ├── bin
│ ├── compilers
│ ├── include
│ └── license
├── artifacts # 可选:用于重建 VSB/VIP 的工件
│ ├── <VIP_PROFILE>.cdf
│ └── vsb.config
├── examples # 可构建的代码示例
└── docs # VxWorks API 和 BSP 文档
└── resources/vxworks-7
应用程序开发 #
命令行 #
命令行前提条件 #
在构建应用程序之前:
- 确保满足[#前提条件]。
- 进入 SDK 基础目录。
- 加载 SDK 环境以更新
PATH
和环境变量:
- Linux
source toolkit/wind_sdk_env.linux
- Windows
toolkit\wind_sdk_env.bat
编译应用程序 #
应用程序编译遵循典型的 C/C++ 工作流程(Make、CMake)。examples/makefiles
中有示例 Makefile。
编译 RTPs #
-
使用 Makefile
make
-
不使用 Makefile Linux:
$CC rtp.c -o rtp.vxe -static
Windows:
%CC% rtp.c -o rtp.vxe -static
编译 DKMs #
-
使用 Makefile
make
-
不使用 Makefile Linux:
$CC -dkm dkm.c -o dkm.out
Windows:
%CC% -dkm dkm.c -o dkm.out
编译 CMake RTPs #
- 从
examples/cmakefiles
复制Preload.cmake
和vxsdk_toolchain.cmake
。 - 创建
CMakeLists.txt
。 - 运行:
cmake -DCMAKE_TOOLCHAIN_FILE=vxsdk_toolchain.cmake . make
运行应用程序 #
运行 RTPs #
wrdbg
file <PATH_TO_RTP_APP>
run
示例:
file ~/SDK/examples/hello_world/RTP/hello_world.vxe
运行 DKMs #
wrdbg
module load <PATH_TO_DKM_APP>
使用以下命令检查:
lkup "startHelloWorld"
调试应用程序 #
调试 RTPs #
wrdbg
file ~/SDK/examples/hello_world/RTP/hello_world.vxe
参见 WRDBG 参考指南。
调试 DKMs #
wrdbg
module load ~/SDK/examples/hello_world/DKM/hello_world.out
task create startHelloWorld
Visual Studio Code 扩展 #
VSCode 前提条件 #
- 确保满足[#前提条件]。
- 完成 VSCode 设置。
创建 VSCode 应用程序 #
-
RTP/DKM: 在 Explorer 中右键单击 →
New VxWorks Real Time Process
或New VxWorks Downloadable Kernel Module
。 -
CMake RTPs: 在 Explorer 中右键单击 →
New VxWorks CMake Project
。
编译 VSCode 应用程序 #
-
RTPs/DKMs: 右键单击项目 →
Build Project
。 -
CMake RTPs: 右键单击项目 →
Build CMake Project
。
调试 VSCode 应用程序 #
- RTPs: 在调试器中选择
Launch RTP
并运行。 - DKMs: 选择
Launch DKM
并运行。执行最初在main()
处停止。
VSCode Docker 支持 #
-
需要 Linux SDK。在 Windows 上,使用 WSL + Linux SDK。
-
安装 Remote - Containers(Windows 用户还需安装 Remote - WSL)。
-
在容器模式下重新打开 SDK 文件夹。
启动 VxWorks 目标 #
- 选项 1:硬件 – 请参阅 BSP 特定的 README。
- 选项 2:QEMU – 如果包含,请使用随附的模拟支持。
QEMU 用法 #
startqemu.py --smp 2 --m 512 -b
或从 SDK 工具运行:
python toolkit/sdk_tools/qemu/startqemu.py
连接到 VxWorks 目标 #
wrdbg
target connect vxworks7:TCP:<TARGET_IP>:1534 -kernel <PATH_TO_VXWORKS_IMAGE>
示例:
target connect vxworks7:TCP:10.10.10.5:1534 -kernel ~/SDK/bsps/ti_sitara/boot/vxWorks
内联汇编 #
您可以使用 asm
嵌入汇编代码:
#include "vxWorks.h"
void main(void) {
__asm("mov ax, bx");
}
多条指令:
#include "vxWorks.h"
void main(void) {
__asm("push {fp, lr}; add fp, sp, #4; mov r3, #0; mov r0, r3; pop {fp, pc};");
}
已知限制 #
- RTP/DKM 调试可能会留下
wrpython2.7
或TCF-server
进程(需手动清理)。 wrdbg
无法处理用户输入。对于交互式应用程序,请使用串行/虚拟控制台。