废话:没想到第一篇笔记竟然是efs,浅浅记录一下~
一、前言
在高通平台中,Modem使用EFS(Embedded File System)来存储其配置数据。由于Modem不能直接访问Flash(eg,eMMC、UFS和NVMe),因此它通过AP访问。更新文件系统时,会将整个文件系统分区写入Flash。
二、EFS镜像和分区
EFS模块会将如下三种EFS镜像保存到Flash的三个EFS的分区中——FS1,FS2,FSG。
... ... | FS1 | FS2 | FSG | ... ... |
三种EFS镜像——
1. Main EFS image, the main active EFS image
写入主EFS分区——FS1和FS2,如下图;

2. EFS Golden Copy image, a factory snapshot of the main EFS image
写入FSG分区,只写一次,并且写完之后打开写保护;
理解:工厂校准后,在下一工位触发备份命令,将最新的EFS从FS1/FS2复制到FSG分区
3. Signed zip-tar image, 工厂使用的临时镜像
设备第一次启动时预填充空的EFS,并写入FSG分区,之后会被“EFS Golden Copy”覆盖;
三、EFS备份
1. Runtime Backup
MPSS基于定时器发起备份
理解:这里应该指的是,系统工作时,定期将最新的EFS数据写入FS1、FS2,即EFS Sync
在这里,有一个retry time的概念,即在周期备份期间,当发生共享内存不可使用或者无法打开设备节点时,会进行重试。并且系统仅在(驱动)设定的一段时间后重试一次。
若如上retry fail,则默认使用周期定时器,直到周期备份timer释放再进行下一次尝试。
2. Factory Backup
工厂校准后,通过DIAG指令触发备份
理解:如“EFS Golden Copy image”中的理解
四、EFS还原
目前没有了解到高通有做EFS错误检测机制(如有欢迎帮忙指路~),因此当EFS发生损坏时,一般是OEM自己做强制恢复机制——即判断时机,擦除fs1、fs2分区,从而触发restore机制。
五、启动时EFS初始化
1. EFS检查FS1、FS2分区是否为有效镜像;若是,则使用最新的镜像启动;
2. 若FS1、FS2分区没有有效镜像,则检查fsg的有效签名的.tar文件;若有,则是否fsg的签名.tar作为初始化文件系统数据;
=>工厂场景
3.若FGS分区没有签名的压缩.tar文件,检查分区是否有常规EFS镜像;若有,则使用该镜像;
4. 若FSG、FS1、FS2都损坏、EFS数据为空,则EFS在RAM中创建一个新的文件系统,一旦数据有更新,则RAM中的文件系统就转移到FS1分区中。
六、EFS加解密
了解的不是很细,就画个图吧。
End