第1章 计算机漫谈 1
1.1日益缤彩纷呈的Raspberry 1
1.2片上系统 4
1.3一台令人激动的信用卡般大小的计算机 5
1.4 Raspberry Pi的功能 6
1.5 Raspberry Pi板 7
1.5.1 GPIO引脚 7
1.5.2状态LED 9
1.5.3 USB插口 10
1.5.4以太网连接 10
1.5.5音频输出 11
1.5.6复合视频 12
1.5.7 CSI摄像头模块连接器 13
1.5.8 HDMI 13
1.5.9 micro USB电源 14
1.5.10存储卡 14
1.5.11 DSI显示连接 15
1.5.12装配孔 15
1.5.13芯片 16
1.6未来 16
第2章 计算概述 19
2.1计算机与烹饪 20
2.1.1佐料与数据 20
2.1.2基本操作 21
2.2按计划执行的盒子 22
2.2.1执行和知晓 22
2.2.2程序就是数据 23
2.2.3存储器 24
2.2.4寄存器 25
2.2.5系统总线 26
2.2.6指令集 26
2.3电平、数字及其表示 27
2.3.1二进制:以1和0表示 27
2.3.2手指的局限性 29
2.3.3数量、编号和0 29
2.3.4用于二进制速记的十六进制 30
2.3.5执行二进制和十六进制运算 31
2.4操作系统:幕后老板 33
2.4.1操作系统的功能 33
2.4.2向内核致敬 34
2.4.3多核 34
第3章 电子存储器 35
3.1存储器先于计算机而存在 35
3.2旋转磁存储器(Rotating Magnetic Memory) 36
3.3磁芯存储器 37
3.3.1磁芯存储器的工作过程 38
3.3.2存储器访问时间 39
3.4静态随机访问存储器(SRAM) 40
3.5地址线和数据线 41
3.6由存储器芯片构建存储器系统 42
3.7动态随机访问存储器(DRAM) 45
3.7.1 DRAM的工作原理 45
3.7.2同步DRAM和异步DRAM 47
3.7.3 SDRAM列、行、Bank、Rank和DIMM 49
3.7.4 DDR、 DDR2、 DDR3和DDR4 SDRAM 50
3.7.5纠错码存储器 53
3.8 Raspberry Pi的存储器系统 54
3.8.1节能性 54
3.8.2球栅阵列封装 55
3.9缓存 55
3.9.1访问的局部性 56
3.9.2缓存层级 56
3.9.3缓存行和缓存映射 57
3.9.4直接映射 59
3.9.5相联映射 61
3.9.6组相联高速缓存 62
3.9.7回写缓存到存储器 63
3.10虚拟存储器 64
3.10.1虚拟存储器概览 64
3.10.2虚拟存储器到物理存储器的映射 65
3.10.3深入了解存储器管理单元 66
3.10.4多级页表和TLB 69
3.10.5 Raspberrry Pi的交换问题 70
3.10.6 Raspberry Pi虚拟存储器 70
第4章 ARM处理器与片上系统 73
4.1急速缩小的CPU 73
4.1.1微处理器 74
4.1.2晶体管预算 75
4.2数字逻辑基础 75
4.2.1逻辑门 75
4.2.2触发器和时序逻辑 76
4.3 CPU内部 78
4.3.1分支与标志 79
4.3.2系统栈 80
4.3.3系统时钟和执行时间 82
4.3.4流水线技术 83
4.3.5流水线技术详解 84
4.3.6深入流水线以及流水线阻塞 86
4.3.7 ARM 11中的流水线 88
4.3.8超标量执行 89
4.3.9基于SIMD的更多并行机制 90
4.3.10字节序 92
4.4 CPU再认识:CISC与RISC 93
4.4.1 RISC的历史 95
4.4.2扩展的寄存器文件 95
4.4.3加载/存储架构 96
4.4.4正交的机器指令 96
4.4.5独立的指令和数据高速缓存 97
4.5源于艾康的ARM 97
4.5.1微架构、内核及家族 98
4.5.2出售设计许可而非成品芯片 98
4.6 ARM 11 99
4.6.1 ARM指令集 99
4.6.2处理器模式 102
4.6.3模式和寄存器 103
4.6.4快速中断 107
4.6.5软件中断 108
4.6.6中断优先级 108
4.6.7条件指令执行 109
4.7协处理器 111
4.7.1 ARM协处理器接口 112
4.7.2系统控制协处理器 113
4.7.3向量浮点协处理器 113
4.7.4仿真协处理器 114
4.8 ARM Cortex 114
4.8.1多发和乱序执行 115
4.8.2 Thumb 2 115
4.8.3 Thumb EE 115
4.8.4 big.LITTLE 116
4.8.5 NEON SIMD协处理器 116
4.8.6 ARMv 8和64位计算 117
4.9片上系统 118
4.9.1博通BCM2835 SoC 118
4.9.2第二代和第三代博通SoC设备 119
4.9.3 VLSI芯片原理 119
4.9.4流程、制程工艺和掩膜 120
4.9.5 IP:单元、宏单元、内核 120
4.9.6硬IP和软IP 121
4.9.7平面规划、布局和布线 121
4.9.8片上通信的标准:AMBA 122
第5章 程序设计 125
5.1程序设计概述 125
5.1.1软件开发过程 126
5.1.2瀑布、螺旋与敏捷 128
5.1.3二进制程序设计 130
5.1.4汇编语言和助记符 131
5.1.5高级语言 132
5.1.6花样泛滥的后BASIC时代 134
5.1.7程序设计术语 135
5.2本地代码编译器的工作原理 137
5.2.1预处理 138
5.2.2词法分析 138
5.2.3语义分析 139
5.2.4生成中间代码 139
5.2.5优化 139
5.2.6生成目标代码 139
5.2.7 C编译:一个具体示例 140
5.2.8链接目标代码文件到可执行文件 145
5.3纯文本解释程序 146
5.4字节码解释语言 148
5.4.1 p-code 148
5.4.2 Java 149
5.4.3即时编译(JIT) 150
5.4.4 Java之外的字节码和JIT编译 152
5.4.5 Android、 Java和Dalvik 152
5.5数据构建块 152
5.5.1标识符、关键字、符号和操作符 153
5.5.2数值、文本和命名常量 153
5.5.3变量、表达式和赋值 154
5.5.4类型和类型定义 154
5.5.5静态和动态类型 156
5.5.6补码和IEEE 754 157
5.6代码构建块 159
5.6.1控制语句和复合语句 159
5.6.2 if/then/else 159
5.6.3 switch和case 161
5.6.4 repeat循环 162
5.6.5 while循环 163
5.6.6 for循环 164
5.6.7 break和continue语句 166
5.6.8函数 166
5.6.9局部性和作用域 168
5.7面向对象程序设计 170
5.7.1封装 172
5.7.2继承 174
5.7.3多态 176
5.7.4 OOP小结 178
5.8 GNU编译器工具集概览 178
5.8.1作为编译器和生成工具的gcc 179
5.8.2使用Linux make 181
第6章 非易失性存储器 185
6.1打孔卡和磁带 186
6.1.1打孔卡 186
6.1.2磁带数据存储器 186
6.1.3磁存储器的黎明 188
6.2磁记录和编码方案 189
6.2.1磁通跃迁 190
6.2.2垂直记录 191
6.3磁盘存储器 192
6.3.1柱面、磁轨和扇区 193
6.3.2低级格式化 194
6.3.3接口和控制器 195
6.3.4软盘驱动器 197
6.4分区和文件系统 198
6.4.1主分区和扩展分区 198
6.4.2文件系统和高级格式化 199
6.4.3未来:GUID分区表(GPT) 200
6.4.4 Raspberry Pi SD卡的分区 201
6.5光盘 202
6.5.1源自CD的格式 203
6.5.2源自DVD的格式 204
6.6虚拟硬盘 205
6.7 Flash存储器 206
6.7.1 ROM、 PROM和EPROM 206
6.7.2 Flash与EEPROM 207
6.7.3单级与多级存储 209
6.7.4 NOR Flash与NAND Flash 210
6.7.5损耗平衡及Flash转换层 213
6.7.6碎片回收和TRIM 214
6.7.7 S D卡 215
6.7.8 eMMC 216
6.7.9非易失性存储器的未来 217
第7章 有线和无线以太网 219
7.1网络互连OSI参考模型 220
7.1.1应用层 222
7.1.2表示层 222
7.1.3会话层 223
7.1.4传输层 223
7.1.5网络层 224
7.1.6数据链路层 226
7.1.7物理层 226
7.2以太网 227
7.2.1粗缆以太网和细缆以太网 227
7.2.2以太网的基本构想 227
7.2.3冲突检测和规避 228
7.2.4以太网编码系统 229
7.2.5 PAM-5编码 232
7.2.6 1 0BASE-T和双绞线 233
7.2.7从总线拓扑结构到星型拓扑结构 234
7.2.8交换以太网 235
7.3路由器和互联网 237
7.3.1名称与地址 237
7.3.2 IP地址和TCP端口 238
7.3.3本地IP地址和DHCP 240
7.3.4网络地址转换 242
7.4 Wi-Fi 243
7.4.1标准中的标准 244
7.4.2面对现实世界 245
7.4.3正在使用的Wi-Fi设备 248
7.4.4基础设施网络与Ad Hoc网络 249
7.4.5 Wi-F1分布式介质访问 250
7.4.6载波监听和隐藏结点问题 251
7.4.7分片 253
7.4.8调幅、调相和QAM 253
7.4.9扩频技术 256
7.4.10 Wi-Fi调制和编码细节 256
7.4.11 Wi-Fi连接的实现原理 259
7.4.12 Wi-Fi安全性 260
7.4.13 Raspberry Pi上的Wi-Fi 261
7.4.14更多的网络 263
第8章 操作系统 265
8.1操作系统简介 266
8.1.1操作系统的历史 267
8.1.2操作系统基础 270
8.2内核:操作系统的核心主导者 274
8.2.1操作系统控制 276
8.2.2模式 276
8.2.3存储器管理 277
8.2.4虚拟存储器 278
8.2.5多任务处理 278
8.2.6磁盘访问和文件系统 279
8.2.7设备驱动程序 279
8.3操作系统的使能器和助手 279
8.3.1唤醒操作系统 280
8.3.2固件 283
8.4 Raspberry Pi上的操作系统 283
8.4.1 NOOBS 284
8.4.2第三方操作系统 285
8.4.3其他可用的操作系统 285
第9章 视频编解码器和视频压缩 287
9.1第一个视频编解码器 288
9.1.1利用眼睛 288
9.1.2利用数据 290
9.1.3理解频率变换 293
9.1.4使用无损编码技术 297
9.2时移世易 298
9.2.1 MPEG的最新标准 299
9.2.2 H.265 302
9.3运动搜索 302
9.3.1视频质量 304
9.3.2处理能力 305
第10章 3D图形 307
10.1 3D图形简史 307
10.1.1图形用户界面(Graphical User Interface, GUI) 308
10.1.2视频游戏中的3D图形 310
10.1.3个人计算和显卡 311
10.1.4两个竞争标准 312
10.2 OpenGL图形管线 314
10.2.1几何规范和属性 315
10.2.2几何变换 317
10.2.3光照和材质 320
10.2.4图元组装和光栅化 322
10.2.5像素处理(片段着色) 324
10.2.6纹理 326
10.3现代图形硬件 328
10.3.1瓦片渲染 329
10.3.2几何拒绝 330
10.3.3着色 332
10.3.4缓存 333
10.3.5 Raspberry Pi GPU 334
10.4 Open VG 336
10.5通用GPU 338
10.5.1异构体系结构 338
10.5.2 OpenCL 339
第11章 音频 341
11.1现在能听到我的声音吗? 341
11.1.1 MIDI 342
11.1.2声卡 342
11.2模拟与数字 343
11.3声音和信号处理 344
11.3.1编辑 344
11.3.2压缩 345
11.3.3使用特效录制 345
11.3.4编码和解码通信信 346
11.4 1位DAC 347
11.5 I2S 349
11.6 Raspberry Pi声音输入/输出 350
11.6.1音频输出插孔 350
11.6.2 HDMI 350
11.7 Raspberry Pi的声音 351
11.7.1 Raspberry Pi板载声音 351
11.7.2处理Raspberry Pi的声音 351
第12章 输入/输出 359
12.1输入/输出简介 359
12.2 I/O使能器 362
12.2.1通用串行总线 363
12.2.2 USB有源集线器 365
12.2.3以太网 367
12.2.4通用异步收发器 368
12.2.5小型计算机系统接口 368
12.2.6 PATA 369
12.2.7 SATA 369
12.2.8 RS-232串口 370
12.2.9 HDMI 370
12.2.10 12S 371
12.2.11 I 2C 371
12.2.12 Raspberry Pi显示器、摄像头接口和JTAG 372
12.3 Raspberry Pi GPIO 373
12.3.1 GPIO概述以及博通SoC 373
12.3.2接触GPIO 374
12.3.3可编程GPIO 380
12.3.4可选模式 385
12.3.5 GPIO实验的简单方法 385