VectorCAST:嵌入式代码自动化测试解决方案(Lnixu RSP包的使用)

 一、前提条件

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芯片都支持。

        1.3.3  如果出于学习目的,可以安装开源的Linaro编译链:
https://publishing-ie-linaro-org.s3.amazonaws.com/releases/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz?Signature=VGR8846jcud5KqTRTqM0JAssLwA%3D&Expires=1686029623&AWSAccessKeyId=AKIAIELXV2RYNAHFUP7Ahttps://publishing-ie-linaro-org.s3.amazonaws.com/releases/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz?Signature=VGR8846jcud5KqTRTqM0JAssLwA%3D&Expires=1686029623&AWSAccessKeyId=AKIAIELXV2RYNAHFUP7A

二、配置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,则需要手动添加调试程序作为第四个参数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈星Gersing

你的鼓舞是我最大的动力,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值