valgrind是一款功能强大的开源工具,主要用于内存调试、 内存泄漏检测、性能分析以及线程错误的检测。本文用于记录在x86的 Ubuntu 虚拟机上对RV1126开发板的valgrind进行交叉编译的过程。
下载源码
进入下面网址下载valgrind的源码,这里选择的版本是3.23.0
wget https://sourceware.org/pub/valgrind/valgrind-3.23.0.tar.bz2
解压缩源码
tar -xvf valgrind-3.23.0.tar.bz2
cd valgrind-3.23.0
修改configure文件
为了避免编译的过程报错,需要修改configure文件的源码实现。这里可以搜索关键词“VGCONF_PLATFORM_ARM_ARCH”,找到下面的段落进行修改。
# 修改前
armv7*)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
printf "%s\n" "ok (${host_cpu})" >&6; }
VGCONF_PLATFORM_ARM_ARCH="-marm -mcpu=cortex-a8"
ARCH_MAX="arm"
;;
# 修改为
armv7* | arm)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok (${host_cpu})" >&5
printf "%s\n" "ok (${host_cpu})" >&6; }
VGCONF_PLATFORM_ARM_ARCH="-marm -mcpu=cortex-a8"
ARCH_MAX="arm"
;;
生成配置文件
./configure --host=arm-none-linux-gnueabihf CC=/home/hf/1126/rv1126_rv1109_linux/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --prefix="$PWD/_install"
1
编译并安装到_install目录
make
make install
上传RV1126开发板并测试
文件部署开发板
生成的文件目录结构如下,需要将其中的 bin、include、lib 以及 libexec 四个文件夹拷贝到开发板中。由于需要不小的存储空间,因此这里在开发板的 /userdata/ 目录下新建一个 valgrind 文件夹,用于存放以上四个文件夹。
虚拟机上的编译生成文件结构
- _install
- bin
- include
- lib
- libexec
- share
开发板上部署 valgrind 的文件结构
- userdata
- valgrind
- bin
- lib
- libexec
- valgrind
配置权限
本部分的命令均在开发板的命令终端内进行,需要配置的是新上传的 valgrind 在开发板上的权限。
首先需要配置 valgrind 链接库的环境变量,这里有两种方案,一种是临时性的,只在当前命令终端内有效,另一种是永久性的。
# 临时性配置
export VALGRIND_LIB=/userdata/valgrind/libexec/valgrind
# 永久性配置
vi /etc/preofile.d/RkEnv.sh
export VALGRIND_LIB=/userdata/valgrind/libexec/valgrind 将本条命令添加至 RkEnv.sh 内
随后,配置 valgrind 的执行权限
# 配置 valgrind 的执行权限
cd /userdata/valgrind/bin/
chmod a+x ./valgrind
最后,由于 valgrind 的执行需要诸如 memcheck 或 helgrind 的配合,因此还需要给 memcheck-arm- linux 与 helgrind-arm-linux 相应的执行权限。
chmod +x /userdata/valgrind/libexec/valgrind/memcheck-arm-linux
chmod +x /userdata/valgrind/libexec/valgrind/helgrind-arm-linux
测试效果
# 由于 valgrind 不在系统命令集内,所以在使用时需要指定它所在的路径
/userdata/valgrind/bin/valgrind --version
# 利用 valgrind 的 memcheck 对 /root/ 路径下的 test 可执行文件的内存进行分析,并将分析结果记录在当前 /root/ 路径下的 log.txt 内
/userdata/valgrind/bin/valgrind --tool=memcheck --leak-check=full --track-origins=yes --log-file=/root/log.txt --show-reachable=yes /userdata/app
至此,RV1126 交叉编译 valgrind 工具的过程便结束了,关于 valgrind 的使用,之后单独写一篇文章进行记录总结。