一、前提条件
1. 使用此文档需符合以下条件
1.1 拥有Linux版的VectorCAST许可证
1.2 拥有Linux版的VectorCAST安装包
1.3 拥有Linux版的VectorCAST安装包
1.3.1 建议用Ubuntu 16及以上的版本
1.3.2 交叉编译器指的gcc based各种linux编译器,32bit或者64bit的ARM芯片都支持。
二、配置Demo项目
1. 初识RSP包
1.1 RSP包含一个启动脚本(*.sh)和多个编译模板配置文件(*.CFG)
1.1.1LAUNCH_VCAST.sh
1.1.1.1 启动VCAST的脚本,每次启动都需要运行
1.1.1.2 包含所有需要提前配置的环境变量
1.1.1.2.1 VCAST, COMPILER, QEMU相关变量
1.1.1.3 方便移植其他电脑
1.2 VectorCAST_CFG目录
1.2.1 包含4个通用模板文件(.CFG)
1.2.2 Linux_ARM32_C.CFG
1.2.2.1 基于32位编译链的C项目
1.2.3 Linux_ARM32_CPP.CFG
1.2.3.1 基于32位编译链的C++项目
1.2.4 Linux_ARM64_C.CFG
1.2.4.1 基于64位编译链的C项目
1.2.5 Linux_ARM64_CPP.CFG
1.2.5.1 基于64位编译链的C++项目
1.2.6 simulator_qmu_debug.sh
1.2.6.1 Qemu调试脚本
注意,如果执行.sh文件报错说无该文件或文件夹,需要用dos2unix工具对shell文件转换
2. 修改启动脚本(.sh)
2.1 修改VCAST_LAUNCH.sh文件
2.1.1 修改第2行指向正确的license 服务器信息
2.1.2 修改第5行指向VectorCAST的安装路径
2.1.3 修改第9行指向交叉编译器的安装路径
2.1.4 修改16,17行指向具体交叉编译器名称
2.1.4.1 一般在编译器安装路径的bin目录下
2.1.4.2 如果不确定也可以通过vcshell获取(见Vcshell章节)
2.1.5 修改23行指向交叉编译器默认的so库所在目录的父目录
2.1.5.1 可以编译器安装路径下用find –name lib*.so查找
2.1.5.2 一般为XXX/XXX/lib/.. 或者XXX/XXX/libc/..
2.1.5.3 如不确定可以先写XXX后根据运行错误修改
2.1.5.4 如不确定可以先写XXX后根据运行错误修改
2.1.5.4.1 qemu-aarch64 –L $(QEMU_LIBRARY)
2.1.5.4.2 qemu-arm –L $(QEMU_LIBRARY)
2.1.5.5 QEMU_LIBRARY只能包含一个路径。如果包含多个路径,如果包含多个路径,只有最后一个路径会生效
2.1.6 修改25行QEMU调试脚本路径指向CFG目录中的simulator_qemu_debug.sh存储路径
3. 验证Demo项目
3.1 通过VCAST_LAUNCH.sh打开VCAST
3.1.1 sudo bash ./VCAST_LAUNCH.sh 或者 source VCAST_LAUNCH.sh
3.2 通过对应的编译模板(.CFG)创建工程(只需创建一次)New->VectorCAST Project->From Configuration File
3.2 然后选择VectorCAST安装目录下的demo代码创建环境
3.2.1 $VECTORCAST_DIR/tutorial/c/manager.c
3.2.1 $VECTORCAST_DIR/tutorial/c/manager.cpp
3.3 Demo项目验证成功后再用此模板验证实际项目
三、获取实际项目编译信息
1. 基于CMAKE编译
1.1 有两种方法可以在编译项目的同时,打印出详细的编译信息
1.1.1 在CMakeLists.txt中添加一行:set(CMAKE_VERBOSE_MAKEFILE ON)
1.1.2 在cmake生成make配置文件的命令上加-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
1.1.2.1 cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ..
2. 基于脚本编译 - VCSHELL
2.1 在配置实际编译模板之前,可以用vcshell来获取实际项目的编译信息
2.1.1 在用vcshell 前需要在同一终端里先export VECTORCAST_DIR和VECTOR_LICENSE_FILE
2.2 以make file编译项目举例,其命令为$VECTORCAST_DIR/vcshell --vcbg make XXX
2.1.1 make XXX 可以替换为项目实际的编译命令(.sh等等)
2.1.2 项目的编译信息会记录在当前文件夹下的vcshell.db文件
2.3 项目的编译信息会记录在当前文件夹下的vcshell.db文件
2.3.1 $VECTORCAST_DIR/vcdb dumpcommands > dump.txt
3. 编译命令(Compile Command)
3.1 获取编译器名字
3.1.1 $VECTORCAST_DIR/vcdb dumpverbs
3.2 获取编译文件名字
3.2.1 $VECTORCAST_DIR/vcdb --abspath --cmd-verb=XXX getfiles
3.2.1.1 XXX.c为上一步得到的文件名
4. 链接命令(Link Command)
4.1 获取项目编译的链接信息
4.1.1 $VECTORCAST_DIR/vcdb --abspath --cmd-verb=XXX --app=XXX getlinkcmd
4.1.1.1 --app=XXX中的XXX为项目编译出来的可执行文件名称
4.1.1.2 --cmd-verb=XXX中的XXX为项目的链接命令执行器,一般和编译命令的执行器一样
4.1.1.3 链接命令中一般会包含很多-L和-l信息
四、配置实际项目
1. 初次配置
1.1 通过VCAST_LAUNCH.sh打开VCAST
1.1.1 sudo bash ./VCAST_LAUNCH.sh 或者 source VCAST_LAUNCH.sh
1.2 通过对应的默认编译模板(.CFG)创建工程(只需创建一次)New->VectorCAST Project->From Configuration File
1.3 右击group节点呼唤出构建环境的交互界面
2. 宏及搜索路径的添加
2.1 将vcshell获取的编译命令复制出来,点击构建环境中 的Parse Command Line, 然后点击Parse
2.2 工具会自动解析编译命令中的-I选项
2.2.1 如包含相对路径,需手动选择相对路径的基础目录
2.3 如包含相对路径,需手动选择相对路径的基础目录
2.3.1 -D的宏如果带有转义符\(比如-Dname=\”***\”) 则不能放在Parser Command Line自动解析,需 要参考下一页的方法手动添加到 Preprocessor/Compiler command
2.4 点击OK后
2.4.1 解析出的搜索路径会自动添加到第五步Locate Source Files中
2.4.2 解析出的编译宏会自动添加到第一步的Defined variable中
2.5 若编译命令中有-isystem或-sysroot等,需要将这 些路径手动添加到第五步的目录
3. 编译命令修改
3.1 将vcshell获取的编译命令复制出来
3.2 去除一些不需要的选项, 比如-w/-W/-f 开头的选项
3.2.1 -I,-D开头的选项已通过上页的parse command line功能自动添加
3.3 保留一些关键选项
3.3.1 带有转义符\的-D宏
3.3.2 -isystem
3.3.3 -sysroot
3.3.4 -std
3.4 将保留了关键选项的编译链命令复制到Compile command
3.4.1 注意不要漏了-c
3.5 将保留了关键选项的编译链命令同样复制到Preprocessor command
3.5.1 注意不要加-c
4. 链接命令修改
4.1. 链接命令修改
4.2 去除一些不需要的信息, 比如
4.2.1 Waring有关的选项(-w)
4.2.2 Map有关选项(-map)
4.3 将-sysroot开头的选项命令复制到Linker command
4.4 将-L或者-l链接库有关的选项都复制进Linker options中
5、模板初步测试
5.1 通过Test Settings功能验证刚刚修改的宏,搜索路径,预编译命令及编译命令是否正确
5.2 点击Test Settings,选择工具自带的manager.c/cpp, 分别验证Preprocessor, Compiler, Parser是否成功
5.3 验证manager成功后,再选择实际项目中的某个源文件,分别验证Preprocessor, Compiler, Parser是否成功
6. 错误及问题定位
6.1 模板初步测试,可以排除大部分的预编译(preprocessor)以及解析(parser)错误
6.2 构建环境时的编译错误和链接错误一般会自动弹出错误窗口
6.2.1 也可以在Environment->View里面查看
6.3 重新呼唤出环境构建的交互界面可以通过
6.3.1 Environment->Update Environment(已经生成Environment View)
6.3.2 Environment->Update Environment(已经生成Environment View)
6.4 展开GUI左下角的jobs,双击最后的一个报错行,查看具体错误信息以及命令信息
6.4.1 command中的命令可以手动修改,然后再点击Test Command直接测试
7. 错误定位-编译错误
7.1 环境编译错误一般会自动弹出错误窗口
7.1.1 如果编译错误信息中含有SBF相关字样,可以尝试将环境构建(Environment-Update Environment)第六步中的 SBF模式改为uut
8. 错误定位-链接错误
8.1 链接错误一般会自动弹出错误窗口
8.1.1 链接错误的窗口名是Linker Output Report
8.1.2 Unstubbed Entities Report不是链接错误,里面记录了一些提示信息
8.2 如果Linker Output Report中的错误是关于标准库函数的undefined reference,可以在link options中将标准库链 接进去,比如-lpthread,-lm
8.3 如果Linker Output Report中的错误是关于一般函数的undefined reference, 可以在构建环境第六步的+Stub中添 加那个函数
8.3.1 只需添加函数名
8.3.2 C++的函数需包含namespace和class的前缀
8.3.3 模板函数的<>中可以用*代替
9. 错误定位-执行错误
9.1 编译和链接成功后,工具最后会自动生成一个测试用验证执行命令
9.2 如果出现右图错误代表在qemu模拟器执行测试用例时,发生了执行错误
9.3 具体的错误信息可以双击左下角Jobs中执行qemu的那一个命令行查看
9.4 如果出现下图中.so找不到的错误,可以修改启动脚(LAUNCH_VCAST.bat)中的QEMU_LIBRARY路径
9.5 如果.so存在多个路径中,可以
9.5.1 将多余路径配置在全局变量LD_LIBRARY_PATH中
9.5.1.1 export LD_LIBRARY_PATH=/path/to/libraries:$LD_LIBRARY_PATH
9.5.2 在/etc/ld.so.conf.d目录下,新建一个.conf文件,在文件中加入库所在的目录,然后sudo ldconfig更新ld配置
9.5.3 或者将其他路径下的.so复制或者软链接到QEMU_LIBRARY指向的那个目录中
五、 调试脚本配置
1.调试脚本参数说明
1.1 调试脚本simulator_qemu_debug.sh存放在配置包的CFG目录内
1.2 通过Misc->Environment files,将调试脚本自动拷贝到环境目录下
1.2.1 QEMU_DEBUG_SCRIPT_PATH在工具的启动脚本中配置,指向存放simulator_qemu_debug.sh的存放路径
2.调试脚本参数说明
2.1 需要安装gdb-multiarch和xterm
2.1.1 apt-get install xterm
2.2 apt-get install gdb-multiarch
2.2 第一个参数是目标芯片的架构,arm或者aarch64
2.3 第二个参数是gdb调试端口号
2.4 第三个参数是运行程序所需要的动态库搜索路径
2.5 第四个参数是调试程序
2.5.1 VCAST会自动复制调试程序作为第四个参数,无需在VCAST内配置
2.5.2 如果在终端调用simulator_qemu_debug.sh,则需要手动添加调试程序作为第四个参数