super.img‘ 调用 stat 失败: 没有那个文件或目录
编译Android时偶现"super.img' stat失败"问题,通常是由于文件未生成或路径错误。主要现象包括拷贝失败和解包错误。解决方案:1)检查super.img是否存在;2)若不存在则执行make superimage重新生成;3)验证镜像完整性。其他排查方向包括清理构建、检查编译日志和设备配置。问题可能源于路径不匹配、编译失败或镜像损坏,需根据具体情况分析处理。
·
日常开发编译偶现 super.img’ 调用 stat 失败: 没有那个文件或目录 问题,一直没有细究
今天研究记录一下问题和解决方案,具体错误如下:
cp: 对 '/mnt/xxx/xxx/out/target/product/你的产品名字/super.img' 调用 stat 失败: 没有那个文件或目录
pack docke android images: user...
Cannot open input file super.img
lpunpack E 10-09 15:07:49 1121847 1121847 reader.cpp:125] [liblp] bool android::fs_mgr::ReadPrimaryGeometry(int, LpMetadataGeometry *) read 4096 bytes failed: Invalid argument
lpunpack E 10-09 15:07:49 1121847 1121847 reader.cpp:138] [liblp] bool android::fs_mgr::ReadBackupGeometry(int, LpMetadataGeometry *) backup read 4096 bytes failed: Invalid argument
Could not read metadata from the super image file 'super.img.ext4'.
super_img/
| 问题现象 | 可能原因 |
|---|---|
| 拷贝super.img失败:没有那个文件或目录 | 1. 编译未成功生成 super.img 2. 文件生成路径与脚本预期路径不符 3. 编译环境配置有误 |
| lpunpack解包super.img.ext4失败:read 4096 bytes failed | 1. 尝试解包的不是raw格式的super镜像 2. 原始super.img文件不完整或已损坏 |
先执行命令,检查文件是否存在
ls -l /mnt/xxx/xxx/out/target/product/你的产品名字/super.img
如果文件存在,且大小不为0,则说明编译成功生成了super.img。检查你的打包脚本中设置的源路径和目标路径是否准确。
如果文件不存在,说明编译过程可能没有成功生成super.img。
我这里是文件不存在,所以执行以下命令生成 super.img
make superimage
make 完成后在终端执行以下命令 监控输出目录的变化 看看是否生成super.img
ls -la /mnt/xxx/xxx/out/target/product/你的产品名字/ | grep -E "(super|img)"
检查生成结果
# 检查 super.img 是否生成
ls -lh /mnt/xxx/xxx/out/target/product/你的产品名字/super.img
# 检查文件类型
file /mnt/xxx/xxx/out/target/product/你的产品名字/super.img
验证镜像完整性
# 检查文件大小(不应该为0)
ls -l /mnt/xxx/xxx/out/target/product/你的产品名字/super.img
# 尝试识别镜像格式
head -c 100 /mnt/xxx/xxx/out/target/product/你的产品名字/super.img | hexdump -C | head -5
上述步骤ok,重新编译也成功没有报错!
如果你的问题不一样,建议按照一下思路尝试看看
清理构建:尝试执行make clean或rm -rf out/,然后重新编译,从干净的状态开始编译。
检查编译日志:重新编译时,关注一下终端输出是否有任何Error或Warning,特别是在编译过程的最后阶段,大部分情况下提供问题的线索。
检查设备配置:确认设备配置文件(通常是device/…/xxx/目录下的mk文件)正确,特别是与动态分区(Dynamic Partitions)相关的配置,因为super.img与动态分区密切相关。
解决思路:
更多推荐




所有评论(0)