本文记录使用命令 OHOS_ARCH=aarch64 OHOS_ABI=arm64-v8a sh ./create-hnp.sh 构建 Htop 3.4.1 的完整过程,包括环境、构建链路、关键日志、常见问题与解决方案、产物验证与重建方法,便于复现与运维。
📖 Htop 简介
Htop 是一个交互式的系统监控工具,用于实时显示系统的进程、CPU、内存使用情况。它是传统 top 命令的增强版本,提供了更友好的用户界面、更丰富的功能和更好的交互体验。
🎯 Htop 的作用与重要性
Htop 是系统监控的核心工具,提供了:
- 实时监控:实时显示系统资源使用情况(CPU、内存、交换空间)
- 进程管理:显示和管理运行中的进程
- 交互式操作:支持鼠标操作和键盘快捷键
- 彩色显示:使用颜色区分不同类型的进程和资源使用情况
- 树状视图:以树状结构显示进程关系
- 搜索和过滤:支持搜索和过滤进程
🔧 Htop 核心特性
1. 实时系统监控
- CPU 使用率:显示每个 CPU 核心的使用率
- 内存使用:显示物理内存和交换空间的使用情况
- 负载平均值:显示系统负载平均值
- 运行时间:显示系统运行时间
- 进程数:显示运行的进程和线程数
2. 进程管理
- 进程列表:显示所有运行的进程
- 进程信息:显示进程的 PID、用户、优先级、CPU、内存使用等
- 进程操作:支持杀死、改变优先级、发送信号等操作
- 进程搜索:支持按名称搜索进程
- 进程过滤:支持按用户、状态等过滤进程
3. 交互式界面
- 鼠标支持:支持鼠标点击和滚动
- 键盘快捷键:丰富的键盘快捷键操作
- 颜色显示:使用颜色区分不同类型的进程
- 可定制:支持自定义显示选项和颜色方案
4. 树状视图
- 进程树:以树状结构显示进程关系
- 父子关系:清晰显示进程的父子关系
- 折叠展开:支持折叠和展开进程树
5. 应用场景
- 系统监控:实时监控系统资源使用情况
- 性能分析:分析系统性能瓶颈
- 进程管理:管理和调试运行中的进程
- 故障排查:排查系统性能问题
- 资源优化:优化系统资源使用
🚀 构建入口与环境
- 📝 执行命令:
OHOS_ARCH=aarch64 OHOS_ABI=arm64-v8a sh ./create-hnp.sh - 🔧 入口脚本:
create-hnp.sh- 检查必需的环境变量
OHOS_ARCH和OHOS_ABI - 导出
LC_CTYPE、TOOL_HOME、OHOS_SDK_HOME - 执行
make -C build-hnp
- 检查必需的环境变量
- 📦 顶层构建:
build-hnp/MakefilePKGS变量定义需要构建的包列表(包含htop)- 通过
check-pkgs机制自动检测PKGS变化并触发重新构建 - 自动合并
external-hnp目录下的外部 HNP 包 base.hnp依赖所有包的.stamp和外部 HNP 包- 总目标
all: copy,打包base.hnp并拷贝到entry/hnp/$(OHOS_ABI)
⚙️ Htop 包的构建配置
- 📁 包目录:
build-hnp/htop/Makefile- 继承通用规则:
include ../utils/Makefrag - 源地址:
https://github.com/htop-dev/htop/releases/download/3.4.1/htop-3.4.1.tar.xz - 版本:
3.4.1
- 继承通用规则:
- 🔧 补丁处理:
0001-skip-proc-stat.diff:跳过在 OHOS 环境下不一致的/proc/stat读取路径或处理逻辑,保证运行时行为稳定- 位置:
build-hnp/htop/Makefile:6
- ⚙️ Autotools 配置参数:
--prefix=$(PREFIX)- 安装前缀--host $(OHOS_ARCH)-unknown-linux-musl- 目标平台--enable-affinity- 启用 CPU 亲和性支持CPPFLAGS="-I../sysroot/include -D_FORTIFY_SOURCE=2"- 编译预处理标志
- 🔨 构建流程:
- 前置依赖
ncursesw - 下载源码包(从 GitHub releases)
- 解包并进入
temp/htop-3.4.1目录 - 应用补丁
0001-skip-proc-stat.diff - 运行
./configure配置构建系统 - 使用
make -j $(nproc)并行编译 - 使用
make install安装 - 执行 ELF strip 减小体积
- 复制到
../sysroot
- 前置依赖
- 🔧 通用工具链与路径:
build-hnp/utils/MakefragCC/CXX/LD/AR/RANLIB/...均指向 OHOS SDK 的 LLVM 工具链- 下载支持多镜像回退:
wget→curl,主镜像失败时自动尝试备用镜像
- 📦 依赖关系:
- 前置依赖:
ncursesw(提供终端处理支持,已在sysroot中提供) - 建议构建顺序:
ncurses → htop
- 前置依赖:
📋 关键日志与过程节点
- 📥 下载与解包:
- 从 GitHub releases 下载
htop-3.4.1.tar.xz - 完成解包并进入
temp/htop-3.4.1目录 - 下载规则支持多镜像回退:
wget→curl兜底
- 从 GitHub releases 下载
- 🔧 补丁应用:
- 应用补丁
0001-skip-proc-stat.diff修正/proc/stat读取问题
- 应用补丁
- ⚙️ 配置阶段:
- 运行
./configure --prefix=... --host=aarch64-unknown-linux-musl --enable-affinity ... - 工具链与链接器探测成功(
clang/ld.lld) - 检测到
ncursesw依赖 - CPU 亲和性支持检测通过
- 配置成功,生成
Makefile和构建配置
- 运行
- 🔨 编译与安装:
- 使用
make -j $(nproc)并行编译 - 成功编译生成
htop二进制 - 使用
make install安装到临时前缀 - 执行
llvm-strip剥离二进制符号 - 复制到
../sysroot
- 使用
- 📦 打包:
- 完成
base.hnp重打包,拷贝产物到entry/hnp/arm64-v8a/ - Htop 二进制和相关资源已成功打包到
base.hnp中
- 完成
✅ 产物验证
📦 检查打包文件
ls build-hnp/base.hnp # 应存在
ls entry/hnp/arm64-v8a/*.hnp # 应包含 base.hnp 与 base-public.hnp
🔍 检查二进制和资源文件
# 检查 htop 二进制
ls -lh build-hnp/sysroot/bin/htop
file build-hnp/sysroot/bin/htop
# 检查图标和桌面文件
ls -lh build-hnp/sysroot/share/icons/hicolor/scalable/apps/htop.svg
ls -lh build-hnp/sysroot/share/applications/htop.desktop

✅ 构建验证结果:
- ✅ Htop 二进制已安装:
bin/htop(289K) - 主程序
- ✅ 文件类型:ELF 64-bit LSB pie executable, ARM aarch64
- ✅ 动态链接:interpreter
/lib/ld-musl-aarch64.so.1 - ✅ 已剥离符号:
stripped - ✅ 资源文件已安装:
share/icons/hicolor/scalable/apps/htop.svg(11K) - SVG 图标share/applications/htop.desktop(2.5K) - 桌面文件
- ✅ 已打包到
base.hnp中
💻 终端中执行的示例命令
📊 Htop 基本使用
1. 启动 Htop
# 基本启动
htop
# 指定延迟时间(秒)
htop -d 5
# 指定用户
htop -u username
# 只显示指定用户的进程
htop -u root
# 显示帮助信息
htop -h
# 显示版本信息
htop -V

2. Htop 界面操作
# 启动 htop 后,可以使用以下快捷键:
# F1 或 h - 显示帮助
# F2 或 S - 设置
# F3 或 / - 搜索进程
# F4 或 \ - 过滤进程
# F5 或 t - 树状视图
# F6 或 < - 选择排序方式
# F7 或 ] - 降低进程优先级
# F8 或 [ - 提高进程优先级
# F9 或 k - 杀死进程
# F10 或 q - 退出
# 示例:启动 htop 并查看帮助
htop
# 然后按 F1 或 h 查看帮助

3. 进程搜索和过滤
# 启动 htop 后:
# 按 F3 或 / 搜索进程
# 输入进程名称,如 "bash"
# 按 F4 或 \ 过滤进程
# 输入过滤条件,如 "user=root"
# 按 Esc 取消搜索或过滤

4. 进程管理
# 启动 htop 后:
# 选择进程,按 F9 或 k 杀死进程
# 选择信号(如 SIGTERM、SIGKILL)
# 按 F7 或 ] 降低进程优先级(nice 值增加)
# 按 F8 或 [ 提高进程优先级(nice 值减少)
# 按 t 切换树状视图

5. 显示选项
# 启动 htop 后:
# 按 F2 或 S 进入设置菜单
# 可以配置:
# - 显示选项(CPU、内存、交换空间等)
# - 颜色方案
# - 列显示顺序
# - 更新延迟
# 按 F5 或 t 切换树状视图
# 按 H 显示/隐藏线程
# 按 K 显示/隐藏内核线程

6. 排序选项
# 启动 htop 后:
# 按 F6 或 < 选择排序方式
# 可以按以下方式排序:
# - PID(进程 ID)
# - PERCENT_CPU(CPU 使用率)
# - PERCENT_MEM(内存使用率)
# - TIME(运行时间)
# - COMMAND(命令名称)
# 使用方向键选择排序方式,按 Enter 确认
7. 实际应用示例
# 监控系统资源使用情况
htop
# 监控特定用户的进程
htop -u root
# 以较慢的更新速度运行(每 5 秒更新一次)
htop -d 5
# 在后台运行并保存输出
htop > htop_output.txt 2>&1 &
# 使用管道过滤输出
htop | grep "bash"
# 结合其他命令使用
ps aux | grep htop
killall htop
# 检查 htop 是否在运行
pgrep htop
# 查看 htop 进程信息
ps -p $(pgrep htop) -o pid,user,cmd
# 使用 strace 跟踪 htop 的系统调用
strace -o htop_trace.txt htop
# 使用 perf 分析 htop 性能
perf record -g htop
perf report
# 在 screen 或 tmux 中运行 htop
screen -S monitor htop
# 或
tmux new-session -d -s monitor 'htop'
# 定期运行 htop 并保存快照
while true; do
htop -n 1 > "htop_$(date +%Y%m%d_%H%M%S).txt"
sleep 60
done
# 使用 htop 监控特定进程
htop -p $(pgrep -d, -f "pattern")
# 在远程服务器上运行 htop(通过 SSH)
ssh user@hostname "htop"
# 使用 htop 监控 Docker 容器
docker exec -it container_name htop
# 在脚本中使用 htop 输出
htop -n 1 | grep "Load average"
# 使用 htop 监控系统启动过程
systemd-analyze plot > boot.svg
htop -d 1
# 监控网络进程
htop -F "network"
# 监控 CPU 密集型进程
htop -s PERCENT_CPU
# 监控内存密集型进程
htop -s PERCENT_MEM
8. 配置 Htop
# Htop 配置文件位置
# ~/.config/htop/htoprc
# 创建配置目录
mkdir -p ~/.config/htop
# 编辑配置文件
vi ~/.config/htop/htoprc
# 配置示例:
# # 显示选项
# hide_kernel_threads=0
# hide_userland_threads=0
# shadow_other_users=0
# show_thread_names=0
# show_program_path=1
# highlight_base_name=0
# highlight_megabytes=1
# highlight_threads=1
# tree_view=0
# header_margin=1
#
# # 颜色方案
# color_scheme=0
#
# # 列显示
# fields=0 48 17 18 38 39 40 2 46 47 49 1
#
# # 排序
# sort_key=46
# sort_direction=1
#
# # 更新延迟
# delay=15
#
# # 其他选项
# left_meters=AllCPUs Memory Swap
# left_meter_modes=1 1 1
# right_meters=Tasks LoadAverage Uptime
# right_meter_modes=2 2 2
9. Htop 与其他工具结合
# 使用 htop 和 top 对比
top
htop
# 使用 htop 和 ps 结合
ps aux | head -1
htop
# 使用 htop 和 iotop 监控 I/O
htop
iotop
# 使用 htop 和 nethogs 监控网络
htop
nethogs
# 使用 htop 和 glances 对比
htop
glances
# 使用 htop 和 btop 对比(如果可用)
htop
btop
# 使用 htop 监控系统资源,同时使用其他工具
htop &
watch -n 1 'free -h'
watch -n 1 'df -h'
# 使用 htop 监控进程,同时使用 strace 跟踪
htop &
strace -p $(pgrep -f "process_name")
# 使用 htop 监控进程,同时使用 gdb 调试
htop &
gdb -p $(pgrep -f "process_name")
10. 故障排查示例
# 检查系统负载
htop
# 查看 Load average 行
# 查找 CPU 使用率高的进程
htop
# 按 F6 选择按 CPU 排序
# 查找内存使用率高的进程
htop
# 按 F6 选择按内存排序
# 查找僵尸进程
htop
# 查找状态为 Z 的进程
# 监控特定进程
htop -p $(pgrep -d, -f "process_name")
# 检查进程树
htop
# 按 F5 或 t 切换到树状视图
# 监控系统资源趋势
htop -d 1
# 观察资源使用变化
# 检查进程优先级
htop
# 查看 PRI 和 NI 列
# 监控线程
htop
# 按 H 显示线程
# 检查进程打开的文件
htop
# 选择进程,查看详细信息
lsof -p $(pgrep -f "process_name")
🧪 功能验证脚本
#!/bin/bash
# Htop 工具验证脚本
HTOP_BIN="build-hnp/sysroot/bin"
echo "=== Htop 工具验证 ==="
# 检查二进制文件
echo ""
echo "=== 二进制文件验证 ==="
if [ -f "$HTOP_BIN/htop" ]; then
echo "✓ htop: 存在"
file "$HTOP_BIN/htop"
echo " 文件大小: $(ls -lh "$HTOP_BIN/htop" | awk '{print $5}')"
echo " 架构信息: $(file "$HTOP_BIN/htop" | grep -o "ARM aarch64")"
echo " 文件类型: $(file "$HTOP_BIN/htop" | grep -o "ELF.*executable")"
else
echo "✗ htop: 缺失"
fi
# 检查资源文件
echo ""
echo "=== 资源文件验证 ==="
if [ -f "build-hnp/sysroot/share/icons/hicolor/scalable/apps/htop.svg" ]; then
echo "✓ htop.svg: 存在"
echo " 文件大小: $(ls -lh build-hnp/sysroot/share/icons/hicolor/scalable/apps/htop.svg | awk '{print $5}')"
else
echo "✗ htop.svg: 缺失"
fi
if [ -f "build-hnp/sysroot/share/applications/htop.desktop" ]; then
echo "✓ htop.desktop: 存在"
echo " 文件大小: $(ls -lh build-hnp/sysroot/share/applications/htop.desktop | awk '{print $5}')"
cat build-hnp/sysroot/share/applications/htop.desktop
else
echo "✗ htop.desktop: 缺失"
fi
# 测试基本功能(在目标设备上)
echo ""
echo "=== 功能测试(需要在目标设备上运行)==="
echo "测试 htop 版本:"
echo " $HTOP_BIN/htop -V"
echo ""
echo "测试 htop 帮助:"
echo " $HTOP_BIN/htop -h"
echo ""
echo "测试 htop 启动:"
echo " $HTOP_BIN/htop"
echo ""
echo "测试 htop 延迟:"
echo " $HTOP_BIN/htop -d 5"
echo ""
echo "测试 htop 用户过滤:"
echo " $HTOP_BIN/htop -u root"
🐛 常见问题与处理
❌ 问题 1:/proc 兼容问题
- 🔍 症状:运行时统计信息异常或无法读取
- 🔎 原因:OHOS 环境下
/proc/stat读取路径或处理逻辑不一致 - ✅ 解决方法:
- 应用补丁
0001-skip-proc-stat.diff修正相关问题 - 检查目标设备的
/proc接口可用性 - 位置:
build-hnp/htop/Makefile:6
- 应用补丁
❌ 问题 2:终端显示与键位异常
- 🔍 症状:显示异常或键盘快捷键不工作
- 🔎 原因:
htop依赖终端能力(ncurses/tinfo),终端类型不支持 - ✅ 解决方法:
- 检查设备
TERM环境变量是否正确设置 - 使用支持 ncurses 的终端(如 xterm、screen、tmux)
- 确保
ncursesw已正确安装 - 位置:运行时
- 检查设备
❌ 问题 3:ncursesw 依赖缺失
- 🔍 症状:配置失败,无法找到 ncursesw
- 🔎 原因:
ncursesw未在 htop 之前构建,或库路径未正确设置 - ✅ 解决方法:
- 确保
ncurses在htop之前构建 - 检查
sysroot/lib中是否存在libncursesw.so - 确保编译时添加了
-L../sysroot/lib链接路径 - 位置:
build-hnp/htop/Makefile:8
- 确保
❌ 问题 4:GitHub 下载失败
- 🔍 症状:无法从 GitHub releases 下载源码包
- 🔎 原因:网络问题或 GitHub 访问受限
- ✅ 解决方法:
- 手动下载源码包放置到
build-hnp/htop/download/htop-3.4.1.tar.xz - 使用代理或镜像站点下载
- 通用下载规则支持
curl兜底 - 位置:
build-hnp/htop/Makefile:3
- 手动下载源码包放置到
❌ 问题 5:CPU 亲和性支持问题
- 🔍 症状:CPU 亲和性功能不可用
- 🔎 原因:目标平台不支持 CPU 亲和性或配置未启用
- ✅ 解决方法:
- 确保配置时启用了
--enable-affinity - 检查目标平台是否支持 CPU 亲和性
- 位置:
build-hnp/htop/Makefile:8
- 确保配置时启用了
❌ 问题 6:进程信息显示不完整
- 🔍 症状:某些进程信息无法显示
- 🔎 原因:权限不足或
/proc文件系统不可用 - ✅ 解决方法:
- 确保有足够的权限访问
/proc文件系统 - 检查
/proc文件系统是否已挂载 - 使用
sudo运行 htop(如果需要) - 位置:运行时
- 确保有足够的权限访问
❌ 问题 7:颜色显示异常
- 🔍 症状:颜色显示不正确或无法显示颜色
- 🔎 原因:终端不支持颜色或颜色配置不正确
- ✅ 解决方法:
- 检查终端是否支持颜色(
$TERM环境变量) - 在 htop 设置中调整颜色方案(按 F2)
- 使用支持颜色的终端
- 位置:运行时
- 检查终端是否支持颜色(
❌ 问题 8:架构不支持
- 🔍 症状:
Unsupported OHOS_ARCH= - 🔎 原因:传入的架构不在支持列表中
- ✅ 解决方法:
- 确保传入支持架构(
aarch64或x86_64) - 位置:
build-hnp/Makefile:1-49
- 确保传入支持架构(
🔄 重建与扩展
-
🔧 重建单包:
make -C build-hnp rebuild-htop # 触发子包重新编译并刷新 .stamp -
🧹 清理:
make -C build-hnp clean # 清理 sysroot、所有 .stamp 和 PKGS_MARKER -
📦 扩展:Htop 是系统监控的核心工具,被广泛用于实时监控系统资源和管理进程
-
🔄 自动重建机制:
- 修改
PKGS后,check-pkgs会自动检测变化并触发重新构建 - 新增外部 HNP 包到
external-hnp目录后,会自动合并到base.hnp
- 修改
💡 实践建议
- 🔧 构建配置:根据目标环境调整补丁以适配
/proc接口 - 🚀 依赖管理:确保
ncurses在 htop 之前构建 - 📦 系统监控:Htop 为系统监控提供了强大的交互式界面
- 🔗 终端支持:确保终端类型支持 ncurses 和颜色显示
- 🌐 性能分析:使用 Htop 进行系统性能分析和故障排查
📝 结论与建议
- ✅ 本次已在 aarch64 环境下完成 Htop 3.4.1 的交叉编译与打包,二进制和相关资源已安装到
sysroot并纳入 HNP 包。 - 💡 为保证构建稳定:
- 确保
ncurses在 htop 之前构建 - 使用补丁修正目标环境相关问题
- 确保通过
create-hnp.sh触发构建以获得完整环境变量 - 利用
check-pkgs机制自动检测包列表变化,无需手动清理 - Htop 为系统监控提供了强大的交互式界面和丰富的功能
- 常见陷阱包括 /proc 兼容问题、终端显示异常、ncursesw 依赖缺失;当前已通过构建配置和补丁处理
- 建议使用支持 ncurses 的终端,并根据需要调整显示选项和颜色方案
- 已完成 aarch64 目标下 Htop 的交叉编译与打包,工具与资源进入
sysroot并纳入 HNP 包
- 确保
📚 以上为 Htop 构建的深度解读与实践记录。
鸿蒙系统下Htop移植与构建
100

被折叠的 条评论
为什么被折叠?



