《数据零基础学嵌入式Linux C编程》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:陈立伟,王桐,杨蕾等编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2010
  • ISBN:9787111307181
  • 页数:426 页
图书介绍:本书主要内容包括20章:嵌入式系统基础知识、Linux环境下 C语言的开发、构建嵌入式Linux系统、Linux下C编程基础、数据、运算符和表达式、数据的输入和输出、基本语句、数组、函数、动态内存的堆与栈、指针与回调函数的使用、嵌入式LinuxC语言嵌入汇编语言与移植性问题、Linux环境下GUI开发、嵌入式Linux设备驱动开发、文件操作、进程控制、线程控制、嵌入式网络防御体系设计实例、ARM Linux 的图像采集与传输实例、ARM Linux 指纹识别实例等。

第一篇 开发基础 1

第1章 嵌入式系统基础知识 1

1.1 嵌入式系统概述 1

1.1.1 嵌入式系统的定义 1

1.1.2 嵌入式系统的特点 1

1.1.3 嵌入式系统的发展历史 3

1.1.4 嵌入式系统的应用领域 5

1.1.5 嵌入式系统与PC之间的区别 6

1.2 嵌入式系统的组成 7

1.3 典型的嵌入式操作系统 10

1.4 ARM处理器平台介绍 11

1.5 嵌入式系统开发 14

1.6 嵌入式Linux软件设计 16

1.6.1 嵌入式Linux软件需求分析 16

1.6.2 嵌入式Linux软件架构设计 17

1.7 实践拓展 18

1.8 思考与练习 18

第2章 Linux环境下C语言的开发 19

2.1 C语言简单回顾 19

2.2 Linux下的C语言开发环境 20

2.3 嵌入式Linux C语言的开发 21

2.4 Linux系统 22

2.4.1 Linux的安装、启动与关闭 25

2.4.2 Linux的基本使用 25

2.4.3 Linux的常用命令 27

2.5 嵌入式Linux中程序的运行原理 34

2.6 实践拓展 35

2.7 思考与练习 36

第3章 构建嵌入式Linux开发环境 37

3.1 嵌入式系统开发环境的构建 37

3.2 移植U-Boot 40

3.2.1 BootLoader概述 40

3.2.2 U-Boot分析与移植 48

3.3 嵌入式Linux操作系统内核编译 51

3.3.1 内核的配置 51

3.3.2 内核编译的过程 52

3.4 内核的移植 52

3.5 实践拓展 53

3.6 思考与练习 54

第二篇 基础编程 55

第4章 Linux下C编程基础 55

4.1 嵌入式Linux C语言编程概述 55

4.2 嵌入式Linux编辑器Vi 56

4.2.1 Vi的基本模式 56

4.2.2 Vi的基本操作 57

4.2.3 Vi的使用实例分析 59

4.3 嵌入式Linux编译器GCC 60

4.3.1 GCC编译流程分析 60

4.3.2 GCC编译选项分析 63

4.3.3 GCC使用的库函数 67

4.4 嵌入式Linux调试器GDB的使用 70

4.4.1 GDB使用实例 70

4.4.2 GDB的帮助命令 74

4.4.3 设置/删除断点 75

4.4.4 数据相关命令 76

4.4.5 调试运行环境相关命令 76

4.4.6 堆栈相关命令 77

4.5 make工程管理器 77

4.5.1 Makefile文件的构成 78

4.5.2 Makefile变量 79

4.5.3 make的使用 81

4.6 Emacs综合编辑器 81

4.6.1 Emacs的启动与退出 81

4.6.2 Emacs的基本编辑 82

4.6.3 Emacs的C模式 83

4.6.4 Emacs的Shell模式 84

4.7 实践拓展 84

4.8 思考与练习 85

第5章 数据、运算符和表达式 86

5.1 C程序的结构和语法规则 86

5.2 C程序语句概述 88

5.3 基本概念 89

5.3.1 标识符 89

5.3.2 关键字 89

5.3.3 常量 90

5.3.4 变量 90

5.4 基本数据类型 90

5.4.1 整型变量及其常量 90

5.4.2 浮点型变量及其常量 91

5.4.3 字符型变量及其常量 92

5.4.4 长整型、短整型和无符号整型 94

5.4.5 类型定义typedef 95

5.5 算术运算符、赋值运算符及其表达式 95

5.5.1 算术运算符和算术表达式 96

5.5.2 赋值运算符和赋值表达式 99

5.6 关系运算符、逻辑运算符及其表达式 100

5.6.1 关系运算符和关系表达式 100

5.6.2 逻辑运算符和逻辑表达式 101

5.7 逗号运算符和逗号表达式 102

5.8 变量的初始化 103

5.9 不同类型数据之间的转换 103

5.9.1 自动类型转换 103

5.9.2 强制类型转换 104

5.10 实践拓展 104

5.11 思考与练习 105

第6章 数据的输入和输出 106

6.1 数据的输出 106

6.1.1 字符输出函数putchar() 106

6.1.2 格式输出函数printf() 107

6.2 数据的输入 112

6.2.1 字符输入函数getchar() 112

6.2.2 格式输入函数scanf() 113

6.3 实践拓展 116

6.4 思考与练习 117

第7章 基本语句 118

7.1 结构化程序设计概述 118

7.2 语句和复合语句 119

7.3 条件语句 119

7.3.1 if语句 119

7.3.2 条件运算符 124

7.3.3 switch语句 125

7.4 循环控制 126

7.4.1 while循环语句 126

7.4.2 do-while循环语句 127

7.4.3 for循环语句 128

7.4.4 goto语句 130

7.4.5 break语句和continue语句 131

7.5 实践拓展 134

7.6 思考与练习 134

第8章 数组 136

8.1 一维数组 136

8.1.1 一维数组的定义和引用 136

8.1.2 一维数组元素的初始化 138

8.2 二维数组 140

8.2.1 二维数组的定义和引用 140

8.2.2 二维数组元素的初始化 142

8.3 字符数组和字符串 144

8.3.1 字符数组 144

8.3.2 字符串和字符串结束标志 146

8.3.3 字符串处理函数 147

8.4 实践拓展 150

8.5 思考与练习 151

第9章 函数、编译预处理 152

9.1 函数的概念 152

9.2 函数的定义和调用 153

9.2.1 函数的定义 154

9.2.2 函数的调用 155

9.3 函数的返回值 155

9.4 函数的参数及其传递方式 159

9.4.1 非数组作为函数参数 159

9.4.2 数组作为函数参数 160

9.5 函数的嵌套调用和递归调用 162

9.5.1 函数的嵌套调用 162

9.5.2 函数的递归调用 163

9.6 变量的作用域及其存储类型 164

9.6.1 局部变量及其存储类型 164

9.6.2 全局变量及其存储类型 166

9.7 内部函数和外部函数 166

9.8 编译预处理 167

9.8.1 宏定义 167

9.8.2 文件包含处理 169

9.8.3 条件编译 171

9.9 实践拓展 172

9.10 思考与练习 173

第10章 动态内存的堆与栈 174

10.1 程序内存区域的使用 174

10.1.1 C语言程序的存储区域 174

10.1.2 C语言中的动态内存 176

10.2 C程序中栈的应用 177

10.3 C程序中堆空间的使用 180

10.4 堆内存和栈内存使用的比较 183

10.5 实践拓展 184

10.6 思考与练习 184

第11章 指针、回调函数、结构体与共同体 185

11.1 指针 185

11.1.1 指针的概念 185

11.1.2 变量的指针和指向变量的指针变量 185

11.1.3 数组的指针和指向数组的指针变量 188

11.1.4 字符串的指针和指向字符串的指针变量 189

11.1.5 函数的指针和指向函数的指针变量 190

11.1.6 指针数组和指向指针的指针 192

11.2 回调函数 193

11.2.1 回调函数的概念与作用 193

11.2.2 回调函数的语法 194

11.3 结构体 195

11.3.1 结构体类型变量 195

11.3.2 结构体数组 197

11.3.3 指向结构体类型数据的指针 199

11.3.4 用指针处理链表 200

11.4 共同体 202

11.5 实践拓展 205

11.6 思考与练习 205

第12章 Linux C语言嵌入汇编语言与移植性问题 207

12.1 嵌入汇编语言 207

12.1.1 C和汇编的接口 207

12.1.2 内嵌汇编的语法 207

12.1.3 memory描述符 210

12.1.4 GCC对内嵌汇编语言的处理方式 211

12.2 嵌入式Linux可移植性问题 211

12.2.1 字长和数据类型 211

12.2.2 数据对齐 212

12.2.3 字节顺序 213

12.3 实践拓展 214

12.4 思考与练习 214

第三篇 高级编程 215

第13章 嵌入式Linux环境下GUI开发技术 215

13.1 嵌入式图形用户界面概述 215

13.2 Linux下几种主流的GUI 216

13.2.1 MiniGUI 216

13.2.2 Qt/Embedded 218

13.2.3 MicroWindows 219

13.2.4 OpenGUI 219

13.2.5 GTK+ 219

13.3 基于GTK+的图形界面编程 220

13.3.1 GTK+程序的初始化与退出 221

13.3.2 GTK+预定义的函数和数据类型 222

13.3.3 回调函数 223

13.3.4 GTK+的事件处理 224

13.3.5 使用GTK+实现“Hello World”程序 224

13.3.6 编译GTK+程序 226

13.3.7 在GTK+中排列控件 226

13.3.8 常用控件 228

13.4 实践拓展 233

13.5 思考与练习 234

第14章 嵌入式Linux设备驱动开发 235

14.1 Linux设备驱动程序概述 235

14.2 Linux设备驱动程序与内核的关系 236

14.3 Linux设备驱动程序开发基础 237

14.3.1 内存管理问题 237

14.3.2 中断处理 239

14.3.3 I/O端口 242

14.3.4 DMA处理 242

14.3.5 时间流 244

14.4 字符设备驱动 245

14.4.1 字符设备驱动相关函数和结构体 245

14.4.2 字符设备驱动程序实例 248

14.5 块设备驱动 249

14.5.1 块设备驱动概述 249

14.5.2 与块设备相关的结构体 250

14.6 网络设备驱动 254

14.6.1 网络设备概述 254

14.6.2 网络设备的运行机制 255

14.6.3 数据包的发送与接收 255

14.6.4 网络设备驱动程序的加载 256

14.6.5 DM9000网卡驱动程序分析 257

14.7 实践拓展 260

14.8 思考与练习 261

第15章 Linux文件操作 262

15.1 Linux文件结构 262

15.1.1 Linux文件系统 264

15.1.2 Linux文件类型 265

15.1.3 Linux文件的访问权限控制 266

15.2 文件操作相关函数 268

15.2.1 文件的打开与关闭 269

15.2.2 文件的读写 271

15.2.3 文件的定位 273

15.2.4 出错检测 275

15.2.5 文件的属性操作 276

15.2.6 文件的移动和删除 281

15.3 目录操作 281

15.3.1 目录的创建和删除 281

15.3.2 获取当前目录 282

15.3.3 设置工作目录 283

15.3.4 获取目录信息 283

15.4 制作根文件系统 285

15.4.1 Linux根文件系统的制作 285

15.4.2 制作根文件系统的镜像 287

15.5 实践拓展 288

15.6 思考与练习 288

第16章 进程 289

16.1 Linux进程 289

16.1.1 Linux进程概述 289

16.1.2 Linux进程调度 291

16.1.3 进程的内存映像 295

16.2 进程控制 296

16.2.1 创建进程 296

16.2.2 创建守护进程 298

16.2.3 退出进程 300

16.2.4 改变进程的优先级 302

16.2.5 执行新程序 303

16.2.6 等待进程结束 303

16.3 进程间通信 305

16.3.1 管道 306

16.3.2 有名管道 307

16.3.3 消息队列 308

16.3.4 信号量 310

16.3.5 共享内存 312

16.4 编程实例——哲学家用餐问题 315

16.5 实践拓展 318

16.6 思考与练习 318

第17章 线程控制 319

17.1 Linux线程 319

17.1.1 线程和进程的关系 319

17.1.2 线程分类 320

17.2 创建线程 321

17.3 线程属性 323

17.4 线程等待和终止 327

17.5 私有数据 328

17.6 线程同步 328

17.6.1 互斥锁 329

17.6.2 条件变量 332

17.6.3 异步信号 333

17.7 出错处理 334

17.7.1 错误码 334

17.7.2 出错处理相关函数 335

17.8 实践拓展 337

17.9 思考与练习 338

第四篇 综合实例 339

第18章 嵌入式网络防御体系设计 339

18.1 嵌入式网络防御设计概述 339

18.2 需求分析 340

18.2.1 软件需求分析 340

18.2.2 硬件需求分析 341

18.3 Linux操作系统移植 341

18.3.1 构建嵌入式Linux开发环境 341

18.3.2 BootLoader移植 343

18.3.3 将Linux内核移植到S3C2410 345

18.3.4 移植YAFFS文件系统 348

18.3.5 构建Linux根文件系统 350

18.4 系统软件设计 353

18.4.1 网络基础知识 353

18.4.2 sniff原理 355

18.5 做自己的YASON 356

18.5.1 事前准备 356

18.5.2 YASON之旅 366

18.6 实践拓展 377

第19章 ARM Linux视频采集与传输 379

19.1 硬件平台概述 379

19.2 S3C2410处理器 379

19.3 系统的软件结构 381

19.4 视频采集的系统程序 381

19.4.1 JFFS2文件系统的建立 381

19.4.2 摄像头驱动的加载 382

19.4.3 BootLoader移植 383

19.4.4 将Linux内核移植到S3C2410 384

19.5 视频采集的应用程序 384

19.5.1 视频采集程序 384

19.5.2 视频采集关键步骤 386

19.5.3 视频编码程序 390

19.5.4 数据传输程序 391

19.6 实践拓展 395

第20章 ARM Linux指纹识别 396

20.1 自动指纹识别系统概述 396

20.2 指纹识别原理 397

20.3 系统硬件结构 400

20.4 指纹采集芯片fps200 400

20.5 Linux操作系统移植 402

20.5.1 BootLoader移植 402

20.5.2 将Linux内核移植到S3C2410 402

20.5.3 加载指纹芯片驱动程序 404

20.5.4 加载文件系统 405

20.6 系统软件设计 406

20.6.1 系统的初始化 406

20.6.2 指纹采集与处理 407

20.6.3 指纹识别算法的实现 409

20.7 实践拓展 414

附录A 嵌入式Linux函数索引 415

附录B Linux Shell常用命令索引 422

参考文献 424