参考了:实现 dm-verity | Android Open Source Project (google.cn)。基于这个添加了一层原始数据,便于理解。
结构图如下:
对hashtree结构图的解释:
dev data:表示我们的分区数据。这里我们将dev data按照指定的大小4K划分很多个块。(4K这个值不是固定的,这个值后续需要传给kernel)
hashtree:hash树。hashtree有很多层。所有的层组合到一起,就组成了整个hashtree
LAYER0:将dev data的每个4K块做hash计算,将得到的所有hash值,组成一个新的data。然后将新的data按照4K进行划分块。注:如果新的data不是4K的整数倍,则向上取整。对多出来的数据进行填0补充
LAYER1:将LAYER0的data按照每个4K块做hash计算,将得到的所有hash值,组成一个新的data。然后将新的data按照4K进行划分块。
LAYER2:重复之前的步骤。一直到计算得到所有hash值组成的data小于等于4K,就不再继续向下计算。
root hash:根hash。是通过计算hasttree最后一个layer得到的hash值