当前位置: 首页 > backend >正文

ARM32静态交叉编译并使用pidstat教程

一、前提准备

  1. 主机环境

    • 操作系统:Ubuntu/Debian 系统
    • 本教程以 sysstat-12.7.7 为例,可按需替换版本号。
  2. 交叉编译工具链

    sudo apt-get update
    sudo apt-get install \gcc-arm-linux-gnueabihf \g++-arm-linux-gnueabihf \binutils-arm-linux-gnueabihf \libc6-dev-armhf-cross
    
  3. (可选)目标根文件系统 Sysroot
    如果有目标板的根文件系统,解压或挂载到 /opt/arm-sysroot,以便正确找到头文件和库。


二、下载源码

  1. 克隆官方仓库并切换到指定版本:
    git clone https://github.com/sysstat/sysstat.git
    cd sysstat
    git checkout 12.7.7
    
  2. 若仓库中没有 configure 脚本,可先运行:
    ./autogen.sh
    

三、配置交叉编译环境

在源码根目录下,导出交叉链工具和静态链接标志:

# 1. 指定交叉编译工具
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export AR=arm-linux-gnueabihf-ar
export AS=arm-linux-gnueabihf-as
export LD=arm-linux-gnueabihf-ld
export RANLIB=arm-linux-gnueabihf-ranlib
export STRIP=arm-linux-gnueabihf-strip# 2. 指定 sysroot、优化与静态链接
export SYSROOT=/opt/arm-sysroot
export CFLAGS="--sysroot=$SYSROOT -O2 -static"
export LDFLAGS="--sysroot=$SYSROOT -static"# 3. 运行 configure(prefix 可自定义)
./configure \--host=arm-linux-gnueabihf \--prefix=/opt/sysstat-arm32

说明

  • --host 指定目标架构,不能用 --enable-static,静态链接由 -static 控制。
  • 若无 sysroot,可去掉相关 --sysroot 参数,但需保证交叉链能找到库和头文件。

四、编译并打包

  1. 编译
    make -j$(nproc)
    
  2. 安装到本地临时根目录
    make DESTDIR=$HOME/sysstat-arm32-root install
    
  3. 打包
    cd $HOME/sysstat-arm32-root/opt/sysstat-arm32
    tar czvf ~/pidstat-arm32-static.tar.gz bin/pidstat lib/ share/
    

五、部署到 ARM32 设备

  1. 拷贝文件
    scp ~/pidstat-arm32-static.tar.gz user@arm-device:/tmp
    ssh user@arm-device
    cd /usr/local
    sudo tar xzvf /tmp/pidstat-arm32-static.tar.gz
    sudo ln -s /usr/local/bin/pidstat /usr/bin/pidstat
    
  2. 检查依赖
    file /usr/local/bin/pidstat
    # 应显示 “statically linked”
    

六、使用示例

登录到 ARM32 设备后,运行:

# 每秒报告一次进程级 I/O 使用,连续 5 次
pidstat -d 1 5# 查看内存与 CPU 使用
pidstat -r -u 2 3

若一切正常,即说明你已成功编译、部署并运行静态链接的 ARM32 版 pidstat

如有其它 sysstat 工具需求(如 iostatmpstat),同样放在 bin/ 目录下,可一并使用。祝编译顺利!

http://www.xdnf.cn/news/2666.html

相关文章:

  • Docker 获取 Python 镜像操作指南
  • 【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断
  • 菱形继承和虚基表
  • go语言八股文(五)
  • 解决Ubuntu20.04重启出现显卡驱动异常的问题(操作记录)
  • k8s基本概念-YAML
  • git 修改用户名和邮箱
  • 【Docker】——在Docker工具上安装创建容器并完成项目部署
  • 线性代数的本质大白话理解
  • 【Linux系统】进程间通信(管道)
  • 8、HTTPD服务--ab压力测试
  • JAVA EE_网络原理_UDP与TCP
  • 二进制、高位低位、位移操作与进制转换全解
  • 国联股份卫多多与北京慧闻科技(集团)签署战略合作协议
  • Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master
  • 完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理
  • Android adb 安装应用失败(安装次数限制)
  • 【现代深度学习技术】循环神经网络07:通过时间反向传播
  • 爬虫学习笔记(二)--web请求过程
  • 从代码学习机器学习 - UMAP降维算法 scikit-learn版
  • 【Linux】基于环形队列的生产消费者模型
  • 机器学习第三篇 模型评估(交叉验证)
  • 腾讯云服务器独立ip服务器优点是什么?服务器需要固定ip吗?
  • WebRtc08:WebRtc信令服务器实现
  • 简单分析自动驾驶发展现状与挑战
  • cURL 入门:10 分钟学会用命令行发 HTTP 请求
  • MySQL慢查询分析工具:EXPLAIN
  • Awesome-Embodied-AI:具身AI机器人领域最全资源汇总(含人形机器人,多足机器人,灵巧手等精选资源)
  • C++11线程间通信同步与Linux中MySQL连接池实现
  • XLSX.utils.sheet_to_json设置了blankrows:true,但无法获取到开头的空白行