《精通ARM嵌入式Linux系统开发》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:杨水清,张剑,施云飞编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2012
  • ISBN:9787121161971
  • 页数:621 页
图书介绍:本书共包括4个方面的内容:在嵌入式系统的硬件结构中讲述了嵌入式处理器ARM的特点、嵌入式系统硬件环境的构建和ADS开发工具的使用;在嵌入式Linux系统移植中讲述了目标板软件环境的构建,主要包括Boot Loader、Linux内核、文件系统及交叉开发环境的构建;在嵌入式Linux软件开发中讲述了嵌入式Linux C语言开发工具的使用、标准库的使用、多任务开发基础和设备驱动开发基础。

第1章 嵌入式系统概述 1

1.1嵌入式系统简介 1

1.1.1嵌入式系统 1

1.1.2嵌入式系统的特点 2

1.1.3嵌入式系统的发展趋势 2

1.2嵌入式系统中的处理器 4

1.2.1微处理器 4

1.2.2微控制器 4

1.2.3数字信号处理器 5

1.2.4嵌入式片上系统 5

1.3嵌入式系统中的软件系统 5

1.3.1嵌入式系统软件 5

1.3.2嵌入式系统软件开发的一般过程 6

1.3.3嵌入式应用程序的开发 6

1.4本章小结 6

第2章 快速体验——目标板 7

2.1目标板结构 7

2.2 ARM初体验 8

2.2.1测试ARM处理器 8

2.2.2安装ADS 1.2 9

2.2.3安装Multi-ICE和配置AXD 11

2.2.4 ADS的简单使用 13

2.2.5使用Telnet和ftp 16

2.3本章小结 16

第3章 ARM的内部资源 17

3.1 S3C2440微处理器 17

3.1.1主要结构 17

3.1.2片内资源 18

3.1.3体系结构 18

3.2 S3C2440存储器映射 18

3.2.1 bank0总线宽度 18

3.2.2 nWAIT引脚的作用 19

3.2.3 nXBREQ/nXBACK引脚操作 19

3.3 S3C2440内部资源详解 20

3.3.1 Cache高速缓存 20

3.3.2时钟和电源管理 20

3.3.3中断控制器 22

3.3.4脉冲带宽调制定时器(PWM) 23

3.3.5实时时钟(RTC) 23

3.3.6通用I/O端口 24

3.3.7 LCD控制器 24

3.3.8 UART控制器 25

3.3.9 A/D转换和触摸屏接口 25

3.3.10看门狗定时器 26

3.3.11 IIC总线接口 26

3.3.12 AC’97音频解码器接口 27

3.3.13 USB设备控制器 27

3.3.14 SD接口 27

3.3.15 SPI接口 28

3.3.16相机接口 28

3.3.17工作电压 29

3.4本章小结 29

第4章 熟悉ARM处理器 30

4.1为什么用ARM 30

4.2 ARM公司简介 30

4.3 ARM微处理器系列 30

4.3.1 ARM7微处理器 30

4.3.2 ARM9微处理器 31

4.3.3 ARM 10E微处理器 31

4.3.4 ARM II微处理器 32

4.4 ARM微处理器的结构 32

4.4.1体系结构 32

4.4.2寄存器结构 33

4.4.3指令结构 33

4.5 ARM微处理器的选择 33

4.5.1内核的选择 33

4.5.2工作频率的选择 33

4.5.3芯片内存储器的选择 33

4.5.4片内外围电路的选择 34

4.6 ARM的指令集概述 34

4.6.1 ARM微处理器的指令分类和格式 34

4.6.2指令的条件域 35

4.7 ARM指令的寻址方式 36

4.7.1立即寻址 36

4.7.2寄存器寻址 36

4.7.3寄存器间接寻址 36

4.7.4基址变址寻址 36

4.7.5多寄存器寻址 37

4.7.6相对寻址 37

4.7.7堆栈寻址 37

4.8 ARM指令集详解 38

4.8.1 跳转指令 38

4.8.2数据处理指令 38

4.8.3乘法指令与乘加指令 42

4.8.4程序状态寄存器访问指令 44

4.8.5加载/存储指令 45

4.8.6批量数据加载/存储指令 47

4.8.7数据交换指令 47

4.8.8移位指令 48

4.8.9协处理器指令 49

4.8.10异常产生指令 51

4.9本章小结 51

第5章 熟悉ADS集成开发环境 52

5.1命令行开发工具 52

5.1.1 armcc介绍 52

5.1.2 armcc用法详解 53

5.1.3 armlink介绍 54

5.1.4 armlink用法详解 54

5.1.5 ARM运行时库 54

5.1.6 ADS调试器 55

5.1.7实用程序 56

5.1.8支持的软件 56

5.2使用ADS创建工程 56

5.2.1建立一个工程 57

5.2.2编译和链接工程 60

5.2.3 Target设置选项 60

5.2.4 Language Settings 61

5.2.5 Linker设置 61

5.2.6 ARM fromELF工具 63

5.2.7命令行下编译工程 64

5.3使用AXD调试代码 65

5.3.1打开调试文件 65

5.3.2查看存储器内容 66

5.3.3设置断点 66

5.3.4查看变量值 67

5.4本章小结 67

第6章ARM的外部电路 68

6.1核心板电路 68

6.1.1晶振电路 68

6.1.2复位电路 69

6.1.3启动配置电路 69

6.1.4 Flash接口 69

6.1.5 SDRAM接口 72

6.2底板电路 73

6.2.1电源电路 73

6.2.2串口电路 74

6.2.3 USB接口 75

6.2.4以太网接口 75

6.2.5 JTAG调试接口 76

6.2.6音频接口 77

6.2.7 LCD接口 77

6.2.8 SD卡接口 78

6.3本章小结 79

第7章 嵌入式操作系统概述 80

7.1操作系统的结构和功能 80

7.2进程管理 81

7.2.1进程的描述 82

7.2.2进程的调度 82

7.3存储管理 83

7.3.1存储器的体系结构 83

7.3.2内存管理的基本概念 84

7.3.3连续分配存储管理方式 84

7.3.4页式存储管理方式 86

7.4文件管理 87

7.4.1文件 88

7.4.2目录 89

7.4.3 EXT2文件系统 89

7.5设备管理 92

7.5.1设备的分类 92

7.5.2数据传输控制方式 93

7.5.3中断处理 93

7.5.4设备驱动程序 94

7.6嵌入式操作系统的特点 95

7.6.1嵌入式操作系统的发展 95

7.6.2嵌入式操作系统的优势 96

7.6.3嵌入式操作系统的分类 96

7.7常见的嵌入式操作系统 97

7.7.1 VxWorks 97

7.7.2 pSOS 97

7.7.3 Palm OS 98

7.7.4 QNX 98

7.7.5 Windows CE 99

7.7.6 FC/OS-II 100

7.7.7嵌入式Linux 100

7.8本章小结 101

第8章 快速体验——构建开发环境 102

8.1交叉开发环境介绍 102

8.2主机与目标板的连接方式 103

8.2.1串口通信接口 103

8.2.2以太网接口 104

8.2.3 USB接口 104

8.2.4 JTAG接口 105

8.3建立主机开发环境 105

8.3.1 Ubuntu 6.06的安装 105

8.3.2 Minicom的安装配置 107

8.3.3 TFTP服务的安装配置 109

8.3.4 NFS的安装配置 110

8.3.5建立交叉工具链 112

8.4启动目标板系统 116

8.4.1 Bootloader和Kemel 117

8.4.2根文件系统 118

8.5本章小结 119

第9章 Linux使用基础 120

9.1 Linux的基本概念 120

9.1.1文件 120

9.1.2目录 120

9.1.3分区 121

9.1.4挂载 122

9.1.5用户系统 122

9.1.6用户权限 122

9.1.7 shell 123

9.1.8环境变量 124

9.2 Linux的命令行 124

9.2.1执行命令 124

9.2.2参数 125

9.2.3重定向符号 125

9.2.4获取帮助 125

9.3 Linux的常用命令 127

9.3.1文件管理 127

9.3.2内容管理 130

9.3.3权限管理 131

9.3.4备份压缩 132

9.3.5系统设置 133

9.3.6进程控制 136

9.3.7网络设置 138

9.4本章小结 139

第10章 Bootloader 140

10.1 Bootloader的概念 140

10.1.1 Bootloader所支持的嵌入式体系 141

10.1.2 Bootloader的安装位置 141

10.1.3 Bootloader的启动过程 142

10.1.4 Bootloader与主机的通信 142

10.1.5 Bootloader的操作模式 142

10.2 Bootloader的基本结构 143

10.2.1 Bootloader的stage1 143

10.2.2 Bootloader的stage2 144

10.3 vivi简介 149

10.3.1 vivi的体系架构 149

10.3.2 vivi启动的第一阶段 150

10.3.3 vivi启动的第二阶段 154

10.4 vivi的基本命令 158

10.4.1 mem命令 158

10.4.2 load命令 159

10.4.3 part命令 159

10.4.4 param命令 160

10.4.5 boot命令 160

10.4.6 go命令 161

10.4.7 bon命令 161

10.4.8 reset命令 161

10.4.9 help命令 161

10.5 U-Boot简介 162

10.5.1 U-Boot的特点 162

10.5.2 U-Boot的目录结构 163

10.5.3 U-Boot的启动过程 163

10.5.4 U-Boot的移植 165

10.6 U-Boot的基本命令 167

10.6.1设置环境变量 167

10.6.2数据通信 167

10.6.3存储器操作 168

10.6.4系统引导 168

10.6.5其他 169

10.7本章小结 169

第11章 Linux内核移植 170

11.1 Linux内核结构 170

11.2 Linux源码结构 171

11.2.1 arch目录 172

11.2.2 drivers目录 172

11.2.3 fs目录 173

11.2.4其他目录 174

11.3内核编译 175

11.3.1编译准备 175

11.3.2设置Flash分区 176

11.3.3配置内核 178

11.4内核配置选项 180

11.4.1常规设置 180

11.4.2模块和块设备层 182

11.4.3 CPU类型 183

11.4.4电源管理 185

11.4.5总线和网络 187

11.4.6驱动 188

11.4.7文件系统 195

11.4.8其他 198

11.5下载内核 200

11.6内核调试 201

11.6.1内核调试步骤 201

11.6.2常见内核问题 202

11.7本章小结 203

第12章 嵌入式Linux文件系统 204

12.1嵌入式文件系统基础 204

12.1.1 NOR型Flash存储器 204

12.1.2 NAND型Flash存储器 205

12.1.3 MTD简介 206

12.1.4日志型文件系统 207

12.1.5 BusyBox 208

12.2 CramFS文件系统 210

12.2.1 CramFS文件系统的特性 210

12.2.2 CramFS文件系统映像文件的结构 211

12.2.3 CramFS文件系统的工作原理 212

12.2.4 CramFS文件系统的初始化过程 213

12.2.5 CramFS文件系统的制作 213

12.2.6 CramFS文件系统的挂载流程 216

12.3 YAFFS文件系统 217

12.3.1 YAFFS文件系统的数据存储方式 217

12.3.2 YAFFS文件系统的工作原理 218

12.3.3 YAFFS文件系统对MTD的依赖性 220

12.3.4 YAFFS文件系统驱动的安装流程 222

12.3.5 YAFFS文件系统的制作 222

12.4 JFFS文件系统 224

12.4.1 JFFS1文件系统简介 224

12.4.2 JFFS2文件系统简介 226

12.4.3 JFFS3文件系统简介 228

12.4.4 JFFS2文件系统的工作原理 228

12.4.5 JFFS2文件系统的制作 231

12.5基于RAM的文件系统 231

12.5.1 Ramdisk文件系统 231

12.5.2 RamFS/TmpFS文件系统 232

12.6嵌入式文件系统的设计 233

12.6.1文件系统格式选择的基本策略 234

12.6.2混合型文件系统格式的设计方法 234

12.7本章小结 235

第13章 嵌入式Linux C语言开发工具 236

13.1编辑器VIM 236

13.1.1 VIM的编辑模式 236

13.1.2 VIM的进入与退出 238

13.1.3光标的移动 239

13.1.4删除和恢复 239

13.1.5复制和粘贴 240

13.1.6查找和替换 240

13.1.7网络资源 241

13.2编译器GCC 242

13.2.1 GCC的编译流程 242

13.2.2 GCC的常用编译选项 245

13.2.3实例分析 248

13.3调试器GDB 250

13.3.1 GDB使用概述 250

13.3.2 GDB的使用流程 251

13.3.3 GdbServer远程调试 253

13.4工程管理Make 255

13.4.1 Makefile文件介绍 255

13.4.2 Makefile的规则 256

13.4.3 Makefile的变量 258

13.4.4 make命令的使用 260

13.4.5使用自动工具生成Makefile 261

13.5集成开发环境Eclipse 263

13.5.1 Eclipse的安装 263

13.5.2 Eclipse的界面简介 264

13.5.3创建Hello项目 265

13.5.4调试Hello项目 267

13.5.5使用CVS进行版本管理 267

13.6本章小结 271

第14章 快速体验——嵌入式C语言开发流程 272

14.1命令行下的开发流程 272

14.1.1编写代码 272

14.1.2编译程序 274

14.1.3运行程序 275

14.1.4交叉编译 275

14.1.5编写Makefile 276

14.2基于Eclipse的开发流程 277

14.2.1下载和安装Eclipse 277

14.2.2新建工程 278

14.2.3编写代码 279

14.2.4编译工程 280

14.2.5运行程序 281

14.3本章小结 281

第15章 嵌入式Linux C语言基础 282

15.1 C语言概述 282

15.1.1 C语言的特点 282

15.1.2 C语言程序的总体结构 282

15.1.3 C语言的语句 283

15.1.4 C语言的关键字 284

15.1.5 C语言程序设计步骤 284

15.2数据类型 284

15.2.1基本数据类型 284

15.2.2常量与变量 285

15.2.3整型数据、实型数据 285

15.2.4字符型数据 286

15.3运算符 287

15.3.1算术运算符 287

15.3.2关系和逻辑运算符 287

15.3.3位操作符 288

15.3.4?操作符 288

15.3.5表达式的优先级 288

15.4表达式 289

15.4.1类型转换 289

15.4.2构成符cast和可读性 289

15.5流程控制 289

15.5.1格式输入/输出 289

15.5.2顺序程序设计 292

15.5.3选择结构设计 293

15.5.4循环结构设计 294

15.6函数 296

15.6.1概述 296

15.6.2函数定义的一般形式 297

15.6.3函数的参数和函数的值 297

15.6.4函数的调用 298

15.6.5局部变量和全局变量 299

15.7数组与指针 300

15.7.1数组 300

15.7.2指针的基本概念 302

15.7.3指针与数组 304

15.7.4指针与字符串 306

15.7.5指针与函数 307

15.7.6指针其他用法 308

15.7.7动态内存管理 308

15.8复杂数据结构 309

15.8.1结构体定义 309

15.8.2结构体使用 310

15.8.3链表 312

15.8.4枚举类型 313

15.8.5共用体类型 313

15.9本章小结 313

第16章 嵌入式Linux C语言标准库 314

16.1 Glibc简介 314

16.2字符测试和数据转换函数 316

16.2.1字符测试函数 316

16.2.2数据转换函数 317

16.3基本I/O函数 318

16.3.1 open()函数 319

16.3.2 close()函数 320

16.3.3 read()函数和write()函数 320

16.3.4其他函数 321

16.4标准I/O函数 322

16.4.1 fopen()函数 322

16.4.2 fclose()函数 323

16.4.3 fread()函数和fwrite()函数 324

16.4.4 printf()函数和scanf()函数 325

16.4.5其他函数 326

16.5内存配置及字符串处理函数 326

16.5.1内存分配函数 327

16.5.2 memXXX函数 327

16.5.3 strXXX函数 330

16.5.4释放内存的函数 331

16.5.5动态内存分配的实例 332

16.6日期时间函数 334

16.6.1时间的定义 334

16.6.2日历时间 334

16.6.3时钟计时单元 336

16.6.4格式化日期和时间 337

16.6.5自定义时间格式 337

16.7其他函数 339

16.7.1错误处理函数 339

16.7.2系统日志函数 342

16.7.3环境管理函数 344

16.8本章小结 345

第17章 嵌入式Linux的多任务编程 346

17.1什么是多任务 346

17.1.1对话级多任务 346

17.1.2进程级多任务 347

17.1.3线程级多任务 347

17.1.4多任务处理的特点 348

17.2进程 349

17.2.1进程的概念 350

17.2.2进程的数据结构 351

17.2.3进程的创建 353

17.2.4文件描述符共享 355

17.2.5 vfork()函数 357

17.2.6 exec()函数族 357

17.2.7执行新程序 359

17.2.8进程的终止 361

17.2.9进程的退出状态 363

17.2.10 Zombie进程 365

17.3线程 366

17.3.1线程的概念 366

17.3.2线程的创建 367

17.3.3线程的终止 368

17.3.4线程的基本属性 370

17.3.5线程属性的修改 371

17.3.6线程的扩展属性 374

17.4线程池 377

17.4.1线程池的工作原理 377

17.4.2线程池的实现 378

17.4.3工作状态的记录 383

17.4.4线程池的测试 386

17.5本章小结 387

第18章 多任务间通信和同步 388

18.1信号 388

18.1.1信号的概念 388

18.1.2信号的产生 390

18.1.3 kill()函数和raise()函数 390

18.1.4 alarm()函数和pause()函数 391

18.1.5 about()函数 392

18.1.6信号的处理 392

18.1.7 signal()函数 392

18.1.8 sigaction()函数 393

18.1.9信号集 395

18.1.10 sigprocmask()函数 396

18.1.11 sigpending()函数 396

18.1.12 sigsuspend()函数 396

18.2管道 397

18.2.1管道的相关概念 398

18.2.2管道的创建 398

18.2.3多进程中的管道通信 399

18.2.4管道的应用实例 401

18.2.5 FIFO的相关概念 402

18.2.6 FIFO的创建 403

18.2.7 FIFO的读写规则 404

18.2.8 FIFO的应用实例 405

18.3共享内存 407

18.3.1系统调用mmap() 408

18.3.2系统调用munmap() 408

18.3.3系统调用msync() 409

18.3.4 mmap()的应用实例 409

18.4 System V共享内存 411

18.4.1系统调用shmget() 411

18.4.2系统调用shmat() 412

18.4.3系统调用shmdt() 412

18.4.4 System V共享内存的应用实例 412

18.5消息队列 413

18.5.1系统调用msgget() 413

18.5.2系统调用msgsnd() 414

18.5.3系统调用msgrcv() 414

18.5.4系统调用msgctl() 415

18.5.5消息队列的应用实例 415

18.6 System V信号量 417

18.6.1系统调用semget() 417

18.6.2系统调用semop() 418

18.6.3系统调用semctl() 419

18.6.4 System V信号量的应用实例 419

18.7 POSIX信号量 421

18.7.1系统调用sem_init() 422

18.7.2系统调用sem_wait() 422

18.7.3系统调用sem_post() 422

18.7.4系统调用sem_destory() 422

18.7.5 POSIX信号量的应用实例 422

18.8互斥锁 424

18.8.1系统调用pthread_mutex_init() 424

18.8.2系统调用pthread_mutex_lock() 424

18.8.3系统调用pthread_mutex_trylock() 424

18.8.4系统调用pthread_mutex_unlock() 425

18.8.5系统调用pthread_mutex_destory() 425

18.8.6互斥锁的应用实例 425

18.9条件变量 427

18.9.1系统调用pthread_cond_init() 428

18.9.2系统调用pthread_cond_wait() 428

18.9.3系统调用pthread_cond_timedwait() 428

18.9.4系统调用pthread_cond_signal() 428

18.9.5系统调用pthread_cond_broadsignal() 428

18.9.6系统调用pthread-cond_destroy() 428

18.9.7条件变量的应用实例 429

18.10本章小结 430

第19章 设备驱动开发基础 431

19.1 Linux设备管理和驱动概述 431

19.1.1 Linux设备的分类 431

19.1.2设备驱动程序的作用 431

19.1.3访问设备的实现 432

19.1.4 Linux设备控制方式 432

19.2 Linux设备驱动开发流程 434

19.2.1构造和运行模块 434

19.2.2字符设备驱动编写 435

19.2.3字符设备驱动实例 437

19.2.4并发控制 440

19.2.5 阻塞与非阻塞 445

19.2.6 select和poll 449

19.2.7中断处理 451

19.2.8内存与I/O操作 452

19.3块设备驱动编写 456

19.3.1块设备的I/O操作特点 457

19.3.2 block device——operations结构体 457

19.3.3 gendisk结构体 457

19.3.4 request结构体 459

19.3.5 request操作函数 462

19.3.6 bio结构体 464

19.3.7注册与注销 466

19.3.8加载与卸载 466

19.3.9打开与释放 468

19.3.10 ioctl()函数 468

19.3.11 I/O请求处理 469

19.4本章小结 472

第20章 嵌入式Linux的网络编程 473

20.1 TCP/IP协议 473

20.2 TCP协议 474

20.2.1 TCP连接建立的过程 474

20.2.2 TCP连接的标识 474

20.2.3关闭TCP连接 475

20.3 UDP协议 475

20.4 socket简介 475

20.4.1 socket的定义 476

20.4.2 socket的类型 476

20.5 TCP Server程序设计 476

20.5.1 TCP的通信过程 476

20.5.2 TCP Server程序 477

20.5.3网络地址的表示 478

20.5.4建立socket 479

20.5.5绑定本地地址 479

20.5.6字节顺序转换 480

20.5.7 IP地址转换 481

20.5.8 listen()函数 481

20.5.9等待连接 482

20.5.10数据通信 483

20.5.11关闭套接字 484

20.6 TCP Client程序设计 485

20.6.1 DNS操作 486

20.6.2连接服务器 487

20.6.3测试实例 488

20.7 UDP通信的程序设计 489

20.7.1 UDP的通信过程 489

20.7.2 UDP通信服务器端 490

20.7.3 UDP通信客户端 491

20.8多线程文件服务器 493

20.8.1文件服务器主程序 493

20.8.2动态分配监听端口 495

20.8.3多线程服务器的实现 495

20.8.4大数据量的读写函数 496

20.8.5客户端测试例程 499

20.8.6编译和测试 501

20.9 Proxy源代码分析 501

20.9.1主函数main() 502

20.9.2参数处理函数parse_args() 503

20.9.3守护进程函数daemonize() 505

20.9.4代理服务函数do_proxy() 507

20.9.5错误信息函数errorout() 510

20.10本章小结 510

第21章 MiniGUI图形界面设计 511

21.1 MiniGUI概述 511

21.1.1 MiniGUI的特点 511

21.1.2 MiniGUI v1.3.3软件包 512

21.1.3 MiniGUI运行模式 512

21.2 MiniGUI的安装和使用 514

21.2.1安装MiniGUI库 514

21.2.2安装MiniGUI的资源 515

21.2.3配置MiniGUI 515

21.2.4编译应用程序例子 516

21.2.5交叉编译MiniGUI库 516

21.2.6交叉编译例程 517

21.2.7 QVFB图形引擎 518

21.2.8 FrameBuffer图形引擎 519

21.3利用Eclipse编写MiniGUI程序 520

21.3.1建立vacs工程 520

21.3.2配置编译选项 521

21.3.3配置外部工具QVFB 522

21.3.4运行vacs 523

21.3.5调试vacs 523

21.4 MiniGUI的编程基础 524

21.4.1头文件 525

21.4.2程序入口 525

21.4.3创建和显示主窗口 526

21.4.4进入消息循环 526

21.4.5窗口过程函数 528

21.4.6屏幕输出 528

21.4.7程序的退出 528

21.5消息循环和窗口过程 529

21.5.1消息处理函数 529

21.5.2重要的消息 530

21.5.3窗口及窗口过程 530

21.6对话框和控件编程 531

21.6.1控件的概念 531

21.6.2预定义控件 532

21.6.3自定义控件 534

21.6.4控件子类化 535

21.6.5对话框和对话框模板 536

21.6.6模态和非模态对话框 538

21.7图形设备接口 539

21.7.1图形设备上下文 539

21.7.2矩形操作和区域操作 540

21.7.3像素值和调色板 542

21.7.4位图操作函数 543

21.7.5字体和文本输出 544

21.7.6绘制图形 546

21.8其他功能 547

21.8.1读写配置文件 547

21.8.2定点数运算 548

21.9 MiniQQ界面设计 549

21.9.1登录窗口 551

21.9.2好友列表窗口 554

21.9.3聊天窗口 557

21.9.4其他 559

21.10本章小结 560

第22章 CAN总线驱动设计 561

22.1 CAN总线介绍 561

22.2 SJA1000介绍 561

22.2.1 SJA 1000的特性 561

22.2.2 SJA1000内部原理 562

22.2.3 SJA1000引脚说明 563

22.3 SJA1000寄存器介绍 564

22.3.1控制寄存器CR 564

22.3.2命令寄存器CMR 565

22.3.3状态寄存器SR 566

22.3.4中断寄存器IR 567

22.3.5发送缓冲器 568

22.3.6接收缓冲器 568

22.3.7验收滤波器 569

22.4 SJA1000与 S3C2440连接 569

22.5 SJA1000的驱动程序 571

22.5.1驱动程序源代码 571

22.5.2测试的操作方法 579

22.6本章小结 580

第23章 SD卡驱动设计 581

23.1 SD卡概述及协议 581

23.1.1 SD卡概述 581

23.1.2 SD卡协议 582

23.2 SD卡驱动设计 583

23.2.1块设备驱动设计 583

23.2.2 SD卡驱动程序分析 584

23.2.3 SD卡驱动程序设计 586

23.3本章小结 588

第24章 网络驱动设计 589

24.1 Linux网络设备概述 589

24.2 DM9000芯片介绍 590

24.3重要的数据结构 591

24.3.1通用部分 591

24.3.2硬件相关部分 591

24.3.3物理层相关数据 592

24.3.4网络层协议相关部分 592

24.3.5服务处理部分 593

24.4网络设备初始化 593

24.5激活和关闭网络设备 595

24.6中断控制的实现 596

24.7发送过程的实现 598

24.8接收过程的实现 599

24.8.1 sk buff结构 599

24.8.2接收函数的实现 601

24.9其他接口函数 602

24.10本章小结 602

第25章 综合案例——嵌入式B超 603

25.1系统终端的结构设计 603

25.1.1总体结构 603

25.1.2显示控制芯片选型 604

25.2系统终端的软件设计 604

25.2.1 U-Boot 605

25.2.2嵌入式Linux移植 605

25.2.3 MiniGUI移植 606

25.3 FPGA与ARM接口设计 608

25.3.1硬件连接 608

25.3.2 FPGA驱动程序设计 608

25.4显示芯片的连接与控制 610

25.4.1选择SM501的原因 610

25.4.2 SM501驱动程序设计 610

25.5超声动态图像的实时显示 612

25.5.1图像动态显示 612

25.5.2坐标转换和灰度插值 612

25.6图形界面的结构 614

25.6.1需求分析 614

25.6.2总体结构 614

25.6.3网络通信 615

25.6.4多线程编程 616

25.7操作界面设计 616

25.7.1区域分配 617

25.7.2键盘响应 617

25.7.3控件设计 618

25.8测量模块设计 619

25.8.1椭圆的画法 619

25.8.2椭圆测量周长和面积 620

25.8.3轨迹法测量面积 621

25.9本章小结 621