手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解_帅峰云;黄腾;宋洋_AZW3_MOBI_EPUB_PDF_电子书(无页码)_帅峰云;黄腾;宋洋

内容节选

14.4.2 物理地址到虚拟地址表的建立 要使用虚拟地址来访问具体的物理地址就需要建立虚拟地址与物理地址之间的映射关系。OP-TEE默认将这种映射关系设置成一一映射,而对于预留出来的虚拟地址空间则会按照其在static_memory_map变量中的索引位置和预留的虚拟空间的大小进行配置,预留虚拟地址空间的默认映射的物理起始地址为0。OP-TEE通过调用init_mem_map函数来实现映射关系的建立,该函数的内容如下:static void init_mem_map(struct tee_mmap_region *memory_map, size_t num_elems){ const struct core_mmu_phys_mem *mem; struct tee_mmap_region *map; size_t last = 0; size_t __maybe_unused count = 0; vaddr_t va; vaddr_t __maybe_unused end; bool __maybe_unused va_is_secure = true; /* any init value fits */ /* 将使用register_phys_mem定义的内存块区域按照type的值由小到大的 方式依次排列到static_memory_map数组中*/ for (mem = &__start_phys_mem_map_section; mem < &__end_phys_mem_map_section; mem++) { //从phys_mem_map_section段中获取一个定义好的内存区域信息 struct core_mmu_phys_mem m = *mem; if (!m.size) continue; assert(m.addr || !core_mmu_type_to_attr(m.type)); /* 如果定义的内存区域类型为MEM_AREA_IO_NSEC或MEM_AREA_IO_SEC,则按照页对齐的原则调整其地址和大小 */ if (m.type == MEM_AREA_IO_NSEC || m.type == MEM_AREA_IO_SEC) { m.addr = ROUNDDOWN(m.addr, CORE_MMU_PGDIR_SIZE); m.size = ROUNDUP(m.size + (mem->addr - m.addr), CORE_MMU_PGDIR_SIZE); } /* 将phys_mem_map_section段中定义的所有类型内存区域信息填充到static_memory_map数组中 */ add_phys_mem(memory_map, num_elems, &m, &last); } #ifdef CFG_SECURE_DATA_PATH /* 检查SDP内存空间地址是否与DRAM/SRAM的内存空间地址有重叠,如果重叠则产生panic */ verify_special_mem_areas(memory_map, num_elems, &__start_phys_sdp_mem_section, &__end_phys_sdp_mem_section, "SDP"); /* 检查SDP内存空间地址是否与非安全的DDR地址空间地址有重叠,如果重叠则产生panic */ check_sdp_intersection_with_nsec_ddr(); #endif /* 检查非安全的DDR地址空间与DRAM/SRAM的地址空间是否有重叠,如果重叠则产生panic */ verify_special_mem_areas(memory_map, num_elems, &__start_phys_nsec_ddr_section, &__end_phys_nsec_ddr_section, "NSEC DDR"); /* 预留出一段MEM_AREA_RES_VASPACE类型的内存空间,并将该类型的内存空间信息插入到static_memory_map数组末尾 */ add_va_space(memory_map, num_elems, MEM_AREA_RES_VASPACE, RES_VASPACE_SIZE, &last); /* 预留出一段MEM_AREA_SHM_VASPACE类型的内存空间,并将该类型的内存空间信息插入到static_memory_map数组末尾 */ add_va_space(memory_map, num_elems, MEM_AREA_SHM_VASPACE, RES_VASPACE_SIZE, &last); /* 设定static_memory......

  1. 信息
  2. 推荐序
  3. 前言
  4. 致谢
  5. 第一篇 基础技术篇
  6. 第1章 可信执行环境
  7. 1.2 TEE如何保护数据安全
  8. 1.3 现有TEE解决方案
  9. 1.4 为什么选择OP-TEE
  10. 第2章 ARM的TrustZone技术
  11. 2.2 ARM安全扩展组件
  12. 2.3 TrustZone技术对资源隔离的实现
  13. 2.4 小结
  14. 第3章 ARM可信固件
  15. 3.2 ATF的主要功能
  16. 3.3 ATF与TEE的关系
  17. 3.4 小结
  18. 第4章 OP-TEE运行环境的搭建及编译
  19. 4.1 获取OP-TEE代码并搭建运行环境
  20. 4.2 运行CA和TA示例
  21. 4.3 OP-TEE源代码结构
  22. 4.4 OP-TEE编译
  23. 4.5 小结
  24. 第二篇 系统集成篇
  25. 第5章 QEMU运行OP-TEE的启动过程
  26. 5.1 bios.bin的入口函数
  27. 5.2 OP-TEE镜像的加载和启动
  28. 5.3 Linux内核镜像的加载和启动
  29. 5.4 rootfs的挂载
  30. 5.5 OP-TEE驱动的启动
  31. 5.6 tee_supplicant的启动
  32. 5.7 小结
  33. 第6章 安全引导功能及ATF的启动过程
  34. 6.1 安全引导的作用
  35. 6.2 安全引导的原理
  36. 6.3 ATF的启动过程
  37. 6.4 小结
  38. 第7章 OP-TEE OS的启动过程
  39. 7.2 ARM64位与ARM32位OP-TEE启动过程的差异
  40. 7.3 小结
  41. 第8章 OP-TEE在REE侧的上层软件
  42. 8.1 OP-TEE的软件框架
  43. 8.2 REE侧libteec库提供的接口
  44. 8.3 REE侧的守护进程——tee_supplicant
  45. 8.4 各种RPC请求的处理
  46. 8.5 小结
  47. 第9章 REE侧OP-TEE的驱动
  48. 9.1 OP-TEE驱动模块的编译保存
  49. 9.2 REE侧OP-TEE驱动的加载
  50. 9.3 REE侧用户空间对驱动的调用过程
  51. 9.4 OP-TEE驱动中重要的结构体变量
  52. 9.5 OP-TEE驱动与OP-TEE之间共享内存的注册和分配
  53. 9.6 libteec库中的接口在驱动中的实现
  54. 9.7 tee_supplicant接口在驱动中的实现
  55. 9.8 小结
  56. 第三篇 OP-TEE内核篇
  57. 第10章 ARM核安全态和非安全态间的切换
  58. 10.2 Monitor模式下的处理过程
  59. 10.3 ARMv8基本知识
  60. 10.4 EL3的处理过程
  61. 10.5 小结
  62. 第11章 OP-TEE对安全监控模式调用的处理
  63. 11.1 OP-TEE的线程向量表
  64. 11.2 ARMv7中Monitor模式对安全监控模式调用的处理
  65. 11.3 ARMv8中EL3处理安全监控模式调用的实现
  66. 11.4 OP-TEE对快速安全监控模式调用的处理
  67. 11.5 OP-TEE对标准安全监控模式调用的处理
  68. 11.6 小结
  69. 第12章 OP-TEE对中断的处理
  70. 12.1 系统的中断处理
  71. 12.2 中断控制器
  72. 12.3 异常向量表配置
  73. 12.4 OP-TEE的线程向量表
  74. 12.5 全局handle变量的初始化
  75. 12.6 ARMv7 Monitor对FIQ事件的处理
  76. 12.7 ARMv8 EL3阶段对FIQ事件的处理
  77. 12.8 OP-TEE对FIQ事件的处理
  78. 12.9 OP-TEE对IRQ事件的处理
  79. 12.10 小结
  80. 第13章 OP-TEE对TA操作的各种实现
  81. 13.1 创建会话在OP-TEE中的实现
  82. 13.2 调用TA命令操作在OP-TEE中的实现
  83. 13.3 关闭会话操作在OP-TEE中的实现
  84. 13.4 小结
  85. 第14章 OP-TEE的内存和缓存管理
  86. 14.1 物理内存和缓存数据的硬件安全保护
  87. 14.2 ARM核对内存的访问
  88. 14.3 OP-TEE对内存区域的管理
  89. 14.4 MMU的初始化和映射页表
  90. 14.5 OP-TEE内存安全权限检查
  91. 14.6 系统的共享内存
  92. 14.7 数据是否需要写入Cache
  93. 14.8 小结
  94. 第15章 OP-TEE中的线程管理
  95. 15.1 OP-TEE中的线程
  96. 15.2 线程状态切换
  97. 15.3 线程运行时的资源
  98. 15.4 线程运行时资源的使用关系
  99. 15.5 OP-TEE中线程的调度
  100. 15.6 线程的死锁
  101. 15.7 小结
  102. 第16章 OP-TEE的系统调用
  103. 16.2 OP-TEE系统调用的实现
  104. 16.3 小结
  105. 第17章 OP-TEE的IPC机制
  106. 17.1 IPC机制的作用
  107. 17.2 IPC机制的原理
  108. 17.3 IPC的实现
  109. 17.4 小结
  110. 第四篇 应用开发篇
  111. 第18章 TA镜像的签名和加载
  112. 18.1 TA镜像文件的编译和签名
  113. 18.2 TA镜像的加载
  114. 18.3 TA镜像合法性的验证
  115. 18.4 加载TA镜像到OP-TEE的用户空间
  116. 18.5 TA运行上下文的初始化
  117. 18.6 小结
  118. 第19章 OP-TEE中的密码学算法
  119. 19.1 算法使用示例
  120. 19.2 OP-TEE中的SHA算法
  121. 19.3 OP-TEE中的AES算法
  122. 19.4 OP-TEE中的RSA算法
  123. 19.5 小结
  124. 第20章 OP-TEE的安全存储
  125. 20.2 安全存储使用示例
  126. 20.3 安全存储功能使用的密钥
  127. 20.4 安全文件、dirf.db文件的数据格式和操作过程
  128. 20.5 安全存储文件的创建
  129. 20.6 安全文件的打开操作
  130. 20.7 安全文件的读写操作
  131. 20.8 安全文件中数据的加解密
  132. 20.9 小结
  133. 第21章 可信应用及客户端应用的开发
  134. 21.1 TA及CA的基本概念
  135. 21.2 GP标准
  136. 21.3 GP标准对TA属性的定义
  137. 21.4 GP标准定义的接口
  138. 21.5 TA和CA的实现
  139. 21.6 TA和CA的集成
  140. 21.7 TA和CA的调试
  141. 21.8 TA和CA的使用
  142. 21.9 小结
  143. 第22章 安全驱动的开发
  144. 22.1 安全设备的硬件安全隔离
  145. 22.2 OP-TEE中安全驱动的框架
  146. 22.3 安全驱动的开发过程和示例
  147. 22.4 安全驱动示例的测试
  148. 22.5 小结
  149. 第23章 终端密钥在线下发系统
  150. 23.1 密钥在线下发系统的框架
  151. 23.2 密钥在线下发的数据包格式
  152. 23.3 密钥在线下发系统示例
  153. 23.4 离线工具的使用
  154. 23.5 小结
  155. 第24章 基于OP-TEE的在线支付系统
  156. 24.1 在线支付系统的基本框架
  157. 24.2 可信通信通道
  158. 24.3 数据交互协议
  159. 24.4 在线支付系统示例的实现
  160. 24.5 示例的集成
  161. 24.6 组包操作嵌入内核
  162. 24.7 支付系统与生物特征的结合
  163. 24.8 小结
  164. 第25章 TEE可信应用的使用领域
  165. 25.1 在线支付
  166. 25.2 数字保护
  167. 25.3 身份验证
  168. 25.4 其他领域
  169. 术语表