參考了:實現 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值