资源名称:深度探索嵌入式操作系统
内容简介:
相信很多同行和笔者以前一样,阅读过很多操作系统理论方面的书籍,感觉它们所讲述的理论大同小异且比较容易理解,但是真要我们自己去动手开发和实现操作系统时,我们可能连操作系统的第一行代码该怎么写都不知道。为什久会这样?
因为操作系统是硬件平台上的第—层软件,若不了解硬件平台的细节,是不能实现操作系统的,所以本书一开始就选择了一款常用的硬件平台,并对其进行了详细描述,重点介绍了硬件平台上的实时时钟、定时器、串口、中断控制器、内存芯片、flash芯片、CPU、MMU等,然后介绍操作系统架构设计和开发环境与开发工具,尤其开发工具,详细了解开发工具会大大方便后面的开发工作并解决一些困惑,最后介绍了操作系统的初始化、HAL、内存管理、中断管理、设备管理、进程管理、文件系统、系统调用接口、应用程序库。对这些组件的介绍都是先明确这个组件要完成什久功能,达到什么要求。接着详述这个组件必须要关注的硬件的细节,然后把我们的想法和设计归纳成数据结构。最后编写完成这些功能的代码。
这些内容将奠定本书田晏作系统实践领域中里程碑式的地位。
资源目录:
前言
第1章 操作系统的功能及为什么需要它1
1.1从hello world开始1
1.2 操作系统功能演进3
1.3 小结7
第2章 硬件平台8
2.1 选择平台8
2.1.1 mini24408
2.1.2 mini2440平台的信息9
2.2 必须要关注的硬件13
2.2.1 原因14
2.2.2 RTC15
2.2.3 定时器16
2.2.4 串口17
2.2.5 中断控制器18
2.2.6 SDRAM19
2.2.7 Norflash23
2.2.8 Nandflash24
2.3 小结26
第3章 处理器28
3.1 ARM公司与其处理器28
3.2 ARM920T的结构与特性29
3.2.1 ARM920T CPU结构29
3.2.2 ARM920T CPU特性32
3.3 ARM920T存储体系33
3.3.1 ARM920T地址空间33
3.3.2 ARM920T存储器格式34
3.3.3 ARM920T存储地址对齐35
3.4 ARM920T 状态35
3.4.1 ARM状态36
3.4.2 Thumb 状态36
3.5 ARM920T处理器的7种工作模式37
3.6 寄存器38
3.7 异常和中断43
3.7.1 什么是异常和中断43
3.7.2 异常中断向量46
3.8 ARM920T指令集47
3.8.1 指令及其编码格式48
3.8.2 分支跳转指令50
3.8.3 数据处理指令53
3.8.4 装载和存储指令63
3.8.5 程序状态寄存器操作指令73
3.8.6 协处理器操作指令76
3.8.7 异常中断产生指令79
3.9 MMU80
3.9.1 MMU概述80
3.9.2 为什么要有MMU82
3.9.3 ARM920T CP15协处理器85
3.9.4 MMU 页表98
3.9.5 MMU页面访问权限的控制113
3.9.6 MMU的快表TLB113
3.9.7 MMU的编程接口114
3.10 Cache115
3.10.1 ARM920T的Cache115
3.10.2 Cache的原理116
3.10.3 Cache的类型及要注意的问题117
3.10.4 ARM920T Cache的编程接口119
3.11 小结120
第4章 操作系统内核的设计与构建122
4.1 操作系统内核的设计122
4.1.1 内核要完成的功能123
4.1.2 内核的架构124
4.1.3 分离硬件的相关性126
4.1.4 我们的选择127
4.2 开发环境及相关工具129
4.2.1 Linux环境129
4.2.2 文本编辑器132
4.2.3 GCC134
4.2.4 LD136
4.2.5 make139
4.3 LMOSEM的构建系统142
4.3.1 LMOSEM的makefile142
4.3.2 LMOSEM的链接脚本147
4.4 开发板的安装150
4.5 小结154
第5章 语言间调用约定与基本数据结构156
5.1 寄存器使用约定156
5.1.1 寄存器别名157
5.1.2 参数传递与返回值157
5.2 基本数据结构159
5.2.1 C语言的基本数据结构160
5.2.2 list_h_t数据结构161
5.2.3 spinlock_t数据结构164
5.2.4 kwlst_t数据结构165
5.2.5 sem_t数据结构166
5.3 数据结构存在于内存中的形式168
5.4 C与汇编的混用170
5.5 小结174
第6章 内核初始化175
6.1 开始175
6.1.1 第一行汇编代码175
6.1.2 第一个C函数178
6.2 MMU和中断向量的初始化181
6.2.1 初始化MMU181
6.2.2 复制中断向量186
6.3 串口初始化190
6.3.1 串口硬件190
6.3.2 内核的printf196
6.4 机器数据结构201
6.4.1 设计数据结构201
6.4.2 确定一些重要数据结构与内核的地址203
6.5 初级内存管理初始化205
6.5.1 设计一些数据结构205
6.5.2 初始化mmapdsc_t结构数组209
6.5.3 建立起内存分配数据结构212
6.6 中断初始化215
6.6.1 设计一些数据结构215
6.6.2 初始中断源描述符220
6.7 初始化测试222
6.8 小结225
第7章 内存管理226
7.1 内核功能层入口226
7.2 内存管理组件的设计228
7.3 块级内存管理229
7.3.1 块级内存管理数据结构视图229
7.3.2 块级内存管理接口230
7.3.3 主分配函数232
7.3.4 分配时查找alcfrelst_t 234
7.3.5 分配时查找和操作mmapdsc_t236
7.3.6 分配代码写得对吗239
7.3.7 主释放函数240
7.3.8 释放时查找alcfrelst_t 241
7.3.9 释放时查找和操作mmapdsc_t242
7.3.10 测试块级内存管理层246
7.4 页级内存管理248
7.4.1 页级内存管理接口及调用流程248
7.4.2 相关的数据结构251
7.4.3 页级内存管理初始化254
7.4.4 分配主函数256
7.4.5 分配时查找mplhead_t257
7.4.6 分配时新建页级内存池258
7.4.7 分配时操作mplhead_t262
7.4.8 分配代码写得对吗263
7.4.9 释放主函数265
7.4.10 释放时查找mplhead_t266
7.4.11 释放时操作mplhead_t268
7.4.12 释放时删除页级内存池269
7.4.13 测试页级内存管理层271
7.5 字级内存管理273
7.5.1 字级内存接口及调用流程274
7.5.2 相关的数据结构275
7.5.3 分配主函数276
7.5.4 分配时查找mplhead_t278
7.5.5 分配时新建字级内存池279
7.5.6 分配时操作mplhead_t282
7.5.7 分配代码写得对吗283
7.5.8 释放主函数285
7.5.9 释放时查找mplhead_t285
7.5.10 释放时操作mplhead_t287
7.5.11 释放时删除字级内存池288
7.5.12 测试字级内存管理层289
7.6 小结292
第8章 中断管理293
8.1 中断与中断控制器293
8.1.1 什么是中断293
8.1.2 S3C2440A中断控制器294
8.2 中断管理的架构与相关数据结构298
8.2.1 中断管理的架构298
8.2.2 设计数据结构intfltdsc_t和intserdsc_t298
8.3 中断处理301
8.3.1 中断辅助例程301
8.3.2 从中断向量开始305
8.3.3 保存CPU上下文306
8.3.4 中断主分派例程310
8.3.5 确定中断源314
8.3.6 调用中断处理例程317
8.4 安装中断回调例程319
8.5 小结322
第9章 驱动模型323
9.1 操作系统内核如何管理设备323
9.1.1 分权而治323
9.1.2 设备类型325
9.1.3 驱动程序327
9.2 相关数据结构328
9.2.1 驱动329
9.2.2 派发例程类型329
9.2.3 设备ID330
9.2.4 设备331
9.2.5 IO包332
9.2.6 设备表333
9.3 驱动模型的基础设施335
9.3.1 驱动程序从哪里执行335
9.3.2 新建与注册设备340
9.3.3 注册回调函数344
9.3.4 发送IO包345
9.3.5 调用驱动程序函数346
9.3.6 等待服务347
9.3.7 完成服务350
9.3.8 驱动模型辅助函数352
9.4 systick驱动程序实例356
9.4.1 systick硬件356
9.4.2 systick驱动程序框架360
9.4.3 systick驱动程序实现362
9.4.4 测试systick驱动程序368
9.5 RTC驱动程序实例370
9.5.1 RTC硬件370
9.5.2 RTC驱动程序实现375
9.6 小结385
第10章 进程386
10.1 应用程序的运行386
10.1.1 程序运行需要什么资源387
10.1.2 任何时刻资源都可用吗388
10.1.3 提出多道程序模型389
10.2 相关的数据结构390
10.2.1 设计进程的数据结构391
10.2.2 调度进程表392
10.3 LMOSEM内核的第一个进程394
10.3.1 进程管理组件的初始化395
10.3.2 建立空转进程396
10.3.3 空转进程运行399
10.4 新建进程404
10.4.1 分配进程描述符404
10.4.2 分配内存空间406
10.4.3 加入进程调度表408
10.5 进程调度410
10.5.1 调度算法410
10.5.2 处理进程时间片411
10.5.3 检查调度状态414
10.5.4 选择进程415
10.5.5 进程切换418
10.5.6 进程等待与唤醒421
10.5.7 进程测试425
10.6 小结428
第11章 文件系统430
11.1 文件系统设计430
11.1.1 文件系统只是一个设备430
11.1.2 数据格式与存储块432
11.1.3 如何组织文件433
11.1.4 关于我们文件系统的限制434
11.2 相关的数据结构434
11.2.1 超级块435
11.2.2 位图435
11.2.3 目录437
11.2.4 文件管理头438
11.3 文件系统格式化440
11.3.1 建立超级块440
11.3.2 建立位图445
11.3.3 建立根目录448
11.4 文件系统基础操作452
11.4.1 获取与释放根目录文件453
11.4.2 字符串操作455
11.4.3 分解路径名457
11.4.4 检查文件是否存在459
11.5 文件操作460
11.5.1 新建文件461
11.5.2 删除文件463
11.5.3 打开文件466
11.5.4 读写文件469
11.5.5 关闭文件472
11.5.6 驱动整合473
11.6 文件系统测试475
11.6.1 格式化测试475
11.6.2 文件操作测试479
11.7 小结482
第12章 系统调用与应用程序库483
12.1 系统调用机制483
12.1.1 软中断指令484
12.1.2 传递系统调用参数486
12.1.3 系统调用分发器488
12.2 时间管理系统调用489
12.3 进程管理系统调用492
12.3.1 进程的运行与退出492
12.3.2 获取进程的ID494
12.4 内存管理系统调用496
12.5 设备与文件系统调用498
12.5.1 设备与文件的打开498
12.5.2 设备与文件的关闭506
12.5.3 设备与文件的读写508
12.5.4 设备与文件的控制512
12.6 应用程序库514
12.7 测试520
12.8 小结526
后记528
资源截图: