更新时间:2018-12-29 16:25:23
封面
版权信息
前言
第1章 搭建工作环境
1.1 选择合适的开发环境
1.1.1 准备Cygwin开发环境
1.1.2 使用Linux开发环境
1.2 开发工具的使用
1.2.1 编译器的选择和安装
1.2.2 编辑器的选择和使用
1.3 虚拟硬件的安装和使用
1.3.1 SkyEye的安装
1.3.2 SkyEye的使用
1.4 总结
第2章 基础知识
2.1 使用C语言写第一段程序
2.2 用脚本链接目标文件
2.3 用汇编语言编写程序
2.4 汇编和C的混合编程
2.4.1 过程调用标准
2.4.2 混合编程的例子
2.5 Makefile
2.6 总结
第3章 操作系统的启动
3.1 启动流程
3.1.1 ARM的启动过程
3.1.2 ARM操作系统解读
3.1.3 正式开始写操作系统
3.1.4 让启动代码运行起来
3.2 MMU
3.2.1 页表
3.2.2 页权限
3.2.3 cache和write buffer
3.2.4 激活MMU
3.3 GCC内联汇编
3.4 总结
第4章 打印函数
4.1 打印函数实例
4.1.1 变参函数是如何工作的
4.1.2 亲自实现一个可变参数函数
4.1.3 实现打印函数中的格式转换
4.2 实现自己的打印函数
4.3 总结
第5章 中断处理
5.1 ARM的中断
5.1.1 统一的异常和中断处理
5.1.2 独立的中断处理
5.2 简单的中断处理实例
5.2.1 解决异常向量表的问题
5.2.2 简单的中断处理代码
5.2.3 S3C2410中的定时器
5.2.4 让中断处理程序运行起来
5.3 复杂的中断处理实例
5.3.1 提高中断的效率
5.3.2 中断嵌套的实现
5.4 更优秀的中断嵌套方法
5.5 总结
第6章 动态内存管理
6.1 伙伴算法
6.1.1 伙伴算法的原理
6.1.2 伙伴算法的实现
6.2 slab
6.2.1 使用slab的前提条件
6.2.2 slab的组成
6.2.3 通过slab进行内存分配
6.2.4 内存空间的释放
6.2.5 slab的销毁
6.3 kmalloc函数
6.4 总结
第7章 框架
7.1 驱动程序框架
7.1.1 基于存储设备的实例
7.1.2 运行存储设备实例
7.2 文件系统框架
7.2.1 文件系统的原理
7.2.2 文件系统框架的实现
7.2.3 romfs文件系统类型
7.2.4 实现romfs文件系统
7.2.5 让代码运行起来
7.3 总结
第8章 运行用户程序
8.1 二进制程序的运行方法
8.2 可执行文件格式
8.2.1 ELF格式的组成结构
8.2.2 操作ELF格式文件的方法
8.2.3 运行ELF格式的应用程序
8.3 系统调用
8.3.1 用户和内核的运行空间
8.3.2 实现一个系统调用
8.3.3 运行系统调用程序
8.4 总结
第9章 进程
9.1 进程的实现原理
9.2 进程的实现
9.2.1 改写中断处理程序
9.2.2 抽象调度函数
9.2.3 新进程的产生
9.2.4 多个进程同时运行
9.3 总结
结束语