dm-verity的构造函数的代码逻辑与块设备关系不大。下面只分析Device Mapper层和dm-verity层的代码逻辑。
1.Device Mapper
Device Mapper架构为用户态程序提供的接口是一个名为control的设备文件,全路径名为/dev/mapper/control,主设备号为10(misc设备),从设备号为236。用户态工具,如dmsetup,会通过ioctl系统调用操作这个设备。下面看一下代码:
命令DM_TABLE_LOAD_CMD(整数9)对应的函数是table_load。table_load会最终调用函数dm_table_add_target,dm_table_add_target会执行
调用某个具体类型的构造函数。(www.xing528.com)
2.dm_verity
ctr是一个函数指针,指向dm_verity的构造函数verity_ctr。verity_ctr本身逻辑比较简单它需要10个参数,全部是必选参数。按照顺序分别是:数据设备、哈希设备、数据块大小、哈希块大小、数据设备包含的块数、哈希设备起始块、哈希算法、根哈希值(root hash)、盐如果最后的参数输入为“-”,就意味着没有盐。参数“哈希设备起始块”规定哈希设备从起始块开始才存储前面提到的那棵存储哈希值的树,至于起始块之前存储什么,dm-verity并没有规定。Android 4.4利用起始块之前的空间存储了一个对哈希树的数字签名,有兴趣的读者可以参考http://nelenkov.blogspot.com/2014/05/using-kitkat-verified-boot.html。
前面提到,内核dm-verity部分不负责建立hash device中正确的数据结构。通常是利用用户态工具,如veritysetup,来创建hash device。所以需要注意的是构建dm-verity设备时输入的参数“盐”要和执行veritysetup时的输入的参数“盐”一致,输入参数“根校验值”(root hash)要和veritysetup的输出一致。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。