《从ARM9到Linux系统设计与开发直通车》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:赵健雄编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2014
  • ISBN:9787121238390
  • 页数:572 页
图书介绍:本书由浅入深、全面、系统地介绍了ARM技术与嵌入式Linux的系统设计与开发。全书共18章,讲解了ARM微处理器的片上资源、ARM的指令集、Windows的最常用的嵌入式集成开发环境ADS、上位机嵌入式系统的构建、Boot—Loader的介绍和使用、对Linux内核的移植、嵌入式文件系统移植、Linux的多任务程序开发、设备的驱动开发等内容。书中的每章都提供了大量有针对性的实例,对每个知识点也给出了较详细的解释。

第1篇 ARM微处理器讲解 1

第1章 走进嵌入式系统世界 1

1.1 认识嵌入式系统 1

1.1.1 嵌入式硬件系统的发展进程 2

1.1.2 嵌入式系统的发展趋势 3

1.1.3 嵌入式系统的主要特征 4

1.2 嵌入式处理器的简单概述 6

1.2.1 嵌入式微处理器简介 6

1.2.2 嵌入式微控制器简介 7

1.2.3 数字信号处理器(DSP)简介 7

1.2.4 嵌入式片上系统(SoC)简介 8

1.3 嵌入式软件系统的简单概述 9

1.3.1 嵌入式软件系统简介 9

1.3.2 嵌入式软件开发简介 10

1.4 嵌入式目标平台的介绍 11

1.4.1 嵌入式硬件平台简介 11

1.4.2 如何构建嵌入式系统开发平台 12

1.4.3 如何向嵌入式硬件平台上烧写映像 14

1.5 本章小结 17

第2章 ARM体系微处理器的基本概念 18

2.1 ARM体系微处理器简介 18

2.2 ARM体系微处理器的类型 18

2.3 实际项目中对ARM微处理器的选择 21

2.3.1 ARM微处理器应用方案的成熟度考虑 21

2.3.2 ARM内核的选择 21

2.3.3 ARM微处理器的性能考虑 22

2.3.4 ARM微处理器的片内资源考虑 22

2.4 ARM微处理器的工作体系 22

2.4.1 工作模式介绍 23

2.4.2 寄存器体系 23

2.4.3 指令体系 24

2.5 ARM微处理器的基础架构介绍 24

2.5.1 计算机体系结构的介绍 25

2.5.2 ARM微处理器的技术特征 26

2.6 本章小结 29

第3章 S3C2410的内部结构及外围电路 30

3.1 S3C2410整体资源简介 30

3.1.1 性能介绍 30

3.1.2 资源模块介绍 31

3.1.3 内部结构 31

3.1.4 五大体系结构 34

3.1.5 存储系统 34

3.2 S3C2410内部资源功能介绍 38

3.2.1 时钟与电源管理 38

3.2.2 中断控制器 41

3.2.3 LCD控制器 42

3.2.4 Nand Flash控制器 43

3.2.5 UART控制器 44

3.2.6 DMA控制器 44

3.2.7 TIMER控制器 44

3.2.8 I/O接口 45

3.2.9 RTC控制器 46

3.2.10 触摸控制器 46

3.2.11 IIC控制器 47

3.2.12 IIS控制器 47

3.2.13 看门狗定时器 47

3.2.14 USB控制器 47

3.2.15 SPI接口 48

3.2.16 SD接口 48

3.2.17 ADC控制器 49

3.3 S3C2410微处理器的外围电路设计 49

3.3.1 时钟电路 50

3.3.2 复位电路 50

3.3.3 启动电路 51

3.3.4 电源电路 51

3.3.5 Flash电路 52

3.3.6 SDRAM电路 54

3.3.7 UART电路 57

3.3.8 IrDA电路 58

3.3.9 USB电路 58

3.3.10 以太网电路 59

3.3.11 音频电路 61

3.3.12 SD/MMC电路 62

3.3.13 LCD电路 62

3.4 本章小结 63

第4章 ARM微处理器的寻址方式及指令集 64

4.1 ARM指令集概述及寻址方式 64

4.1.1 指令结构简介 64

4.1.2 指令分类 65

4.1.3 指令格式与条件域 66

4.1.4 寻址方式 67

4.2 ARM微处理器的指令集 73

4.2.1 跳转指令 73

4.2.2 数据处理指令 74

4.2.3 乘法指令与乘加指令 79

4.2.4 程序状态寄存器访问指令 81

4.2.5 加载/存储指令 82

4.2.6 批量数据加载/存储指令 84

4.2.7 数据交换指令 85

4.2.8 移位指令 86

4.2.9 协处理器指令 87

4.2.1 0异常产生指令 89

4.3 本章小结 90

第5章 ADS集成开发环境的应用基础 91

5.1 ADS1.2 集成开发环境简介 91

5.1.1 ADS软件中的ARM运行时库 92

5.1.2 CodeWarrior集成开发环境介绍 93

5.1.3 ADS集成开发软件的调试器介绍 94

5.1.4 ADS集成开发环境中的实用工具 94

5.2 ADS软件的命令行下的开发方式 95

5.2.1 ADS软件中的命令行工具介绍 95

5.2.2 编译器与链接器的使用 97

5.3 ADS软件的图形界面下的开发方式 100

5.3.1 如何创建ADS工程 100

5.3.2 工程源代码的编写实现 104

5.3.3 对工程进行编译和链接操作 106

5.4 使用AXD调试工具进行代码调试 110

5.4.1 AXD软件加载可执行文件 110

5.4.2 AXD软件中运行映像文件 110

5.4.3 代码调试时添加断点 110

5.4.4 代码调试时的存储器操作 111

5.4.5 代码调试时的寄存器操作 111

5.4.6 代码调试时的变量操作 112

5.5 本章小结 112

第6章 基于ADS平台的实验开发 113

6.1 汇编之LED灯实验 113

6.2 Hello World之串口实验 115

6.2.1 S3C2410的UART介绍 115

6.2.2 UART的数据发送操作 115

6.2.3 UART的数据接收操作 115

6.2.4 UART的波特率发生器 116

6.2.5 UART与PC通信编程实现 116

6.3 外部中断编程操作 118

6.3.1 中断响应过程和返回过程 118

6.3.2 外部中断编程实现 118

6.4 看门狗测试代码的编写 120

6.4.1 看门狗的工作原理 120

6.4.2 S3C2410微处理器的看门狗 121

6.4.3 S3C2410微处理器的看门狗编程实现 121

6.5 利用定时器产生PWM编程实验 123

6.6 S3C2410微处理器的启动代码实验 124

6.7 S3C2410微处理器的RTC编程实验 134

6.7.1 RTC的简单介绍 134

6.7.2 RTC的相关功能 134

6.7.3 RTC编程实现 135

6.8 S3C2410微处理器的IIC总线实验 136

6.8.1 IIC总线实现原理 137

6.8.2 IIC总线编程实现 137

6.9 Nor Flash驱动编程实现 140

6.9.1 SST39VF160的操作原理 141

6.9.2 SST39VF160编程实现 143

6.10 Nand Flash驱动编程实现 145

6.10.1 K9F1208UU0M的指令 145

6.10.2 K9F1208UU0M的工作原理 145

6.10.3 Nand Flash编程实现 146

6.11 本章小结 149

第2篇 嵌入式Linux系统讲解 150

第7章 嵌入式操作系统的整体介绍 150

7.1 嵌入式操作系统简介 150

7.1.1 嵌入式操作系统的发展阶段 150

7.1.2 嵌入式操作系统的优势 151

7.1.3 嵌入式操作系统的分类 151

7.2 常见的嵌入式操作系统 152

7.2.1 VxWorks嵌入式操作系统 152

7.2.2 pSOS嵌入式操作系统 153

7.2.3 Palm OS嵌入式操作系统 153

7.2.4 QNX嵌入式操作系统 154

7.2.5 Windows CE嵌入式操作系统 154

7.2.6 uC/OS-Ⅱ嵌入式操作系统 155

7.2.7 Linux嵌入式操作系统 155

7.3 嵌入式操作系统的结构 157

7.4 嵌入式操作系统的功能 158

7.4.1 进程管理功能 158

7.4.2 内存管理功能 160

7.4.3 文件管理功能 162

7.4.4 设备管理功能 163

7.5 本章小结 164

第8章 走进Linux操作系统 165

8.1 Ubuntu操作系统的安装 165

8.1.1 Ubuntu系统的简介 165

8.1.2 虚拟机向导的配置 165

8.1.3 Ubuntu系统的安装 169

8.2 Ubuntu操作系统的相关操作命令 172

8.2.1 Ubuntu系统的root用户 172

8.2.2 Ubuntu系统的常用命令 173

8.3 本章小结 203

第9章 在Linux系统中构建交叉开发环境 204

9.1 交叉开发环境简介 204

9.1.1 交叉开发环境模型 204

9.1.2 上位机与下位机的连接方式 205

9.2 交叉开发环境的搭建 207

9.2.1 Linux系统的网络配置 207

9.2.2 关于apt-get工具软件的介绍 209

9.2.3 Minicom的安装与配置 209

9.2.4 FTP服务的安装、配置与启动 213

9.2.5 SSH服务的安装、配置与启动 213

9.2.6 NFS服务的安装、配置与启动 214

9.2.7 交叉工具链的安装与配置 215

9.3 Windows系统的实用软件介绍 220

9.3.1 远程登录Linux系统工具SecureCRT 220

9.3.2 Windows与Linux之间的文件传输软件CuteFTP 222

9.3.3 Windows系统的代码阅读/编辑工具SI 223

9.3.4 Windows系统的TFTP服务器软件TFTP32 226

9.3.5 Windows系统的DNW软件 226

9.4 Linux系统的实用软件介绍 228

9.4.1 VI编辑器 228

9.4.2 gedit编辑器 230

9.4.3 Eclipse软件的安装 230

9.4.4 Eclipse CDT开发C程序 232

9.5 本章小结 234

第10章 Linux系统的裸机程序开发 235

10.1 Linux系统的裸机程序开发简介 235

10.1.1 代码的编译方式 235

10.1.2 make工程管理器简介 235

10.2 Linux系统的编译器 236

10.2.1 gcc与arm-linux-gcc简介 236

10.2.2 gcc工具的实例操作 237

10.2.3 gcc工具的编译细节分析 240

10.2.4 arm-linux-gcc及相关工具的应用 241

10.3 Makefile工程文件的应用 246

10.3.1 Makefile文件的简单介绍 246

10.3.2 如何编写Makefile文件 247

10.3.3 如何执行Makefile文件 250

10.4 Linux系统的裸机程序开发示例 251

10.5 本章小结 257

第11章 Bootloader的移植 258

11.1 Bootloader的简单介绍 258

11.1.1 Bootloader的认识 258

11.1.2 Bootloader的通信方式 259

11.1.3 Bootloader的结构介绍 259

11.1.4 常见的Bootloader 267

11.2 利用Vivi进行Linux引导 267

11.2.1 Vivi的结构介绍 268

11.2.2 Vivi的工作流程 269

11.2.3 Vivi的移植操作 280

11.2.4 Vivi的常用操作命令 284

11.3 U-Boot源代码分析与移植操作 286

11.3.1 U-Boot的特性介绍 286

11.3.2 U-Boot的源代码结构分析 287

11.3.3 U-Boot的启动过程 288

11.3.4 U-Boot的移植 295

11.3.5 U-Boot的编译操作 308

11.3.6 U-Boot的命令操作 312

11.4 本章小结 315

第12章 Linux内核的裁剪与移植 316

12.1 Linux内核的版本号与内核结构 316

12.1.1 Linux内核的版本号 316

12.1.2 Linux内核结构 317

12.2 Linux2.6 内核的特点 318

12.3 Linux2.6 内核的源代码结构 318

12.3.1 Linux源代码的准备工作 319

12.3.2 Linux源代码结构的分析 319

12.3.3 Linux源代码中的Makefile文件 320

12.4 Linux2.6 内核的移植 328

12.4.1 Linux内核的启动过程 329

12.4.2 Linux内核启动代码的分析 330

12.4.3 Linux内核源代码的修改 342

12.4.4 Linux内核的配置 346

12.4.5 Linux内核的编译、烧写与启动 357

12.5 YAFFS文件系统的移植 358

12.6 本章小结 361

第13章 Linux内核调试技术的实现 362

13.1 内核态下的打印函数printk() 362

13.1.1 printk()函数的简介及使用方法 362

13.1.2 printk()函数的源代码分析 364

13.1.3 控制台的相关源代码分析 367

13.1.4 命令行参数 368

13.2 利用printk()打印信息调试内核 369

13.3 利用Linux的/proc文件系统调试内核 371

13.4 利用Oops消息调试内核 375

13.4.1 Oops消息的内容 375

13.4.2 栈回溯信息的直观显示 376

13.4.3 对Linux内核进行调试 377

13.4.4 Oops消息中的栈信息分析 380

13.5 利用KGDB远程调试内核 382

13.5.1 KGDB的介绍 382

13.5.2 向内核中增加KGDB调试器 384

13.5.3 在开发机上利用DDD与GDB调试内核 388

13.6 本章小结 391

第14章 Linux系统的文件系统 392

14.1 Nand/NorFlash存储设备 392

14.1.1 Nand Flash存储设备 392

14.1.2 Nor Flash存储设备 394

14.1.3 Nand Flash和NorFlash的区别 394

14.1.4 MTD技术简介 395

14.2 Linux系统的文件系统概述及分类 395

14.2.1 文件系统概述 396

14.2.2 文件系统分类 396

14.3 Linux系统的根文件系统 406

14.3.1 根文件系统的目录结构概述 406

14.3.2 文件属性分析 411

14.4 Busybox的移植操作 413

14.4.1 Busybox的简单概述 413

14.4.2 内核和Busybox的init进程 413

14.4.3 Busybox的配置 417

14.4.4 Busybox的编译与安装 422

14.5 构建Linux系统的根文件系统 422

14.5.1 glibc库文件的安装 423

14.5.2 完善根文件系统的构建 423

14.5.3 根文件系统其他目录的构建 426

14.5.4 YAFFS文件系统的制作 426

14.5.5 JFFS2文件系统的制作 430

14.6 本章小结 431

第15章 Linux系统的系统管理 432

15.1 存储系统管理 432

15.1.1 进程的虚拟内存空间 432

15.1.2 虚拟内存空间的映射与地址转换实现 434

15.1.3 虚拟内存空间的管理方式与Zone区域 435

15.1.4 分配/回收内存页面与slab分配器 438

15.1.5 申请/释放虚拟内存 438

15.2 中断与系统调用 439

15.2.1 中断与系统调用概述 440

15.2.2 tasklet机制的介绍 441

15.2.3 系统调用机制的实现 447

15.2.4 fork()系统调用介绍 449

15.3 文件系统管理 451

15.3.1 文件与目录简单概述 452

15.3.2 虚拟文件系统 453

15.3.3 VFS的4个主要数据结构 454

15.4 设备管理 463

15.4.1 设备与设备的管理功能 463

15.4.2 I/O设备管理 464

15.5 本章小结 470

第16章 Linux系统的Shell编程实现 471

16.1 Linux系统的Shell编程规则简介 471

16.2 Linux系统的Shell编程 472

16.2.1 Shell程序中的变量赋值和引用 472

16.2.2 Shell程序中的键盘输入实现 474

16.2.3 使用VI编辑器编写Shell脚本 476

16.2.4 如何修改脚本文件的访问权限 477

16.2.5 Shell脚本程序的执行方式 477

16.3 Shell脚本程序中的参数及函数 478

16.3.1 位置参数 478

16.3.2 内部参数 479

16.3.3 特殊符号 480

16.3.4 帮助命令 481

16.4 Shell脚本程序中的表达式 482

16.4.1 字符串操作符 483

16.4.2 数字的比较 484

16.4.3 逻辑操作符 484

16.4.4 文件操作符 485

16.5 Shell脚本程序中的循环结构 486

16.5.1 for循环语句的使用 486

16.5.2 while循环语句的使用 487

16.5.3 until循环语句的使用 488

16.6 Shell脚本程序中的条件结构 488

16.6.1 if条件语句的使用 488

16.6.2 case条件语句的使用 489

16.7 Shell程序中函数与脚本的调用 490

16.7.1 函数的编写与调用 490

16.7.2 脚本的调用 491

16.8 本章小结 491

第3篇 Linux系统实验 492

第17章 Linux系统的设备驱动开发基础 492

17.1 Linux系统的驱动程序概述 492

17.1.1 驱动程序的调用关系 492

17.1.2 驱动程序的分类及作用 493

17.1.3 硬件设备的识别与驱动代码的开发流程 494

17.1.4 硬件设备的控制方式 495

17.2 Linux系统的硬件设备驱动开发流程及示例 495

17.2.1 构建一个简单的驱动代码模块 495

17.2.2 虚拟字符设备驱动的测试 498

17.2.3 LED驱动开发 504

17.3 Linux系统的硬件设备驱动开发相关技术 510

17.3.1 并发控制原理 510

17.3.2 并发控制的相关函数 510

17.3.3 并发控制示例 513

17.3.4 设备驱动程序中的阻塞与非阻塞 516

17.3.5 设备驱动程序中的poll函数应用 520

17.3.6 设备驱动程序中的中断处理应用 522

17.3.7 设备驱动程序中关于内存与I/O操作的应用 524

17.4 Linux系统的块设备的驱动程序编写 529

17.4.1 块设备的I/O操作 529

17.4.2 与块设备相关的结构体及函数 530

17.4.3 块设备驱动代码编写的相关技术 535

17.5 本章小结 541

第18章 Linux系统的硬件设备驱动编写实验 542

18.1 按键设备的驱动开发 542

18.2 虚拟块设备的驱动开发 550

18.3 网口设备的驱动开发 560

18.4 LCD设备的驱动开发 565

18.5 SD卡设备的驱动开发 568

18.6 USB设备的驱动开发 570

18.7 本章小结 572