《嵌入式Linux应用开发完全手册》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:韦东山编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2008
  • ISBN:9787115182623
  • 页数:579 页
图书介绍:本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,进行嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及编程(囊括了常见硬件,比如UART、I2C、LCD等),U-Boot、Linux内核的分析、配置和移植,根文件系统的构造(包括移植busybox、glibc、制作映象文件等),内核调试技术(比如添加kgdb补丁、栈回溯等),驱动程序编写及移植(LED、按键、扩展串口、网卡、硬盘、SD卡、LCD和USB等),GUI系统的移植(包含两个GUI系统:基于Qtopia和基于X),应用程序调试技术。本书从最简单的点亮一个LED开始,由浅到深地讲解,使读者最终可以配置、移植、裁剪内核,编写驱动程序,移植GUI系统,掌握整个嵌入式Linux系统的开发方法。本书由浅入深,循序渐进,适合刚接触嵌入式Linux的初学者学习,也可作为大中专院校嵌入式相关专业本科生、研究生的教材。

第1篇 嵌入式Linux开发环境构建篇第1章 嵌入式Linux开发概述 2

1.1 嵌入式系统介绍 2

1.1.1 嵌入式系统的定义和特点 2

1.1.2 嵌入式技术的发展历史 3

1.2 基于ARM处理器的嵌入式Linux系统 5

1.2.1 ARM处理器介绍 5

1.2.2 在嵌入式系统中选择嵌入式Linux的理由 8

第2章 嵌入式Linux开发环境构建 10

2.1 硬件环境构建 10

2.1.1 主机与目标板结合的交叉开发模式 10

2.1.2 硬件要求 11

2.2 软件环境构建 12

2.2.1 主机Linux操作系统的安装 12

2.2.2 主机Linux操作系统上网络服务的配置与启动 18

2.2.3 在主机Linux操作系统中安装基本的开发环境 23

2.2.4 光盘的内容结构及安装 23

2.2.5 安装交叉编译工具链 25

2.2.6 书中写作风格的约定 28

第3章 嵌入式编程基础知识 29

3.1 交叉编译工具选项说明 29

3.1.1 arm-linux-gcc选项 29

3.1.2 arm-linux-ld选项 38

3.1.3 arm-linux-objcopy选项 41

3.1.4 arm-linux-objdump选项 43

3.1.5 汇编代码、机器码和存储器的关系以及数据的表示 44

3.2 Makefile介绍 45

3.2.1 Makefile规则 45

3.2.2 Makefile文件里的赋值方法 46

3.2.3 Makefile常用函数 46

3.3 常用ARM汇编指令及ATPCS规则 52

3.3.1 本书使用的所有汇编指令 52

3.3.2 ARM-THUMB子程序调用规则ATPCS 55

第4章 Windows、Linux环境下相关工具、命令的使用 58

4.1 Windows环境下的工具介绍 58

4.1.1 代码阅读、编辑工具Source Insight 58

4.1.2 文件传输工具Cuteftp 63

4.1.3 远程登录工具SecureCRT 63

4.1.4 TFTP服务器软件Tftpd32 64

4.2 Linux环境下的工具、命令介绍 65

4.2.1 代码阅读、编辑工具KScope 65

4.2.2 远程登录工具C-kermit 69

4.2.3 编辑命令vi 69

4.2.4 查找命令grep、find命令 71

4.2.5 在线手册查看命令man 72

4.2.6 其他命令:tar、diff、patch 73

第2篇 ARM9嵌入式系统基础实例篇 76

第5章 GPIO接口 76

5.1 GPIO硬件介绍 76

5.1.1 通过寄存器来操作GPIO引脚 76

5.1.2 怎样使用软件来访问硬件 77

5.2 GPIO操作实例:LED和按键 80

5.2.1 硬件设计 80

5.2.2 程序设计及代码详解 80

5.2.3 实例测试 86

第6章 存储器控制 87

6.1 使用存储控制器访问外设的原理 87

6.1.1 S3C2410/S3C2440的地址空间 87

6.1.2 存储控制器与外设的关系 89

6.1.3 存储控制器的寄存器使用方法 91

6.2 存储控制器操作实例:使用SDRAM 94

6.2.1 代码详解及程序的复制、跳转过程 94

6.2.2 实例测试 97

第7章 内存管理单元MMU 98

7.1 内存管理单元MMU介绍 98

7.1.1 S3C2410/S3C2440 MMU特性 98

7.1.2 S3C2410/S3C2440 MMU地址变换过程 99

7.1.3 内存的访问权限检查 107

7.1.4 TLB的作用 109

7.1.5 Cache的作用 110

7.1.6 S3C2410/S3C2440 MMU、TLB、Cache的控制指令 113

7.2 MMU使用实例:地址映射 113

7.2.1 程序设计 113

7.2.2 代码详解 114

7.2.3 实例测试 124

第8章 NAND Flash控制器 125

8.1 NAND Flash介绍和NAND Flash控制器使用 125

8.1.1 Flash介绍 125

8.1.2 NAND Flash的物理结构 127

8.1.3 NAND Flash访问方法 128

8.1.4 S3C2410/S3C2440 NAND Flash控制器介绍 134

8.2 NAND Flash控制器操作实例:读Flash 135

8.2.1 读NAND Flash的步骤 135

8.2.2 代码详解 137

第9章 中断体系结构 143

9.1 S3C2410/S3C2440中断体系结构 143

9.1.1 ARM体系CPU的7种工作模式 143

9.1.2 S3C2410/S3C2440中断控制器 146

9.1.3 中断控制器寄存器 149

9.2 中断控制器操作实例:外部中断 151

9.2.1 按键中断代码详解 151

9.2.2 实例测试 158

第10章 系统时钟和定时器 159

10.1 时钟体系及各类时钟部件 159

10.1.1 S3C2410/S3C2440时钟体系 159

10.1.2 PWM定时器 161

10.1.3 WATCHDOG定时器 164

10.2 MPLL和定时器操作实例 166

10.2.1 程序设计 166

10.2.2 代码详解 166

10.2.3 实例测试 170

第11章 通用异步收发器UART 171

11.1 UART原理及UART部件使用方法 171

11.1.1 UART原理说明 171

11.1.2 S3C2410/S3C2440 UART的特性 172

11.1.3 S3C2410/S3C2440 UART的使用 173

11.2 UART操作实例 177

11.2.1 代码详解 177

11.2.2 实例测试 180

第12章 I2C接口 181

12.1 I2C总线协议及硬件介绍 181

12.1.1 I2C总线协议 181

12.1.2 S3C2410/S3C2440 I2C总线控制器 184

12.2 I2C总线操作实例 187

12.2.1 I2C接口RTC芯片M41t11的操作方法 187

12.2.2 程序设计 188

12.2.3 设置/读取M41t11的源码详解 188

12.2.4 I2C实例的连接脚本 195

12.2.5 实例测试 196

第13章 LCD控制器 197

13.1 LCD和LCD控制器 197

13.1.1 LCD显示器 197

13.1.2 S3C2410/S3C2440 LCD控制器介绍 199

13.2 TFT LCD显示实例 210

13.2.1 程序设计 210

13.2.2 代码详解 210

13.2.3 实例测试 221

第14章 ADC和触摸屏接口 222

14.1 ADC和触摸屏硬件介绍及使用 222

14.1.1 S3C2410/S3C2440 ADC和触摸屏接口概述 222

14.1.2 S3C3410/S3C2440 ADC接口的使用方法 224

14.1.3 触摸屏原理及接口 226

14.2 ADC和触摸屏操作实例 230

14.2.1 硬件设计 230

14.2.2 程序设计 230

14.2.3 测试ADC的代码详解 230

14.2.4 测试触摸屏的代码详解 232

14.2.5 实例测试 237

第3篇 嵌入式Linux系统移植篇 240

第15章 移植U-Boot 240

15.1 Bootloader简介 240

15.1.1 Bootloader的概念 240

15.1.2 Bootloader的结构和启动过程 241

15.1.3 常用Bootloader介绍 246

15.2 U-Boot分析与移植 246

15.2.1 U-Boot工程简介 246

15.2.2 U-Boot源码结构 247

15.2.3 U-Boot的配置、编译、连接过程 249

15.2.4 U-Boot的启动过程源码分析 257

15.2.5 U-Boot的移植 264

15.2.6 U-Boot的常用命令 288

15.2.7 使用U-Boot来执行程序 292

第16章 移植Linux内核 293

16.1 Linux版本及特点 293

16.2 Linux移植准备 294

16.2.1 获取内核源码 294

16.2.2 内核源码结构及Makefile分析 295

16.2.3 内核的Kconfig分析 304

16.2.4 Linux内核配置选项 309

16.3 Linux内核移植 313

16.3.1 Linux内核启动过程概述 313

16.3.2 修改内核以支持S3C2410/S3C2440开发板 314

16.3.3 修改MTD分区 327

16.3.4 移植YAFFS文件系统 330

16.3.5 编译、烧写、启动内核 333

第17章 构建Linux根文件系统 335

17.1 Linux文件系统概述 335

17.1.1 Linux文件系统的特点 335

17.1.2 Linux根文件系统目录结构 336

17.1.3 Linux文件属性介绍 340

17.2 移植Busybox 341

17.2.1 Busybox概述 341

17.2.2 init进程介绍及用户程序启动过程 342

17.2.3 编译/安装Busybox 346

17.3 使用glibc库 350

17.3.1 glibc库的组成 350

17.3.2 安装glibc库&35 1

17.4 构建根文件系统 352

17.4.1 构建etc目录 352

17.4.2 构建dev目录 354

17.4.3 构建其他目录 356

17.4.4 制作/使用yaffs文件系统映象文件 356

17.4.5 制作/使用jffs2文件系统映象文件 360

第18章 Linux内核调试技术 362

18.1 内核打印函数printk 362

18.1.1 printk的使用 362

18.1.2 串口控制台 364

18.2 内核源码级别的调试方法 366

18.2.1 内核调试工具KGDB的作用与原理 366

18.2.2 给内核添加KGDB功能支持S3C2410/S3C2440 367

18.2.3 结合可视化图形前端DDD和gdb来调试内核 372

18.3 Oops信息及栈回溯 375

18.3.1 Oops信息来源及格式 375

18.3.2 配置内核使Oops信息的栈回溯信息更直观 376

18.3.3 使用Oops信息调试内核的实例 376

18.3.4 使用Oops的栈信息手工进行栈回溯 380

第4篇 嵌入式Linux设备驱动开发篇第19章 字符设备驱动程序 384

19.1 Linux驱动程序开发概述 384

19.1.1 应用程序、库、内核、驱动程序的关系 384

19.1.2 Linux驱动程序的分类和开发步骤 385

19.1.3 驱动程序的加载和卸载 387

19.2 字符设备驱动程序开发 387

19.2.1 字符设备驱动程序中重要的数据结构和函数 387

19.2.2 LED驱动程序源码分析 389

第20章 Linux异常处理体系结构 396

20.1 Linux异常处理体系结构概述 396

20.1.1 Linux异常处理的层次结构 396

20.1.2 常见的异常 400

20.2 Linux中断处理体系结构 401

20.2.1 中断处理体系结构的初始化 401

20.2.2 用户注册中断处理函数的过程 404

20.2.3 中断的处理过程 406

20.2.4 卸载中断处理函数 409

20.3 使用中断的驱动程序示例 410

20.3.1 按键驱动程序源码分析 410

20.3.2 测试程序情景分析 415

第21章 扩展串口驱动程序移植 419

21.1 串口驱动程序框架概述 419

21.1.1 串口驱动程序术语介绍 419

21.1.2 串口驱动程序的4层结构 420

21.2 扩展串口驱动程序移植 423

21.2.1 串口驱动程序低层代码分析 423

21.2.2 修改代码以支持扩展串口 425

21.2.3 测试扩展串口 429

第22章 网卡驱动程序移植 431

22.1 CS8900A网卡驱动程序移植 431

22.1.1 CS8900A网卡特性 431

22.1.2 CS8900A网卡驱动程序修改 432

22.2 DM9000网卡驱动程序移植 441

22.2.1 DM9000网卡特性 441

22.2.2 DM9000网卡驱动程序修改 442

第23章 IDE接口和SD卡驱动程序移植 450

23.1 IDE接口驱动程序移植 450

23.1.1 IDE接口相关概念介绍 450

23.1.2 IDE接口驱动程序移植 452

23.1.3 IDE接口驱动程序测试 461

23.2 SD卡驱动程序移植 464

23.2.1 SD卡相关概念介绍 464

23.2.2 SD卡驱动程序移植 465

23.2.3 SD卡驱动程序测试 472

23.2.4 磁盘分区表 473

第24章 LCD和USB驱动程序移植 475

24.1 LCD驱动程序移植 475

24.1.1 LCD和USB键盘驱动程序框架 475

24.1.2 S3C2410/S3C2440 LCD控制器驱动程序移植 479

24.2 USB驱动程序移植 489

24.2.1 USB驱动程序概述 489

24.2.2 配置内核支持USB键盘、USB鼠标和USB硬盘 491

24.2.3 USB设备的使用 492

第5篇 嵌入式Linux系统应用开发篇第25章 基于Qtopia的GUI开发 496

25.1 嵌入式GUI介绍 496

25.1.1 Linux桌面GUI系统的发展 496

25.1.2 嵌入式Linux中的几种GUI 499

25.2 Qtopia移植 501

25.2.1 主机开发环境的搭建 501

25.2.2 交叉编译、安装Qtopia 2.2.0 502

25.2.3 开发自己的Qt GUI程序 514

25.2.4 在主机上使用模拟软件开发、调试嵌入式Qt GUI程序 518

第26章 基于X的GUI开发 524

26.1 X Window概述 524

26.1.1 X协议介绍 524

26.1.2 窗口管理器(Window manager) 526

26.1.3 桌面环境(Desktop environment) 526

26.2 交叉编译工具包Scratchbox 526

26.2.1 Scratchbox介绍 527

26.2.2 安装Scratchbox及编译工具 528

26.2.3 在Scratchbox里安装交叉编译工具链 529

26.2.4 安装其他开发工具 535

26.3 移植X 536

26.3.1 编译软件的基本知识 536

26.3.2 编译X的依赖软件 539

26.3.3 编译Xorg 542

26.4 移植Matchbox 547

26.4.1 下载源代码 548

26.4.2 编译Matchbox 548

26.4.3 运行、试验Matchbox 550

26.5 移植GTK+ 553

26.5.1 GTK+介绍 553

26.5.2 GTK+移植 553

26.6 移植基于GTK+/X的GUI程序 555

26.6.1 xterm移植 556

26.6.2 gtkboard移植 557

26.6.3 裁剪文件系统 560

第27章 Linux应用程序调试技术 564

27.1 使用strace工具跟踪系统调用和信号 564

27.1.1 strace介绍及移植 564

27.1.2 使用strace来调试程序 565

27.2 内存调试工具 568

27.2.1 使用memwatch进行内存调试 568

27.2.2 其他内存工具介绍:mtrace、dmalloc、yamd 571

27.3 段错误的调试方法 573

27.3.1 使用库函数backtrace和backtrace_symbols定位段错误 573

27.3.2 段错误调试实例 574

参考文献 578