最近客户反馈,编译32位的android系统,在recovery中执行恢复出厂设置的时候失败了,失败的打印提升信息如下。
Formatting /data...
[ 2.191404] E:get_file_size: invalid size -1289764864 for /dev/block/data
[ 2.207430] Data wipe failed.
根据打印提示,意识是说获取data分区的size是无效的。我们来看看这个函数get_file_size
bootable/recovery/roots.cpp
bootable/recovery/roots.cpp
static ssize_t get_file_size(int fd, uint64_t reserve_len) {
struct stat buf;
int ret = fstat(fd, &buf);
if (ret) return 0;
ssize_t computed_size;
if (S_ISREG(buf.st_mode)) {
computed_size = buf.st_size - reserve_len;
} else if (S_ISBLK(buf.st_mode)) {
computed_size = get_block_device_size(fd) - reserve_len;
} else {
computed_size = 0;
}
return computed_size;
}