第1章 概述 1
1.1 嵌入式系统概述 1
1.2 嵌入式操作系统概述 3
1.2.1 嵌入式操作系统的特点 3
1.2.2 嵌入式操作系统与通用操作系统的区别 4
1.2.3 嵌入式实时操作系统 6
1.3 操作系统的基本概念 6
1.3.1 微内核与大内核 7
1.3.2 进程、线程与任务 8
1.3.3 可抢占与不可抢占 9
1.3.4 同步机制 9
1.4 Hello China概述 10
1.4.1 Hello China的功能特点 11
1.4.2 Hello China的开发环境 12
1.4.3 面向对象思想的模拟 15
1.4.4 对象机制 17
1.4.5 Hello China的源文件构成 18
1.4.6 Hello China的使用 20
1.5 嵌入式软件的开发过程和方法 21
1.6 实例:一个简单的IP路由器的实现 21
1.6.1 概述 21
1.6.2 路由器的硬件结构 22
1.6.3 路由器的软件功能 23
1.6.4 各任务的实现 24
第2章 Hello China的加载和初始化 28
2.1 常见嵌入式系统的启动 28
2.1.1 典型嵌入式系统内存映射布局 28
2.1.3 常见嵌入式操作系统的加载方式 29
2.1.2 嵌入式系统的启动概述 29
2.1.4 嵌入式系统软件的写入 34
2.2 Hello China在PC上的启动 36
2.2.1 PC启动过程概述 36
2.2.2 Hello China的引导过程 38
2.2.3 实地址模式下的初始化 42
2.2.4 保护模式下的初始化 46
2.2.5 操作系统核心功能的初始化 49
第3章 Hello China的Shell 57
3.1 Shell的启动和初始化 57
3.2 Shell的消息处理过程 58
3.3 内部命令的处理过程 62
3.4 外部命令的处理过程 64
4.1.1 进程、线程和任务 68
4.1 线程概述 68
第4章 Hello China的线程 68
4.2 Hello China的线程实现 69
4.2.1 核心线程管理对象 69
4.2.2 线程的状态及其切换 74
4.2.3 核心线程对象 76
4.2.4 线程的上下文 79
4.2.5 线程的优先级与调度 84
4.2.6 线程的创建 86
4.2.7 线程的结束 92
4.2.8 线程的消息队列 94
4.2.9 线程的切换——中断上下文 98
4.2.10 线程的切换——系统调用上下文 106
4.2.11 上下文保存和切换的底层函数 112
4.2.12 线程的睡眠与唤醒 116
5.2 IA32 CPU内存管理机制 117
5.2.1 IA32 CPU内存管理机制概述 117
第5章 Hello China的内存管理机制 117
5.1 内存管理机制概述 117
5.2.2 几个重要的概念 120
5.2.3 分段机制的应用 121
5.2.4 分页机制的应用 124
5.3 Power PC CPU的内存管理机制 133
5.4 Hello China内存管理模型 135
5.4.1 Hello China的内存管理模型 135
5.4.2 Hello China的内存布局 137
5.4.3 核心内存池的管理 139
5.4.4 页框管理对象(PageFrameManager) 142
5.4.5 页面索引对象(PageIndexManager) 147
5.4.6 虚拟内存管理对象(VirtualMemoryMgr) 152
6.1 Heap概述 174
6.2 堆的功能需求定义 174
第6章 线程本地堆的实现 174
6.3 堆的实现概要 176
6.4 堆的详细实现 181
6.4.1 堆的创建 181
6.4.2 堆的销毁 185
6.4.3 堆内存申请 186
6.4.4 堆内存释放 191
6.4.5 malloc函数和free函数的实现 195
7.2 关键区段概述 198
第7章 互斥和同步机制的实现 198
7.1 互斥和同步概述 198
7.3 关键区段产生的原因 199
7.3.1 多个线程之间的竞争 199
7.3.2 中断服务程序与线程之间的竞争 200
7.3.3 多个CPU之间的竞争 200
7.4 单CPU下关键区段的实现 201
7.5.1 多CPU环境下的实现方式 204
7.5 多CPU下关键区段的实现 204
7.5.2 Hello China的未来实现 205
7.6 Power PC下关键区段的实现 206
7.6.1 Power PC提供的互斥访问机制 206
7.6.2 多CPU环境下的互斥机制 208
7.7 关键区段使用注意事项 209
7.8 Semaphore概述 209
7.9 Semaphore对象的定义 210
7.10 Semaphore对象的实现 211
7.10.1 Initialize和Uninitialize实现 211
7.10.2 WaitForThisObject的实现 213
7.10.3 WaitForThisObjectEx的实现 214
7.10.4 ReleaseSemaphore的实现 219
第8章 中断和定时处理机制的实现 221
8.1 中断和异常概述 221
8.2.1 IA32中断处理过程 222
8.2 硬件相关部分处理 222
8.2.2 IDT初始化 223
8.3 硬件无关部分处理 229
8.3.1 系统对象和中断对象 229
8.3.2 中断调度过程 231
8.3.3 缺省中断处理函数 233
8.4 对外服务接口 234
8.5 几个注意事项 235
8.6 Power PC的异常处理机制 236
8.6.1 Power PC异常处理机制概述 236
8.6.2 Power PC异常的分类 237
8.6.3 异常的处理和返回 237
8.7 定时器概述 238
8.7.1 SetTimer函数的调用 238
8.8 设置定时器操作 240
8.7.2 CancelTimer函数的调用 240
8.7.3 ResetTimer函数的调用 240
8.9 定时器超时处理 242
8.10 定时器取消处理 245
8.11 定时器复位 247
8.12 定时器注意事项 247
第9章 系统总线管理 249
9.1 系统总线概述 249
9.1.1 系统总线 249
9.1.2 总线管理模型 249
9.1.3 设备标识符 254
9.2 系统资源管理 254
9.2.1 资源描述对象 255
9.2.2 IO端口资源管理 256
9.3.2 GetDevice 257
9.3.3 CheckPortRegion 257
9.3.1 GetResource 257
9.3 驱动程序接口 257
9.3.4 ReservePortRegion 258
9.3.5 ReleasePortRegion 258
9.3.6 AppendDevice 259
9.3.7 DeleteDevice 259
9.4 PCI总线驱动程序概述 259
9.4.1 PCI总线概述 259
9.4.2 PCI设备的配置空间 260
9.4.3 配置空间关键字段的说明 262
9.4.4 PCI配置空间的读取与设置 270
9.5 PCI总线驱动程序的实现 271
9.5.1 探测PCI总线是否存在 272
9.5.2 对普通PCI设备进行枚举 272
9.5.3 配置PCI桥接设备 280
第10章 驱动程序管理框架 282
10.1 设备驱动程序管理框架 282
10.1.1 概述 282
10.1.2 设备管理器和IO管理器 283
10.1.3 Hello China的设备管理框架 291
10.1.4 I/O管理器(IOManager) 293
10.2 文件系统的实现 313
10.2.1 文件系统与文件的命名 313
10.2.2 文件系统驱动程序 314
10.2.3 打开一个文件的操作流程 315
10.3 设备驱动程序框架 316
10.3.1 设备请求控制块(DRCB) 316
10.3.2 设备驱动程序的文件组织结构 320
10.3.3 设备驱动程序的功能实现 320
10.3.4 设备驱动程序对象 323
10.3.5 DriverEntry的实现 325
10.3.6 UnloadEntry的实现 326
10.4 设备对象 326
10.4.1 设备对象的定义 326
10.4.2 设备对象的命名 327
10.4.3 设备对象的类型 328
10.4.4 设备对象的设备扩展 329
10.4.5 设备的打开操作 330
10.4.6 设备命名策略 331
10.5 设备的中断管理 332
第11章 应用编程接口与示例 334
11.1 核心线程操作接口 334
11.1.1 CreateKernelThread 334
11.1.2 DestroyKernelThread 335
11.1.4 GetMessage 337
11.1.3 SendMessage 337
11.1.5 SetKernelThreadPriority 338
11.1.6 GetKernelThreadPriority 338
11.1.7 GetKernelThreadID 339
11.2 内存操作接口 339
11.2.1 KMemAlloc 339
11.2.2 KMemFree 340
11.2.3 VirtualAlloc 340
11.2.4 VirtualFree 341
11.2.5 malloc 341
11.2.6 free 342
11.2.7 CreateHeap 342
11.3 定时器操作接口 343
11.2.10 HeapFree 343
11.2.9 HeapAlloc 343
11.2.8 DestroyHeap 343
11.3.1 SetTimer 344
11.3.2 CancelTimer 344
11.4 核心线程同步操作接口 346
11.4.1 Sleep 346
11.4.2 CreateMutex 347
11.4.3 ReleaseMutex 347
11.4.4 DestroyMutex 347
11.4.5 CreateEvent 348
11.4.6 SetEvent 348
11.4.7 ResetEvent 348
11.4.8 DestroyEvent 349
11.4.9 WaitForThisObject 349
11.4.10 WaitForThisObjectEx 350
11.5.2 DisconnectInterrupt 352
11.5.1 ConnectInterrupt 352
11.5 系统中断操作接口 352
11.6 输入/输出(IO)接口 353
11.6.1 CreateFile 354
11.6.2 ReadFile 354
11.6.3 WriteFile 355
11.6.4 IoControl 355
11.6.5 SetFilePointe 356
11.6.6 FlushFile 356
11.6.7 CloseFile 357
11.7 设备驱动程序接口 358
11.7.1 CreateDevice 358
11.7.2 DestroyDevice 359
11.8 相关辅助功能接口 360
11.8.1 StrLen 360
11.8.4 MemCpy 361
11.8.2 StrCpy 361
11.8.3 MemZero 361
11.9 PC服务接口 362
11.9.1 PrintLine 362
11.9.2 PrintChar 362
11.9.3 ChangeLine 363
11.9.4 GotoHome 363
第12章 Hello China的应用开发方法 364
12.1 Hello China的开发方法概述 364
12.2 在Hello China基础上开发一个简单应用程序 364
附录A 如何搭建一个基于Windows的操作系统开发平台 370
附录B 一种代码执行时间测量方法的实现 391
附录C 64bit整型数据类型的实现 397
附录D IOCTRL控制程序使用介绍及实例 404
附录E 如何快速掌握汇编语言 413