本书分为两大部分,由8章组成。第1章至第4章是第一部分,第1章概括了Linux系统的现状;第2、3章重点描述了PowerPC的一些基础知识,包括PowerPC的指令集、寄存器和内存体系结构;第4章讲述了一款PowerPC处理器实例。第一部分的内容是学习第二部分内容的基础。第二部分由第5章至第8章组成,第5章至第7章讲述了Linux PowerPC的三大模块,进程管理与调度、中断与异常的处理及内存管理机制;第8章介绍LinuxPowerPC的初始化。第二部分内容互相交织,可能读者在通读本书后,才能够理解这些内容。本书的有些内容与具体实现细节相关,而且这些细节并没有完全在本书中讲述清楚,这要求读者必须对照Linux源代码,深入了解这些细节。
本书分8章,第1章讲述Linux PowerPC的组成;第2~4章讲述了有关,Power-PC处理器的基础知识,包括指令集、寄存器、内存体系结构等;第5~8章讲述Linux系统在Power-PC处理器中的运行,包括进程调度、中断处理、内存管理和初始化。
本书奉献给所有热爱Linux及PowerPC处理器的读者。
前言
第1章 什么是嵌入式Linux
1.1 嵌入式Linux概述
1.2 什么是Linux BSP
1.3 Linux系统的相关标准
1.3.1 GPL与LGPL
1.3.2 有关Linux系统的规范
1.4 Linux系统的主要发布版本
1.5 Linux系统的组成
1.6 什么是Linux PowerPC
第2章 PowerPC处理器的指令集与
寄存器
2.1 PowerPC处理器概述
2.2 E500内核的寄存器
2.2.1 URL寄存器组
2.2.2 SLR寄存器组
2.3 E500内核的常用指令集
2.3.1 I-Form类指令
2.3.2 B-Form类指令
2.3.3 SC-Form,D-Form与DS-Form
类指令
2.3.4 X-Form类指令
2.3.5 XL-Form类指令
2.3.6 XFX一Form,XFL-Form,XS-Form,
XO-Form与A-Form类指令
2.3.7 M-Form类指令
2.4 E500内核的ABI
2.4.1 E500内核使用的数据类型
2.4.2 E500内核寄存器的使用
2.4.3 E500内核的栈帧结构
2.5 PowerPC处理器的指令执行
2.5.1 指令预取
2.5.2 指令译码与发射单元
2.5.3 指令执行单元
2.6 E500内核的乱序执行
2.6.1 指令乱序执行的例子
2.6.2 指令的相关性
2.6.3 寄存器重命名机制
第3章 PowerPC处理器的内存体系
结构
3.1 Pc)werPC处理器的MMU
3.1.1 E500 V1 内核的虚实地址转换
3.1.2 L1 MMIJ和L2 MMU中的Entry
3.1.3 与MMIJ管理相关的寄存器
3.1.4 与MMIJ管理相关的指令
3.1.5 E500内核的TLBl
3.1.6 E500内核的TU30
3.2 E500内核的Cache的组成
3.2.1 L1 Cache的结构
3.2.2 L1 Cache的替换算法
3.2.3 L1 Cache的状态位与L1 Cache的
一致性
3.2.4 与L1 Cache管理有关的
寄存器
3.2.5 与L1 Cache管理有关的指令
3.3 E500内核的存储器一致与
同步
3.3.1 弱序存储结构的存储器分类
3.3.2 弱序存储器访问机制
3.3.3 PowerPC处理器的存储器访问
一致性
3.4 CCB总线的设计
3.4.1 CCB总线访问周期
3.4.2 ccB总线的主要数据信号线
3.4.3 CCB总线操作
第4章 基于E500内核的PowerPC
处理器
4.1 基于E500内核的处理器
4.1.1 PowerQUICC III处理器的
CPM
4.1.2 PowerQlJICC III处理器中存储器
映射的寄存器
4.1.3 L2 Cache
4.2 基于E500内核的多处理器
4.2.1 SMP的同步机制
4.2.2 SMP结构处理器的Cache共享
一致性
4.3 大端与小端
4.3.1 从软件的角度理解端模式
4.3.2 从系统的角度理解端模式
第5章 Linux PowerPC的进程管理与
调度
5.1 Linux系统的进程描述符
5.1.1 与进程管理相关的属性
5.1.2 与进程调度有关的属性
5.1.3 进程描述符的其他属性
5.2 Linux系统中的核心进程与普通
进程
5.2.1 核心进程
5.2.2 普通进程
5.3 Linux系统中进程的状态
转换
5.3.1 进程的创建
5.3.2 进程的结束
5.3.3 进程的等待
5.4 进程的调度
5.4.1 进程运行队列
5.4.2 系统时钟异常
5.4.3 Schedule函数
第6章 Linux PowerPC的外部中断
处理系统
6.1 MPC8541处理器的
中断系统
6.1.1 E500内核的中断向量
6.1.2 外部中断处理机制
6.1.3 外部中断的嵌套
6.1.4 MPC8541 的外部中断
6.1.5 MPC8541 中断控制器PIC的
寄存器
6.1.6 MPC8541 的外部中断处理
过程
6.2 MPIC中断处理程序
6.2.MPIC中断处理程序使用的主要
数据结构
6.2.2 MPIC中断处理程序使用的主要
变量与操作函数
6.2.3 使用MPIC中断控制程序对中断
系统初始化
6.3 设备驱动程序与外部中断处理
系统的挂接
6.3.1 外部中断描述符表irq_dese
6.3.2 软硬件中断号的映射
6.3 request irq函数
6.4 Linux PowerPC对外部中断的
处理
6.4.1 宏NORMAL_EXCEPTION_
PROLOG
6.4.2 宏EXC_XFIER_LITE
6.4.3 do IRQ函数
6.4.4 软件中断的处理
6.4.5 工作队列Work Queue
6.5 外部中断的返回
6.5.1 被中断进程运行在核心空间
6.5.2 被中断进程运行在用户空间
6.6 Linux PPC中的OpenPIC中断
处理程序
6.6.1 OpenPIC中断处理程序的主要
数据结构
6.6.2 OpenPIC中断处理程序的主要
变量与操作函数
6.7 Linux PowerPC的系统调用
6.7.1 应用程序如何进入系统调用
6.7.2 Linux PowerPC的系统调用
异常
第7章 Linux PowerPC的内存管理
7.1 Linux PowerPC的虚实地址的
转换
7.1.1 使用TLB1 进行段式映射
7.1.2 使用TLBO进行页式映射
7.2 Linux PowerPC的核心空间
7.2.1 Linux PowerPC 代存储节点的数据
结构
7.2.2 Linux PowerPC核心空间的
初始化
7.2.3 Linux PowerPC核心空间内存的
分配与释放
7.2.4 Boot Memory分配器
7.3 Slab分配器
7.3.1 Slab分配器的主要数据结构
7.3.2 Cache的管理
7.3.3 Slab的管理
7.3.4 数据对象的管理
7.4 VM空间
7.5 HIMEM
7.6 进程地址空间
7.6.1 进程的内存描述符
7.6.2 与进程地址空间有关的系统
调用
7.6.3 用户进程地址空间与L,inux内核
之间的数据交换
7.7 DSI/ISI异常在Linux PowerPC
中的处理
7.7.1 LinuxPowerPC对DSI异常的
处理
7.7.2 data_access函数
第8章 Linux PowerPC的初始化
8.1 open Firmware
8.1.1 dtb的数据结构
8.1.2 Open Firmware的API函数
8.2 Linux PowerPC的一次引导
8.2.1 MMU的重新初始化
8.2.2 中断向量的初始化
8.2.3 初始化进程0
8.2.4 early_init函数
8.2.5 machine_init函数
8.2.6 MMU_init函数
8.3 Linux内核的二次引导
8.3.1 start_kemel函数
8.3.2 核心进程init
参考文献