基础知识:
- lookbusy: 用来生成虚假的负载的Linux工具;它的作用:
- 生成固定的、可预测的 CPU 负载(generate fixed, predictable loads on CPUs)
- 保持选定部分的内存活动(keep chosen amounts of memory active)
- 生成你需要的任何大小的磁盘流量(generate disk traffic in any amounts you need)
- 交叉编译:在一个平台上生成另一个平台上的可执行代码,例如本篇在Linux上编译arm平台应用;
- 静态链接:生成的程序包含程序运行所需要的全部库,不依赖系统库,可以直接运行,因此静态链接生成的程序体积较大;
编译环境
- 交叉编译环境gcc参见:Linux上交叉编译环境配置 - 简书 (jianshu.com)
- make安装
apt install make
编译步骤:
./configure --host=arm-linux-gnueabihf LDFLAGS=-static # --host指定gcc版本,LDFLAGS指定静态编译
make
make install
which lookbusy # 查找生成的lookbusy 文件
验证
- 通过scp将生成的lookbusy拷贝到arm开发板;
- 在arm开发板运行以下命令,进行验证;
./lookbusy -c 90 # 加90%的cpu负载
top # 此时cpu在90%左右
问题及解决办法:
- 编译时出现“undefined reference to rpl_malloc” 问题
方案一
打开config.h.in,把如下两句删掉, 重新make即可。
注: 修改config.h.in后,不需要再次configure,因为再次configure可能会重新生成config.h.in,导致下面的这两句又出现在config.h.in里面。
#undef malloc
#undef realloc
方案二
打开configure,发现里面有 #define malloc rpl_malloc 一行。分析 configure 脚本相关的代码,原来是ac_cv_func_malloc_0_nonnull 引起的,OK我们不让它检查了,产生一个cache文件arm- linux.cache,欺骗configure:
[root@linux tslib]# echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
[root@linux tslib]# ./configure --prefix=$(pwd)/install --host=arm-linux --cache-file=arm-linux.cache
参考
- gcc 动态/静态编译: gcc程序编译的静态链接和动态链接 - 简书 (jianshu.com)
- “undefined reference to rpl_malloc” 问题解决:解决 undefined reference to rpl_malloc 的方案_茄子的博客-CSDN博客