写在前面
这篇文章以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文件,果然。
......
$(INSTALLED_RECOVERYIMAG

本文以imx6q的Android 5.1为例,详细阐述了recovery分区表的配置和加载过程。主要内容包括:recovery分区表加载的源码分析,发现分区表recovery.fstab的生成位置在device/fsl/platform中由TARGET_RECOVERY_FSTAB变量决定,并且在recovery启动与正常启动中,分区表存在区别,特别是udisk和sd卡的挂载处理。通过对recovery分区表的独立设置,解决了在recovery模式下udisk无法挂载的问题。
最低0.47元/天 解锁文章
1180

被折叠的 条评论
为什么被折叠?



