e2fsdroid_cmd: set_selinux_xattr: No such file or directory searching for label “/appcfg“

build_image.py - ERROR : Failed to build out/target/product/x9sp_ms/obj/PACKAGING/systemimage_intermediates/system.img from out/target/product/x9sp_ms/system Out of space? Out of inodes? The tree size of /armor_x9sp/android12/out/soong/.temp/tmpwhg84c is 1840845824 bytes (1755 MB), with reserved space of 67108864 bytes (64 MB). The max image size for filesystem files is 1907957760 bytes (1819 MB), out of a total partition size of 1907957760 bytes (1819 MB).

android12/out/host/linux-x86/bin/e2fsdroid -p out/target/product/x9sp_ms/system -s -S out/target/product/x9sp_ms/obj/ETC/file_contexts.bin_intermediates/file_contexts.bin -f /armor_code/android12/out/soong/.temp/tmpgrAZa6 -a / out/target/product/x9sp_ms/obj/PACKAGING/systemimage_intermediates/system.img

mkuserimg_mke2fs.py ERROR: Failed to run e2fsdroid_cmd: set_selinux_xattr: No such file or directory searching for label "/appcfg" e2fsdroid: No such file or directory while configuring the file system

检查发现,out target project 下 root 多出一个 "/appcfg", 这个是怎么来的?

排查1:

参数功能描述
-p <path>指定源目录,其中的内容将被打包到镜像中
-s创建稀疏镜像(节省空间,支持 OTA 更新)
-S <file>指定 SELinux 上下文文件(二进制格式),用于设置文件的安全标签
-a <mount>指定根目录挂载点(通常为 /
-f <file>指定文件列表,仅打包列表中指定的文件(可选)
-L <label>设置文件系统标签(如 systemvendor
-M <inode>设置文件系统的最大 inode 数量
--skip_selinux_fixup跳过 SELinux 标签应用(仅用于调试)

3. 工作流程

  1. 解析参数:读取源目录、目标镜像路径、SELinux 上下文文件等
  2. 初始化文件系统:根据目标镜像大小创建 ext4 文件系统
  3. 复制文件:递归复制源目录中的所有文件和目录到镜像中
  4. 应用 SELinux 标签:根据 file_contexts.bin 为每个文件设置安全上下文
  5. 优化与完成:生成稀疏格式(如果启用),并完成镜像创建

4. 常见问题与错误

4.1 SELinux 上下文错误
  • 错误信息set_selinux_xattr: No such file or directory
  • 原因:SELinux 上下文文件中定义的路径在实际文件系统中不存在
  • 解决
    • 确保 file_contexts 中的所有路径在源目录中存在
    • 使用 (/.*)? 使路径变为可选(如 /appconfig(/.*)?

排查2:

  

BOARD_ROOT_EXTRA_FOLDERS 是 Android 构建系统中的一个重要变量,用于在根文件系统(root 目录)中创建额外的目录结构。这些目录在系统启动时就已存在,无需在运行时动态创建。

1. 变量作用

BOARD_ROOT_EXTRA_FOLDERS 用于定义需要在根文件系统中预先创建的目录路径。这些目录会在构建过程中自动生成,并包含在最终的系统镜像中。

常见用途包括:

  • 创建挂载点(如 /mnt/storage 等)
  • 为特定设备或功能预留目录
  • 兼容旧版系统的目录结构

2. 变量定义位置

通常在以下位置定义:

  • device/<vendor>/<device>/BoardConfig.mk(设备特定配置)
  • vendor/<vendor>/common/BoardConfigCommon.mk(供应商通用配置)
  • build/make/target/board/generic/BoardConfig.mk(通用配置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值