深度探索嵌入式操作系统:从零开始设计、架构和开发

深度探索嵌入式操作系统:从零开始设计、架构和开发

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
免费试读
¥35.00¥31.99
今日特价截止至:2019-06-20 02:00:00了解详情

作品简介

相信很多同行和笔者以前一样,阅读过很多操作系统理论方面的书籍,感觉它们所讲述的理论大同小异且比较容易理解,但是真要我们自己去动手开发和实现操作系统时,我们可能连操作系统的第一行代码该怎么写都不知道。为什么会这样?

因为操作系统是硬件平台上的第—层软件,若不了解硬件平台的细节,是不能实现操作系统的,所以本书一开始就选择了一款常用的硬件平台,并对其进行了详细描述,重点介绍了硬件平台上的实时时钟、定时器、串口、中断控制器、内存芯片、flash芯片、CPU、MMU等,然后介绍操作系统架构设计和开发环境与开发工具,尤其开发工具,详细了解开发工具会大大方便后面的开发工作并解决一些困惑,最后介绍了操作系统的初始化、HAL、内存管理、中断管理、设备管理、进程管理、文件系统、系统调用接口、应用程序库。对这些组件的介绍都是先明确这个组件要完成什久功能,达到什么要求。接着详述这个组件必须要关注的硬件的细节,然后把我们的想法和设计归纳成数据结构。最后编写完成这些功能的代码。

作者:彭东

作品目录

  1. 前言
  2. 第1章 操作系统的功能及为什么需要它
  3. 1.1 从hello world开始
  4. 1.2 操作系统功能演进
  5. 1.3 小结
  6. 第2章 硬件平台
  7. 2.1 选择平台
  8. 2.1.1 mini2440
  9. 2.1.2 mini2440平台的信息
  10. 2.2 必须要关注的硬件
  11. 2.2.1 原因
  12. 2.2.2 RTC
  13. 2.2.3 定时器
  14. 2.2.4 串口
  15. 2.2.5 中断控制器
  16. 2.2.6 SDRAM
  17. 2.2.7 Norflash
  18. 2.2.8 Nandflash
  19. 2.3 小结
  20. 第3章 处理器
  21. 3.1 ARM公司与其处理器
  22. 3.2 ARM920T的结构与特性
  23. 3.2.1 ARM920T CPU结构
  24. 3.2.2 ARM920T CPU特性
  25. 3.3 ARM920T存储体系
  26. 3.3.1 ARM920T地址空间
  27. 3.3.2 ARM920T存储器格式
  28. 3.3.3 ARM920T存储地址对齐
  29. 3.4 ARM920T状态
  30. 3.4.1 ARM状态
  31. 3.4.2 Thumb状态
  32. 3.5 ARM920T处理器的7种工作模式
  33. 3.6 寄存器
  34. 3.7 异常和中断
  35. 3.7.1 什么是异常和中断
  36. 3.7.2 异常中断向量
  37. 3.8 ARM920T指令集
  38. 3.8.1 指令及其编码格式
  39. 3.8.2 分支跳转指令
  40. 3.8.3 数据处理指令
  41. 3.8.4 装载和存储指令
  42. 3.8.5 程序状态寄存器操作指令
  43. 3.8.6 协处理器操作指令
  44. 3.8.7 异常中断产生指令
  45. 3.9 MMU
  46. 3.9.1 MMU概述
  47. 3.9.2 为什么要有MMU
  48. 3.9.3 ARM920T CP15协处理器
  49. 3.9.4 MMU页表
  50. 3.9.5 MMU页面访问权限的控制
  51. 3.9.6 MMU的快表TLB
  52. 3.9.7 MMU的编程接口
  53. 3.10 Cache
  54. 3.10.1 ARM920T的Cache
  55. 3.10.2 Cache的原理
  56. 3.10.3 Cache的类型及要注意的问题
  57. 3.10.4 ARM920T Cache的编程接口
  58. 3.11 小结
  59. 第4章 操作系统内核的设计与构建
  60. 4.1 操作系统内核的设计
  61. 4.1.1 内核要完成的功能
  62. 4.1.2 内核的架构
  63. 4.1.3 分离硬件的相关性
  64. 4.1.4 我们的选择
  65. 4.2 开发环境及相关工具
  66. 4.2.1 Linux环境
  67. 4.2.2 文本编辑器
  68. 4.2.3 GCC
  69. 4.2.4 LD
  70. 4.2.5 make
  71. 4.3 LMOSEM的构建系统
  72. 4.3.1 LMOSEM的makefile
  73. 4.3.2 LMOSEM的链接脚本
  74. 4.4 开发板的安装
  75. 4.5 小结
  76. 第5章 语言间调用约定与基本数据结构
  77. 5.1 寄存器使用约定
  78. 5.1.1 寄存器别名
  79. 5.1.2 参数传递与返回值
  80. 5.2 基本数据结构
  81. 5.2.1 C语言的基本数据结构
  82. 5.2.2 list_h_t数据结构
  83. 5.2.3 spinlock_t数据结构
  84. 5.2.4 kwlst_t数据结构
  85. 5.2.5 sem_t数据结构
  86. 5.3 数据结构存在于内存中的形式
  87. 5.4 C与汇编的混用
  88. 5.5 小结
  89. 第6章 内核初始化
  90. 6.1 开始
  91. 6.1.1 第一行汇编代码
  92. 6.1.2 第一个C函数
  93. 6.2 MMU和中断向量的初始化
  94. 6.2.1 初始化MMU
  95. 6.2.2 复制中断向量
  96. 6.3 串口初始化
  97. 6.3.1 串口硬件
  98. 6.3.2 内核的printf
  99. 6.4 机器数据结构
  100. 6.4.1 设计数据结构
  101. 6.4.2 确定一些重要数据结构与内核的地址
  102. 6.5 初级内存管理初始化
  103. 6.5.1 设计一些数据结构
  104. 6.5.2 初始化mmapdsc_t结构数组
  105. 6.5.3 建立起内存分配数据结构
  106. 6.6 中断初始化
  107. 6.6.1 设计一些数据结构
  108. 6.6.2 初始中断源描述符
  109. 6.7 初始化测试
  110. 6.8 小结
  111. 第7章 内存管理
  112. 7.1 内核功能层入口
  113. 7.2 内存管理组件的设计
  114. 7.3 块级内存管理
  115. 7.3.1 块级内存管理数据结构视图
  116. 7.3.2 块级内存管理接口
  117. 7.3.3 主分配函数
  118. 7.3.4 分配时查找alcfrelst_t
  119. 7.3.5 分配时查找和操作mmapdsc_t
  120. 7.3.6 分配代码写得对吗
  121. 7.3.7 主释放函数
  122. 7.3.8 释放时查找alcfrelst_t
  123. 7.3.9 释放时查找和操作mmapdsc_t
  124. 7.3.10 测试块级内存管理层
  125. 7.4 页级内存管理
  126. 7.4.1 页级内存管理接口及调用流程
  127. 7.4.2 相关的数据结构
  128. 7.4.3 页级内存管理初始化
  129. 7.4.4 分配主函数
  130. 7.4.5 分配时查找mplhead_t
  131. 7.4.6 分配时新建页级内存池
  132. 7.4.7 分配时操作mplhead_t
  133. 7.4.8 分配代码写得对吗
  134. 7.4.9 释放主函数
  135. 7.4.10 释放时查找mplhead_t
  136. 7.4.11 释放时操作mplhead_t
  137. 7.4.12 释放时删除页级内存池
  138. 7.4.13 测试页级内存管理层
  139. 7.5 字级内存管理
  140. 7.5.1 字级内存接口及调用流程
  141. 7.5.2 相关的数据结构
  142. 7.5.3 分配主函数
  143. 7.5.4 分配时查找mplhead_t
  144. 7.5.5 分配时新建字级内存池
  145. 7.5.6 分配时操作mplhead_t
  146. 7.5.7 分配代码写得对吗
  147. 7.5.8 释放主函数
  148. 7.5.9 释放时查找mplhead_t
  149. 7.5.10 释放时操作mplhead_t
  150. 7.5.11 释放时删除字级内存池
  151. 7.5.12 测试字级内存管理层
  152. 7.6 小结
  153. 第8章 中断管理
  154. 8.1 中断与中断控制器
  155. 8.1.1 什么是中断
  156. 8.1.2 S3C2440A中断控制器
  157. 8.2 中断管理的架构与相关数据结构
  158. 8.2.1 中断管理的架构
  159. 8.2.2 设计数据结构intfltdsc_t和intserdsc_t
  160. 8.3 中断处理
  161. 8.3.1 中断辅助例程
  162. 8.3.2 从中断向量开始
  163. 8.3.3 保存CPU上下文
  164. 8.3.4 中断主分派例程
  165. 8.3.5 确定中断源
  166. 8.3.6 调用中断处理例程
  167. 8.4 安装中断回调例程
  168. 8.5 小结
  169. 第9章 驱动模型
  170. 9.1 操作系统内核如何管理设备
  171. 9.1.1 分权而治
  172. 9.1.2 设备类型
  173. 9.1.3 驱动程序
  174. 9.2 相关数据结构
  175. 9.2.1 驱动
  176. 9.2.2 派发例程类型
  177. 9.2.3 设备ID
  178. 9.2.4 设备
  179. 9.2.5 IO包
  180. 9.2.6 设备表
  181. 9.3 驱动模型的基础设施
  182. 9.3.1 驱动程序从哪里执行
  183. 9.3.2 新建与注册设备
  184. 9.3.3 注册回调函数
  185. 9.3.4 发送IO包
  186. 9.3.5 调用驱动程序函数
  187. 9.3.6 等待服务
  188. 9.3.7 完成服务
  189. 9.3.8 驱动模型辅助函数
  190. 9.4 systick驱动程序实例
  191. 9.4.1 systick硬件
  192. 9.4.2 systick驱动程序框架
  193. 9.4.3 systick驱动程序实现
  194. 9.4.4 测试systick驱动程序
  195. 9.5 RTC驱动程序实例
  196. 9.5.1 RTC硬件
  197. 9.5.2 RTC驱动程序实现
  198. 9.6 小结
  199. 第10章 进程
  200. 10.1 应用程序的运行
  201. 10.1.1 程序运行需要什么资源
  202. 10.1.2 任何时刻资源都可用吗
  203. 10.1.3 提出多道程序模型
  204. 10.2 相关的数据结构
  205. 10.2.1 设计进程的数据结构
  206. 10.2.2 调度进程表
  207. 10.3 LMOSEM内核的第一个进程
  208. 10.3.1 进程管理组件的初始化
  209. 10.3.2 建立空转进程
  210. 10.3.3 空转进程运行
  211. 10.4 新建进程
  212. 10.4.1 分配进程描述符
  213. 10.4.2 分配内存空间
  214. 10.4.3 加入进程调度表
  215. 10.5 进程调度
  216. 10.5.1 调度算法
  217. 10.5.2 处理进程时间片
  218. 10.5.3 检查调度状态
  219. 10.5.4 选择进程
  220. 10.5.5 进程切换
  221. 10.5.6 进程等待与唤醒
  222. 10.5.7 进程测试
  223. 10.6 小结
  224. 第11章 文件系统
  225. 11.1 文件系统设计
  226. 11.1.1 文件系统只是一个设备
  227. 11.1.2 数据格式与存储块
  228. 11.1.3 如何组织文件
  229. 11.1.4 关于我们文件系统的限制
  230. 11.2 相关的数据结构
  231. 11.2.1 超级块
  232. 11.2.2 位图
  233. 11.2.3 目录
  234. 11.2.4 文件管理头
  235. 11.3 文件系统格式化
  236. 11.3.1 建立超级块
  237. 11.3.2 建立位图
  238. 11.3.3 建立根目录
  239. 11.4 文件系统基础操作
  240. 11.4.1 获取与释放根目录文件
  241. 11.4.2 字符串操作
  242. 11.4.3 分解路径名
  243. 11.4.4 检查文件是否存在
  244. 11.5 文件操作
  245. 11.5.1 新建文件
  246. 11.5.2 删除文件
  247. 11.5.3 打开文件
  248. 11.5.4 读写文件
  249. 11.5.5 关闭文件
  250. 11.5.6 驱动整合
  251. 11.6 文件系统测试
  252. 11.6.1 格式化测试
  253. 11.6.2 文件操作测试
  254. 11.7 小结
  255. 第12章 系统调用与应用程序库
  256. 12.1 系统调用机制
  257. 12.1.1 软中断指令
  258. 12.1.2 传递系统调用参数
  259. 12.1.3 系统调用分发器
  260. 12.2 时间管理系统调用
  261. 12.3 进程管理系统调用
  262. 12.3.1 进程的运行与退出
  263. 12.3.2 获取进程的ID
  264. 12.4 内存管理系统调用
  265. 12.5 设备与文件系统调用
  266. 12.5.1 设备与文件的打开
  267. 12.5.2 设备与文件的关闭
  268. 12.5.3 设备与文件的读写
  269. 12.5.4 设备与文件的控制
  270. 12.6 应用程序库
  271. 12.7 测试
  272. 12.8 小结
  273. 后记
载入中

热门划线

喜欢这本书的人也喜欢