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

从114G输出文件反推:OpenHarmony编译后,out目录里到底装了啥?如何优化存储空间?

从114G输出文件反推OpenHarmony编译后out目录里到底装了啥如何优化存储空间当你第一次完成OpenHarmony的完整编译看到out目录膨胀到51G甚至更大时难免会感到震惊。更令人头疼的是随着开发迭代和多次编译这个数字可能轻松突破100G。对于使用SSD的开发机来说这简直是存储空间的噩梦。但别急着删除整个目录——理解out的结构和内容能帮你精准释放空间而不影响后续开发效率。1. 解剖OpenHarmony的编译产出物编译后的out目录就像一座精心规划的工业园每个区域都有特定职能。以常见的rk3568目标为例我们打开这个黑箱out/rk3568/ ├── args.gn # 本次编译的GN构建参数快照 ├── build.ninja # 实际执行的构建指令集 ├── build_configs/ # 各模块的构建配置存档 ├── gen/ # 自动生成的代码和资源 ├── lib.unstripped/ # 带调试符号的库文件占空间大户 ├── obj/ # 中间编译对象空间消耗主力 │ ├── third_party/ # 第三方库的编译中间文件 │ └── ... # 各模块的.o/.d文件 ├── packages/ # 可发布的软件包 ├── subsystem_info.json # 子系统依赖关系图 └── images/ # 最终刷机镜像核心产出 ├── system.img # 系统分区镜像 ├── vendor.img # 厂商定制镜像 └── ... # 其他分区镜像1.1 空间占用TOP3分析通过du -sh * | sort -h命令实测发现目录/文件类型占比是否可清理obj/58%可部分清理lib.unstripped/22%调试时可保留gen/12%需保留images/5%必须保留其他3%视情况而定提示obj/下的.o文件在增量编译时会复用但完全清理后首次编译将更耗时2. 精准清理保留核心产物的空间优化术2.1 安全清理清单这些文件可以放心删除# 清理过时的中间文件 find out/rk3568/obj -name *.o -mtime 7 -exec rm -f {} \; # 删除旧版本的调试符号库 rm -rf out/rk3568/lib.unstripped/*.old # 清除临时构建日志 find out -name *.log -delete但遇到这些文件请三思images/下的所有镜像文件刷机必需args.gn和build.ninja增量编译依赖gen/目录下的自动生成代码2.2 使用编译缓存智能节省在编译命令中加入--ccache参数# 首次编译生成缓存 ./build.sh --product-name rk3568 --ccache # 后续编译命中缓存 ./build.sh --product-name rk3568 --ccache --no-prebuilt-sdk实测效果对比编译类型耗时空间占用obj目录增量全新编译7.5h114G63G带ccache4.2h98G47G增量编译28min6G1.2G注意ccache默认占用5G空间可通过export CCACHE_SIZE10G调整3. 高级空间管理策略3.1 符号链接妙用将大目录挂载到机械硬盘# 1. 创建外部存储目录 mkdir /mnt/hdd/oh_out # 2. 迁移现有out目录 mv out/rk3568/obj /mnt/hdd/oh_out/ # 3. 创建符号链接 ln -s /mnt/hdd/oh_out/obj out/rk3568/obj3.2 模块化编译技巧只编译特定子系统# 单独编译ACE子系统 ./build.sh --product-name rk3568 --build-target ace_engine # 编译后立即清理该模块中间文件 find out/rk3568/obj/ace_engine -name *.o -delete3.3 自动化清理脚本创建oh_clean.sh#!/bin/bash # 保留最近3次编译的中间文件 KEEP_COUNT3 # 清理旧版obj备份 ls -dt out/rk3568/obj.* | tail -n $((KEEP_COUNT1)) | xargs rm -rf # 压缩一周前的日志 find out -name *.log -mtime 7 -exec gzip {} \;4. 编译环境调优实战4.1 并行编译参数优化调整build/gn/toolchain/BUILD.gn中的关键参数# 优化线程利用率 if (is_linux) { cpu_count host_cpu arm ? 4 : 16 ldflags [ -Wl,--threads${cpu_count} ] } # 控制调试信息级别 if (is_debug) { cflags [ -g1 ] # 比默认-g3节省30%空间 }4.2 文件系统优化针对EXT4文件系统的优化配置# 调整日志模式减少IO tune2fs -o journal_data_writeback /dev/nvme0n1p2 # 禁用访问时间记录 mount -o remount,noatime /4.3 内存磁盘加速利用tmpfs加速频繁访问的目录# 创建1G内存磁盘 sudo mount -t tmpfs -o size1G tmpfs out/rk3568/.tmp # 在GN配置中重定向临时文件 export TMPDIRout/rk3568/.tmp经过这些优化我的开发环境从频繁报磁盘空间不足到现在可以保持3个不同版本的编译产出同时存在。最实用的发现是定期执行find out -type f -size 100M找出异常大文件往往能意外发现可以清理的测试日志或冗余备份。

相关文章:

从114G输出文件反推:OpenHarmony编译后,out目录里到底装了啥?如何优化存储空间?

从114G输出文件反推:OpenHarmony编译后,out目录里到底装了啥?如何优化存储空间? 当你第一次完成OpenHarmony的完整编译,看到out目录膨胀到51G甚至更大时,难免会感到震惊。更令人头疼的是,随着开…...

《QGIS快速入门与应用基础》253:元素锁定(防止误操作)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...

保姆级教程:手把手教你下载SEED-VIG脑电数据集(附Gitee国内镜像地址)

从零到一:SEED-VIG脑电数据集的完整获取与解析指南 第一次接触SEED-VIG数据集时,我花了整整三天时间才搞明白如何正确下载和解析这个2.9GB的庞然大物。作为研究驾驶疲劳检测的重要资源,这个数据集的价值毋庸置疑,但获取过程却让不…...

Wan2.2-I2V-A14B开源模型:支持LoRA微调的私有化训练环境准备

Wan2.2-I2V-A14B开源模型:支持LoRA微调的私有化训练环境准备 1. 镜像概述与核心特性 Wan2.2-I2V-A14B是一款强大的文生视频开源模型,本镜像为其提供了完整的私有化部署解决方案。基于RTX 4090D 24GB显存显卡深度优化,内置所有必要组件&…...

深度解析DeepMIMO:毫米波大规模MIMO信道建模的5个架构设计决策

深度解析DeepMIMO:毫米波大规模MIMO信道建模的5个架构设计决策 【免费下载链接】DeepMIMO-matlab DeepMIMO dataset and codes for mmWave and massive MIMO applications 项目地址: https://gitcode.com/gh_mirrors/de/DeepMIMO-matlab 在5G/6G通信系统演进…...

ERNIE-4.5-0.3B-PT Chainlit前端AI工作流:支持多步骤任务分解与自动执行

ERNIE-4.5-0.3B-PT Chainlit前端AI工作流:支持多步骤任务分解与自动执行 想象一下,你有一个智能助手,不仅能回答简单问题,还能理解复杂的多步骤任务,比如“帮我分析这个季度的销售数据,找出增长最快的产品…...

别再只盯着Logits了!聊聊知识蒸馏里‘注意力图’那点事儿(从AT论文到理解误区)

注意力蒸馏:超越Logits的知识迁移新范式 在深度学习模型压缩领域,知识蒸馏早已不是新鲜话题。大多数实践者会条件反射地想到教师网络输出的logits或中间层特征——这些确实是最直观的知识载体。但当我们把目光投向人类的学习过程时,会发现一个…...

5分钟掌握YetAnotherKeyDisplayer:专业按键可视化工具终极指南

5分钟掌握YetAnotherKeyDisplayer:专业按键可视化工具终极指南 【免费下载链接】YetAnotherKeyDisplayer The application for displaying pressed keys of the keyboard 项目地址: https://gitcode.com/gh_mirrors/ye/YetAnotherKeyDisplayer YetAnotherKey…...

C/C++调试神器:5分钟搞定backtrace打印调用栈(附完整代码)

C/C调试实战:5分钟集成智能调用栈追踪工具 当你的C/C程序在深夜突然崩溃,控制台只留下一行"Segmentation fault"时,那种绝望感每个开发者都体会过。传统的调试方式往往需要反复加日志、断点跟踪,效率低下。本文将带你用…...

GitLab Runner配置总出错?手把手教你调试config.toml文件

GitLab Runner配置总出错?手把手教你调试config.toml文件 当你第一次打开GitLab Runner的config.toml文件时,可能会被里面密密麻麻的参数搞得一头雾水。这个看似简单的配置文件,实际上藏着许多让中高级用户都容易踩坑的细节。今天我们就来彻底…...

KubeSphere vs Kuboard:Kubernetes管理工具选型与实战对比

KubeSphere vs Kuboard:深度对比与选型指南 1. 开篇:为什么需要Kubernetes管理工具? 在云原生技术蓬勃发展的今天,Kubernetes已成为容器编排领域的事实标准。然而,原生Kubernetes Dashboard的功能相对基础,…...

Phi-4-mini-reasoning轻量模型安全:对抗提示注入攻击的防护策略

Phi-4-mini-reasoning轻量模型安全:对抗提示注入攻击的防护策略 1. 模型简介与安全挑战 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族成员,它支持128K令牌的超长…...

【多智能体框架实战】JoyAgent-JDGenie:从零构建定制化AI工作流

1. JoyAgent-JDGenie框架初探:你的AI工作流搭建利器 第一次接触JoyAgent-JDGenie时,我正为一个电商客户发愁——他们需要一套能自动处理退换货咨询的AI系统。传统方案要么开发周期太长,要么灵活性不足。直到发现这个开源框架,只用…...

保姆级教程:用Kalibr搞定Realsense D455相机+IMU联合标定(含常见报错解决)

深度视觉传感器多模态标定实战指南:从Realsense D455到SLAM算法优化 在机器人感知与自主导航领域,视觉-惯性系统的精确标定是构建可靠SLAM/VIO算法的基石。本文将以Intel Realsense D455这款集成RGB-D相机与IMU的旗舰设备为例,系统讲解从单目…...

RobotFramework自定义关键字开发指南:用Python扩展你的测试库

RobotFramework自定义关键字开发实战:Python扩展与分层设计 1. 为什么需要自定义关键字? 在自动化测试领域,RobotFramework以其关键字驱动的特性广受欢迎。但当你深入使用后会发现,标准库和第三方库提供的关键字往往无法完全满足…...

PyTorch升级1.10.1后GPU失效?3分钟搞定CUDA环境回滚(以Colab对比为例)

PyTorch 1.10.1 GPU失效排查与CUDA环境精准回滚指南 当你满心欢喜地升级到PyTorch最新版本1.10.1,准备继续你的深度学习项目时,突然发现GPU无法正常工作——这种"昨天还能用,今天突然报错"的场景让许多开发者抓狂。本文将带你深入分…...

高速公路能耗管理系统方案

对高速公路运营商来说,面对隧道、收费站、服务区等各类站点,仅仅了解电力公司的缴费数据是不够的。由于缺乏用能过程的明细数据,无法进行有效的能耗分析和成本分析,导致节能策略无从实施,影响到企业的经营效益。现场已…...

2025平航杯电子取证实战:从木马溯源到服务器渗透的完整链条分析

1. 木马溯源:从可疑流量到攻击者定位 2025年4月,杭州滨江警方接到一起特殊报案。市民刘晓倩(化名倩倩)发现自己的手机出现异常发热、电量消耗过快等现象,怀疑设备被人监控。这个看似普通的个人隐私案件,最终…...

从仿真到实战:如何将你的MATLAB机械臂轨迹规划代码(3-5-3插值)部署到ROS或Simulink?

从仿真到实战:MATLAB机械臂轨迹规划代码的ROS与Simulink部署指南 当你完成了MATLAB中机械臂轨迹规划的算法开发,看着屏幕上平滑的位置、速度和加速度曲线,接下来面临的核心问题是如何将这些数据转化为真实机械臂的动作。本文将深入探讨两种主…...

光伏电站电流传感器选型与应用全解析

摘要:本文深入探讨光伏电站中电流传感器的选型要点与应用技术。阐述了电流传感器在光伏系统中的重要性,分析其不同技术原理及特点,并结合光伏电站实际工况,从量程、精度、隔离耐压等方面详细介绍选型方法,同时分享了电…...

CORS跨域问题终极指南:从XMLHttpRequest到Nginx代理的完整解决方案

CORS跨域问题终极指南:从XMLHttpRequest到Nginx代理的完整解决方案 第一次在控制台看到那个鲜红的CORS错误时,我正为一个紧急项目赶工。凌晨三点的咖啡已经凉了,而浏览器的报错信息像一堵墙横在我和 deadline 之间。相信每个全栈开发者都经历…...

别再为OpenGL窗口发愁了!用Clion+Freeglut 3.4.0快速搭建你的第一个3D立方体(Windows 11环境)

用ClionFreeglut快速搭建3D立方体的完整指南 为什么选择Freeglut而不是GLFW? 对于刚接触OpenGL的开发者来说,第一个拦路虎往往不是图形学原理本身,而是如何快速搭建一个可运行的开发环境。市面上有GLFW、SDL、GLUT等多种窗口管理库&#xf…...

m4s-converter:让B站缓存重获新生的轻量级格式转换工具

m4s-converter:让B站缓存重获新生的轻量级格式转换工具 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你辛苦缓存的B站视频因下架…...

Phi-4-mini-reasoning助力Web前端开发:智能UI组件设计与代码生成

Phi-4-mini-reasoning助力Web前端开发:智能UI组件设计与代码生成 1. 引言:当AI遇见前端开发 想象一下这样的场景:产品经理拿着一份复杂的需求文档找到你,描述了一个需要实时数据更新、多状态切换、动态交互的仪表盘界面。传统开…...

RK3588与RK3399 USB DTS配置对比:升级平台时如何快速迁移和避坑

RK3588与RK3399 USB DTS配置深度对比:迁移实战指南 从RK3399升级到RK3588平台的开发者,往往会在USB功能配置上遇到意料之外的挑战。两代芯片虽然同属Rockchip产品线,但在USB架构设计、DTS节点定义和电源管理策略上存在显著差异。本文将带您深…...

intv_ai_mk11实际作品:10组真实业务提示词生成结果(含政务/教育/金融)

intv_ai_mk11实际作品:10组真实业务提示词生成结果(含政务/教育/金融) 1. 模型能力概览 intv_ai_mk11是基于Llama架构的中等规模文本生成模型,特别适合处理通用问答、文本改写、解释说明等任务。通过本地部署的Web界面&#xff…...

如何快速上手Jable视频下载工具:新手必备的完整指南

如何快速上手Jable视频下载工具:新手必备的完整指南 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download 还在为无法保存Jable上的精彩视频而烦恼吗?今天我要为你介绍一款简单实…...

Ostrakon-VL扫描终端真实案例:烘焙坊用AI识别原料保质期与库存预警

Ostrakon-VL扫描终端真实案例:烘焙坊用AI识别原料保质期与库存预警 1. 项目背景与痛点 在烘焙行业,原料管理一直是个令人头疼的问题。传统的手工记录方式存在以下典型问题: 保质期难追踪:面粉、奶油等原料包装上的日期标识五花…...

【BUUCTF】MISC 弱口令实战:从安装Python库到LSB隐写破解全流程

1. 弱口令与LSB隐写技术入门 第一次接触CTF比赛时,我被各种隐写术搞得晕头转向。特别是遇到需要破解弱口令和LSB隐写的题目时,简直就像在黑暗中摸索。后来经过多次实战,终于总结出一套行之有效的方法。今天我就来分享从安装Python库到最终破解…...

seo市场推广如何应对行业竞争压力_seo市场推广有哪些常见的工作挑战

SEO市场推广如何应对行业竞争压力 在当今数字化经济的浪潮中,SEO市场推广已经成为企业提升在线存在感和获取客户的关键手段。随着越来越多企业进入SEO领域,竞争压力也日益增大。如何有效地应对这种行业竞争压力,成为每一个SEO从业者面临的重…...