写在前面
这篇文章以imx6q的android5.1为例,介绍recovery分区表的配置和加载
分区表加载
//bootable/recovery/roots.cpp
void load_volume_table()
{
int i;
int ret;
fstab = fs_mgr_read_fstab("/etc/recovery.fstab"); //由此看见,recovery.fstab为recovery的分区表文件
if (!fstab) {
LOGE("failed to read /etc/recovery.fstab\n");
return;
}
ret = fs_mgr_add_entry(fstab, "/tmp", "ramdisk", "ramdisk");
if (ret < 0 ) {
LOGE("failed to add /tmp entry to fstab\n");
fs_mgr_free_fstab(fstab);
fstab = NULL;
return;
}
printf("recovery filesystem table\n"); //在/cache/recovery/last_log 文件中可以看到此log
printf("=========================\n");
for (i = 0; i < fstab->num_entries; ++i) {
Volume* v = &fstab->recs[i];
printf(" %d %s %s %s %lld\n", i, v->mount_point, v->fs_type,
v->blk_device, v->length);
}
printf("\n");
}
recovery.fstab的生成
通过查看recovery的源码,知道了recovery加载的分区表是recovery.fstab,然后在device目录下进行查找,竟然没有找到。
一般编译recovery.img的指令只make recoveryimage,所以猜测分区表的加载可能是在Makefile中指定的,然后去查找/build/core/Makefile文