简介
本书是一本介绍怎样去实际编写一款嵌入式操作系统的书,所涉及的
内容包括操作系统基本原理以及这些原理在嵌入式平台中的实现方法。全
书共分九章,从最基本的嵌入式编程方法开始,逐渐深入到中断管理、内
存管理、设备管理、文件系统管理以及进程管理等操作系统核心部分,为
读者系统地呈现了一个操作系统的全貌。
另外,本书遵循理论联系实际的基本原则,在阐述基本原理的同时,
还给出非常详尽的示例代码,以及对这些代码的讲解。读者研读这些代码
,不但可以进一步巩固对操作系统理论知识的理解,更可以以此为基础,
去实现一个属于自己的嵌入式操作系统。也许写操作系统是很多人的梦想
,或者对有些人来说根本不敢想象,希望通过学习本书,您可以超越您的
想象,实现您的梦想!
目录
第1章 搭建工作环境 1
1.1 选择合适的开发环境 1
1.1.1 准备Cygwin开发环境 2
1.1.2 使用Linux开发环境 7
1.2 开发工具的使用 8
1.2.1 编译器的选择和安装 8
1.2.2 编辑器的选择和使用 10
1.3 虚拟硬件的安装和使用 13
1.3.1 SkyEye的安装 15
1.3.2 SkyEye的使用 15
1.4 总结 17
第2章 基础知识 18
2.1 使用C语言写第一段程序 18
2.2 用脚本链接目标文件 22
2.3 用汇编语言编写程序 25
2.4 汇编和C的混合编程 29
2.4.1 过程调用标准 30
2.4.2 混合编程的例子 31
2.5 Makefile 33
2.6 总结 35
第3章 操作系统的启动 36
3.1 启动流程 36
3.1.1 ARM的启动过程 38
3.1.2 ARM操作系统解读 39
3.1.3 正式开始写操作系统 46
3.1.4 让启动代码运行起来 52
3.2 MMU 56
3.2.1 页表 58
3.2.2 页权限 64
3.2.3 cache和write buffer 66
3.2.4 激活MMU 69
3.3 GCC内联汇编 71
3.4 总结 78
第4章 打印函数 79
4.1 打印函数实例 80
4.1.1 变参函数是如何工作的 81
4.1.2 亲自实现一个可变参数函数 83
4.1.3 实现打印函数中的格式转换 87
4.2 实现自己的打印函数 91
4.3 总结 99
第5章 中断处理 100
5.1 ARM的中断 101
5.1.1 统一的异常和中断处理 102
5.1.2 独立的中断处理 114
5.2 简单的中断处理实例 118
5.2.1 解决异常向量表的问题 118
5.2.2 简单的中断处理代码 120
5.2.3 S3C2410中的定时器 122
5.2.4 让中断处理程序运行起来 124
5.3 复杂的中断处理实例 126
5.3.1 提高中断的效率 126
5.3.2 中断嵌套的实现 130
5.4 更优秀的中断嵌套方法 134
5.5 总结 139
第6章 动态内存管理 140
6.1 伙伴算法 141
6.1.1 伙伴算法的原理 143
6.1.2 伙伴算法的实现 146
6.2 slab 169
6.2.1 使用slab的前提条件 170
6.2.2 slab的组成 171
6.2.3 通过slab进行内存分配 176
6.2.4 内存空间的释放 177
6.2.5 slab的销毁 178
6.3 kmalloc函数 179
6.4 总结 183
第7章 框架 184
7.1 驱动程序框架 184
7.1.1 基于存储设备的实例 186
7.1.2 运行存储设备实例 192
7.2 文件系统框架 194
7.2.1 文件系统的原理 195
7.2.2 文件系统框架的实现 197
7.2.3 romfs文件系统类型 200
7.2.4 实现romfs文件系统 204
7.2.5 让代码运行起来 210
7.3 总结 215
第8章 运行用户程序 217
8.1 二进制程序的运行方法 218
8.2 可执行文件格式 222
8.2.1 ELF格式的组成结构 223
8.2.2 操作ELF格式文件的方法 226
8.2.3 运行ELF格式的应用程序 230
8.3 系统调用 232
8.3.1 用户和内核的运行空间 232
8.3.2 实现一个系统调用 235
8.3.3 运行系统调用程序 244
8.4 总结 246
第9章 进程 247
9.1 进程的实现原理 247
9.2 进程的实现 252
9.2.1 改写中断处理程序 252
9.2.2 抽象调度函数 256
9.2.3 新进程的产生 258
9.2.4 多个进程同时运行 262
9.3 总结 265
结束语 266
参考资料 267
1.1 选择合适的开发环境 1
1.1.1 准备Cygwin开发环境 2
1.1.2 使用Linux开发环境 7
1.2 开发工具的使用 8
1.2.1 编译器的选择和安装 8
1.2.2 编辑器的选择和使用 10
1.3 虚拟硬件的安装和使用 13
1.3.1 SkyEye的安装 15
1.3.2 SkyEye的使用 15
1.4 总结 17
第2章 基础知识 18
2.1 使用C语言写第一段程序 18
2.2 用脚本链接目标文件 22
2.3 用汇编语言编写程序 25
2.4 汇编和C的混合编程 29
2.4.1 过程调用标准 30
2.4.2 混合编程的例子 31
2.5 Makefile 33
2.6 总结 35
第3章 操作系统的启动 36
3.1 启动流程 36
3.1.1 ARM的启动过程 38
3.1.2 ARM操作系统解读 39
3.1.3 正式开始写操作系统 46
3.1.4 让启动代码运行起来 52
3.2 MMU 56
3.2.1 页表 58
3.2.2 页权限 64
3.2.3 cache和write buffer 66
3.2.4 激活MMU 69
3.3 GCC内联汇编 71
3.4 总结 78
第4章 打印函数 79
4.1 打印函数实例 80
4.1.1 变参函数是如何工作的 81
4.1.2 亲自实现一个可变参数函数 83
4.1.3 实现打印函数中的格式转换 87
4.2 实现自己的打印函数 91
4.3 总结 99
第5章 中断处理 100
5.1 ARM的中断 101
5.1.1 统一的异常和中断处理 102
5.1.2 独立的中断处理 114
5.2 简单的中断处理实例 118
5.2.1 解决异常向量表的问题 118
5.2.2 简单的中断处理代码 120
5.2.3 S3C2410中的定时器 122
5.2.4 让中断处理程序运行起来 124
5.3 复杂的中断处理实例 126
5.3.1 提高中断的效率 126
5.3.2 中断嵌套的实现 130
5.4 更优秀的中断嵌套方法 134
5.5 总结 139
第6章 动态内存管理 140
6.1 伙伴算法 141
6.1.1 伙伴算法的原理 143
6.1.2 伙伴算法的实现 146
6.2 slab 169
6.2.1 使用slab的前提条件 170
6.2.2 slab的组成 171
6.2.3 通过slab进行内存分配 176
6.2.4 内存空间的释放 177
6.2.5 slab的销毁 178
6.3 kmalloc函数 179
6.4 总结 183
第7章 框架 184
7.1 驱动程序框架 184
7.1.1 基于存储设备的实例 186
7.1.2 运行存储设备实例 192
7.2 文件系统框架 194
7.2.1 文件系统的原理 195
7.2.2 文件系统框架的实现 197
7.2.3 romfs文件系统类型 200
7.2.4 实现romfs文件系统 204
7.2.5 让代码运行起来 210
7.3 总结 215
第8章 运行用户程序 217
8.1 二进制程序的运行方法 218
8.2 可执行文件格式 222
8.2.1 ELF格式的组成结构 223
8.2.2 操作ELF格式文件的方法 226
8.2.3 运行ELF格式的应用程序 230
8.3 系统调用 232
8.3.1 用户和内核的运行空间 232
8.3.2 实现一个系统调用 235
8.3.3 运行系统调用程序 244
8.4 总结 246
第9章 进程 247
9.1 进程的实现原理 247
9.2 进程的实现 252
9.2.1 改写中断处理程序 252
9.2.2 抽象调度函数 256
9.2.3 新进程的产生 258
9.2.4 多个进程同时运行 262
9.3 总结 265
结束语 266
参考资料 267
ARM编程的方法与实践
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×