标签:efi 生成 inux unknown 消息 源码 定义 config 生成报表
1、准备工作
linux PC机 开发板
1)给linux PC机安装交叉编译工具mipsel-unknown-linux-gnu,并配置环境变量
2)下载并安装Cunit和lcov,安装方法如下:
2.1) tar -zxvf CUnit-2.1.0-src.tar.gz
cd CUnit-2.1.0
make distclean
CC=/opt/mipsel-unknown-linux-gnu/bin/mipsel-unknown-linux-gnu-gcc
CFLAGS=-I /opt/mipsel-unknown-linux-gnu/include
./configure --host=mipsel-unknown-linux-gnu
make
make install
2.2)tar -zxvf lcov-1.13.tar.gz
cd lcov-1.13
make
make install
2、交叉编译gcov的使用
以tesecase为例,
以exe为例,src目录位于:/data/home/carlos/trunk/src/XX/exe/,使用-fprofile-arcs -ftest-coverage 编译(第一个参数是为了使用两个GCOV的环境变量,下面有说明;第二个参数是加入代码覆盖率开关)。
生成文件目录位于:/data/home/carlos/trunk/src/YY/YY/exe/。
将生成目录内容打包,拷贝到测试机目录:/data/ZZ/ZZ/exe/,
且将预加载库signal.so拷贝到此目录中(为了在不修改源码的情况下进行处理信号,使程序退出时执行gcov_flush)
配置环境变量,使用这两个变量可以方便指定gcda文件的输出位置:
export GCOV_PREFIX_STRIP=8 (编译生成的原始目录共8层)
export GCOV_PREFIX=/data/ZZ/ZZ/exe/
执行命令:
LD_PRELOAD=./signal.so ./exe -- daemon=false&
注:这里不能使用daemon方式启动,因为daemon会fork子进程执行程序,预加载库中的__attribute__ ((constructor))无法生效
测试完后,使用killall -6 exe杀掉进程(必须用可以捕捉的、且在预加载库中进行处理的信号结束进程)
执行gcov –o ./*.gcno 在当前目录生成*.gcda文件
将此目录拷贝回开发机的编译目标目录,即:
/data/home/carlos/trunk/src/YY/YY/exe/因为后续生成报表时,lcov工具必须指向编译目录(依赖不同层次目录中的其他源码),而非安装或运行目录
在/data/home/carlos/trunk/src/ YY/YY/exe/中执行:
lcov –c –d ./ -b../../../ -o exe.info
genhtml –o ./html_result/ --no-branch-coverage exe.info
生成的html_result目录中即可用的代码覆盖率报表,其中的XX/exe/index.html为目标网页
其中signal.so带代码网上有实例,其实就是利用__attribute__ ((constructor)),定义一个消息相应函数即可。
标签:efi 生成 inux unknown 消息 源码 定义 config 生成报表
原文地址:https://www.cnblogs.com/lovestory0519/p/8963540.html