You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04下编译AOSP遇Input/output error问题求解决

解决Ubuntu 18.04编译AOSP时的ld I/O错误

这种Input/output error在AOSP编译场景里,大多和磁盘性能、文件系统损坏、权限冲突或者编译中间文件异常有关。你已经试过换虚拟机和调整ccache,那咱们从其他核心方向入手排查:

1. 先排查磁盘基础问题

  • 检查剩余空间:AOSP编译过程会生成大量临时文件,至少需要100G以上剩余空间,建议留150G+。执行命令查看:
    df -h
    
  • 检查文件系统完整性:磁盘文件系统出错会导致读写失败,先卸载目标分区(或者进入单用户模式),执行文件系统修复:
    sudo fsck -f /dev/你的磁盘分区名
    
  • 排查磁盘IO性能:如果用的是机械硬盘,编译时高IO负载很容易触发这类错误,优先换成SSD;虚拟机的话,确保磁盘设置为“高性能”模式(比如关闭快照、启用磁盘缓存)。

2. 彻底清理编译产物后重新构建

中间文件损坏是常见诱因,彻底清理后重新编译试试:

# 清理make缓存和out目录
make clean
rm -rf out/
# 清理ccache(如果之前调整过,干脆重置)
rm -rf .ccache/

# 重新初始化编译环境
source build/envsetup.sh
# 选择你的目标编译版本,比如aosp_x86_64-eng
lunch aosp_x86_64-eng
# 降低并行度,避免IO过载,比如用CPU核心数的1.5倍,或者直接-j4
make -j$(nproc)

3. 检查文件权限与SELinux

  • 修复源码目录权限:确保AOSP源码和out目录的所有者是当前普通用户,不要用root编译:
    sudo chown -R $USER:$USER /path/to/your/aosp/source
    
  • 临时关闭SELinux:Ubuntu 18.04默认SELinux是enforcing模式,可能干扰文件读写,临时关闭试试:
    sudo setenforce 0
    
    如果关闭后编译成功,你可以选择永久关闭SELinux(开发环境完全没问题),或者调整SELinux策略。

4. 更换链接器或调整编译参数

错误里用的是GCC的ld链接器,试试改用LLVM的lld,它对大文件的处理更稳定:

# 在lunch之后执行,强制使用lld链接器
export USE_LD=lld
# 然后重新编译
make -j$(nproc)

如果还是不行,进一步降低并行度,比如用-j2,减少同时读写的文件数量,降低磁盘压力。

5. 排查磁盘硬件/虚拟机磁盘镜像问题

  • 物理机的话,检查磁盘是否有坏道:
    sudo smartctl -a /dev/sda  # 替换成你的磁盘设备名
    
  • 虚拟机的话,尝试重新创建磁盘镜像(不要用快照),重新同步AOSP源码后再编译,避免镜像文件损坏导致的I/O错误。

内容的提问来源于stack exchange,提问作者XuSing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:38