精通ARM嵌入式Linux系统开发pdf下载

精通ARM嵌入式Linux系统开发百度网盘pdf下载

作者:
简介:精通ARM嵌入式Linux系统开发
出版社:电子工业出版社
出版时间:2012-05-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介
  本书由浅入深、通俗易懂地讲解了嵌入式Linux的系统设计与开发。全书共25章,从嵌入式处理器ARM开始,讲解了ARM处理器的资源、ARM的指令集、ADS开发工具、嵌入式系统硬件环境的构建、Bootloader、Linux内核移植、嵌入式文件系统、嵌入式Linux多任务程序开发、嵌入式Linux设备驱动开发、嵌入式Linux网络程序开发、MiniGUI图形界面开发、设备驱动开发案例、综合案例等内容。书中通过大量的例程来讲解知识要点,并提供了大量极有参考价值的开发案例,读者可以通过这些例程和开发案例对嵌入式Linux开发有一个系统的学习和提高。
  本书共包括4个方面的内容:在嵌入式系统的硬件结构中讲述了嵌入式处理器ARM的特点、嵌入式系统硬件环境的构建和ADS开发工具的使用;在嵌入式Linux系统移植中讲述了目标板软件环境的构建,主要包括Boot Loader、Linux内核、文件系统及交叉开发环境的构建;在嵌入式Linux软件开发中讲述了嵌入式Linux C语言开发工具的使用、标准库的使用、多任务开发基础和设备驱动开发基础;在嵌入式应用系统实例分析中讲述了嵌入式Linux的网络程序开发、MiniGUI图形界面开发、CAN总线设备驱动设计、DM9000网络驱动设计、SD卡驱动设计和嵌入式B超系统设计。
目录
版权信息
前 言
第1章 嵌入式系统概述
1.1 嵌入式系统简介
1.1.1 嵌入式系统
1.1.2 嵌入式系统的特点
1.1.3 嵌入式系统的发展趋势
1.2 嵌入式系统中的处理器
1.2.1 微处理器
1.2.2 微控制器
1.2.3 数字信号处理器
1.2.4 嵌入式片上系统
1.3 嵌入式系统软件
1.3.1 嵌入式系统软件
1.3.2 嵌入式系统软件开发的一般过程
1.3.3 嵌入式应用程序的开发
1.4 本章小结
第2章 快速体验——目标板
2.1 目标板结构
2.2 ARM初体验
2.2.1 测试ARM处理器
2.2.2 安装ADS 1.2
2.2.3 安装Multi-ICE和配置AXD
2.2.4 ADS的简单使用
2.2.5 使用Telnet和ftp
2.3 本章小结
第3章 ARM的内部资源
3.1 S3C2440微处理器
3.1.1 主要结构
3.1.2 片内资源
3.1.3 体系结构
3.2 S3C2440存储器映射
3.2.1 bank0总线宽度
3.2.2 nWAIT引脚的作用
3.2.3 nXBREQ/nXBACK引脚操作
3.3 S3C2440内部资源详解
3.3.1 Cache高速缓存
3.3.2 时钟和电源管理
3.3.3 中断控制器
3.3.4 脉冲带宽调制定时器(PWM)
3.3.5 实时时钟(RTC)
3.3.6 通用I/O端口
3.3.7 LCD控制器
3.3.8 UART控制器
3.3.9 A/D转换和触摸屏接口
3.3.10 看门狗定时器
3.3.11 IIC总线接口
3.3.12 AC’97音频解码器接口
3.3.13 USB设备控制器
3.3.14 SD接口
3.3.15 SPI接口
3.3.16 相机接口
3.3.17 工作电压
3.4 本章小结
第4章 熟悉ARM处理器
4.1 为什么用ARM
4.2 ARM公司简介
4.3 ARM微处理器系列
4.3.1 ARM7微处理器
4.3.2 ARM9微处理器
4.3.3 ARM10E微处理器
4.3.4 ARM11微处理器
4.4 ARM微处理器的结构
4.4.1 体系结构
4.4.2 寄存器结构
4.4.3 指令结构
4.5 ARM微处理器的选择
4.5.1 内核的选择
4.5.2 工作频率的选择
4.5.3 芯片内存储器的选择
4.5.4 片内外围电路的选择
4.6 ARM的指令集概述
4.6.1 ARM微处理器的指令分类和格式
4.6.2 指令的条件域
4.7 ARM指令的寻址方式
4.7.1 立即寻址
4.7.2 寄存器寻址
4.7.3 寄存器间接寻址
4.7.4 基址变址寻址
4.7.5 多寄存器寻址
4.7.6 相对寻址
4.7.7 堆栈寻址
4.8 ARM指令集详解
4.8.1 跳转指令
4.8.2 数据处理指令
4.8.3 乘法指令与乘加指令
4.8.4 程序状态寄存器访问指令
4.8.5 加载/存储指令
4.8.6 批量数据加载/存储指令
4.8.7 数据交换指令
4.8.8 移位指令
4.8.9 协处理器指令
4.8.10 异常产生指令
4.9 本章小结
第5章 熟悉ADS集成开发环境
5.1 命令行开发工具
5.1.1 armcc介绍
5.1.2 armcc用法详解
5.1.3 armlink介绍
5.1.4 armlink用法详解
5.1.5 ARM运行时库
5.1.6 ADS调试器
5.1.7 实用程序
5.1.8 支持的软件
5.2 使用ADS创建工程
5.2.1 建立一个工程
5.2.2 编译和链接工程
5.2.3 Target设置选项
5.2.4 Language Settings
5.2.5 Linker设置
5.2.6 ARM fromELF工具
5.2.7 命令行下编译工程
5.3 使用AXD调试代码
5.3.1 打开调试文件
5.3.2 查看存储器内容
5.3.3 设置断点
5.3.4 查看变量值
5.4 本章小结
第6章 ARM的外部电路
6.1 核心板电路
6.1.1 晶振电路
6.1.2 复位电路
6.1.3 启动配置电路
6.1.4 Flash接口
6.1.5 SDRAM接口
6.2 底板电路
6.2.1 电源电路
6.2.2 串口电路
6.2.3 USB接口
6.2.4 以太网接口
6.2.5 JTAG调试接口
6.2.6 音频接口
6.2.7 LCD接口
6.2.8 SD卡接口
6.3 本章小结
第7章 嵌入式操作系统概述
7.1 操作系统的结构和功能
7.2 进程管理
7.2.1 进程的描述
7.2.2 进程的调度
7.3 存储管理
7.3.1 存储器的体系结构
7.3.2 内存管理的基本概念
7.3.3 连续分配存储管理方式
7.3.4 页式存储管理方式
7.4 文件管理
7.4.1 文件
7.4.2 目录
7.4.3 EXT2文件系统
7.5 设备管理
7.5.1 设备的分类
7.5.2 数据传输控制方式
7.5.3 中断处理
7.5.4 设备驱动程序
7.6 嵌入式操作系统的特点
7.6.1 嵌入式操作系统的发展
7.6.2 嵌入式操作系统的优势
7.6.3 嵌入式操作系统的分类
7.7 常见的嵌入式操作系统
7.7.1 VxWorks
7.7.2 pSOS
7.7.3 Palm OS
7.7.4 QNX
7.7.5 Windows CE
7.7.6 μC/OS-II
7.7.7 嵌入式Linux
7.8 本章小结
第8章 快速体验——构建开发环境
8.1 交叉开发环境介绍
8.2 主机与目标板的连接方式
8.2.1 串口通信接口
8.2.2 以太网接口
8.2.3 USB接口
8.2.4 JTAG接口
8.3 建立主机开发环境
8.3.1 Ubuntu 6.06的安装
8.3.2 Minicom的安装配置
8.3.3 TFTP服务的安装配置
8.3.4 NFS的安装配置
8.3.5 建立交叉工具链
8.4 启动目标板系统
8.4.1 Bootloader和Kernel
8.4.2 根文件系统
8.5 本章小结
第9章 Linux使用基础
9.1 Linux的基本概念
9.1.1 文件
9.1.2 目录
9.1.3 分区
9.1.4 挂载
9.1.5 用户系统
9.1.6 用户权限
9.1.7 shell
9.1.8 环境变量
9.2 Linux的命令行
9.2.1 执行命令
9.2.2 参数
9.2.3 重定向符号
9.2.4 获取帮助
9.3 Linux的常用命令
9.3.1 文件管理
9.3.2 内容管理
9.3.3 权限管理
9.3.4 备份压缩
9.3.5 系统设置
9.3.6 进程控制
9.3.7 网络设置
9.4 本章小结
第10章 Bootloader
10.1 Bootloader的概念
10.1.1 Bootloader所支持的嵌入式体系
10.1.2 Bootloader的安装位置
10.1.3 Bootloader的启动过程
10.1.4 Bootloader与主机的通信
10.1.5 Bootloader的操作模式
10.2 Bootloader的基本结构
10.2.1 Bootloader的stage1
10.2.2 Bootloader的stage2
10.3 vivi简介
10.3.1 vivi的体系架构
10.3.2 vivi启动的第一阶段
10.3.3 vivi启动的第二阶段
10.4 vivi的基本命令
10.4.1 mem命令
10.4.2 load命令
10.4.3 part命令
10.4.4 param命令
10.4.5 boot命令
10.4.6 go命令
10.4.7 bon命令
10.4.8 reset命令
10.4.9 help命令
10.5 U- Boot简介
10.5.1 U-Boot的特点
10.5.2 U-Boot的目录结构
10.5.3 U-Boot的启动过程
10.5.4 U-Boot的移植
10.6 U- Boot的基本命令
10.6.1 设置环境变量
10.6.2 数据通信
10.6.3 存储器操作
10.6.4 系统引导
10.6.5 其他
10.7 本章小结
第11章 Linux内核移植
11.1 Linux内核结构
11.2 Linux源码结构
11.2.1 arch目录
11.2.2 drivers目录
11.2.3 fs目录
11.2.4 其他目录
11.3 内核编译
11.3.1 编译准备
11.3.2 设置Flash分区
11.3.3 配置内核
11.4 内核配置选项
11.4.1 常规设置
11.4.2 模块和块设备层
11.4.3 CPU类型
11.4.4 电源管理
11.4.5 总线和网络
11.4.6 驱动
11.4.7 文件系统
11.4.8 其他
11.5 下载内核
11.6 内核调试
11.6.1 内核调试步骤
11.6.2 常见内核问题
11.7 本章小结
第12章 嵌入式Linux文件系统
12.1 嵌入式文件系统基础
12.1.1 NOR型Flash存储器
12.1.2 NAND型Flash存储器
12.1.3 MTD 简介
12.1.4 日志型文件系统
12.1.5 BusyBox
12.2 CramFS文件系统
12.2.1 CramFS文件系统的特性
12.2.2 CramFS文件系统映像文件的结构
12.2.3 CramFS文件系统的工作原理
12.2.4 CramFS文件系统的初始化过程
12.2.5 CramFS文件系统的制作
12.2.6 CramFS文件系统的挂载流程
12.3 YAFFS文件系统
12.3.1 YAFFS文件系统的数据存储方式
12.3.2 YAFFS文件系统的工作原理
12.3.3 YAFFS文件系统对MTD的依赖性
12.3.4 YAFFS文件系统驱动的安装流程
12.3.5 YAFFS文件系统的制作
12.4 J FFS文件系统
12.4.1 JFFS1文件系统简介
12.4.2 JFFS2文件系统简介
12.4.3 JFFS3文件系统简介
12.4.4 JFFS2文件系统的工作原理
12.4.5 JFFS2文件系统的制作
12.5 基于RAM的文件系统
12.5.1 Ramdisk文件系统
12.5.2 RamFS/TmpFS文件系统
12.6 嵌入式文件系统的设计
12.6.1 文件系统格式选择的基本策略
12.6.2 混合型文件系统格式的设计方法
12.7 本章小结
第13章 嵌入式Linux C语言开发工具
13.1 编辑器VIM
13.1.1 VIM的编辑模式
13.1.2 VIM的进入与退出
13.1.3 光标的移动
13.1.4 删除和恢复
13.1.5 复制和粘贴
13.1.6 查找和替换
13.1.7 网络资源
13.2 编译器GCC
13.2.1 GCC的编译流程
13.2.2 GCC的常用编译选项
13.2.3 实例分析
13.3 调试器GDB
13.3.1 GDB使用概述
13.3.2 GDB的使用流程
13.3.3 GdbServer远程调试
13.4 工程管理Make
13.4.1 Makefile文件介绍
13.4.2 Makefile的规则
13.4.3 Makefile的变量
13.4.4 make命令的使用
13.4.5 使用自动工具生成Makefile
13.5 集成开发环境Eclipse
13.5.1 Eclipse的安装
13.5.2 Eclipse的界面简介
13.5.3 创建Hello项目
13.5.4 调试Hello项目
13.5.5 使用CVS进行版本管理
13.6 本章小结
第14章 快速体验—嵌入式C语言开发流程
14.1 命令行下的开发流程
14.1.1 编写代码
14.1.2 编译程序
14.1.3 运行程序
14.1.4 交叉编译
14.1.5 编写Makefile
14.2 基于Eclipse的开发流程
14.2.1 下载和安装Eclipse
14.2.2 新建工程
14.2.3 编写代码
14.2.4 编译工程
14.2.5 运行程序
14.3 本章小结
第15章 嵌入式Linux C语言基础
15.1 C语言概述
15.1.1 C语言的特点
15.1.2 C语言程序的总体结构
15.1.3 C语言的语句
15.1.4 C语言的关键字
15.1.5 C语言程序设计步骤
15.2 数据类型
15.2.1 基本数据类型
15.2.2 常量与变量
15.2.3 整型数据、实型数据
15.2.4 字符型数据
15.3 运算符
15.3.1 算术运算符
15.3.2 关系和逻辑运算符
15.3.3 位操作符
15.3.4 ?操作符
15.3.5 表达式的优先级
15.4 表达式
15.4.1 类型转换
15.4.2 构成符cast和可读性
15.5 流程控制
15.5.1 格式输入/输出
15.5.2 顺序程序设计
15.5.3 选择结构设计
15.5.4 循环结构设计
15.6 函数
15.6.1 概述
15.6.2 函数定义的一般形式
15.6.3 函数的参数和函数的值
15.6.4 函数的调用
15.6.5 局部变量和全局变量
15.7 数组与指针
15.7.1 数组
15.7.2 指针的基本概念
15.7.3 指针与数组
15.7.4 指针与字符串
15.7.5 指针与函数
15.7.6 指针其他用法
15.7.7 动态内存管理
15.8 复杂数据结构
15.8.1 结构体定义
15.8.2 结构体使用
15.8.3 链表
15.8.4 枚举类型
15.8.5 共用体类型
15.9 本章小结
第16章 嵌入式Linux C语言标准库
16.1 Glibc简介
16.2 字符测试和数据转换函数
16.2.1 字符测试函数
16.2.2 数据转换函数
16.3 基本I/O函数
16.3.1 open()函数
16.3.2 close()函数
16.3.3 read()函数和write()函数
16.3.4 其他函数
16.4 标准I/O函数
16.4.1 fopen()函数
16.4.2 fclose()函数
16.4.3 fread()函数和fwrite()函数
16.4.4 printf()函数和scanf()函数
16.4.5 其他函数
16.5 内存配置及字符串处理函数
16.5.1 内存分配函数
16.5.2 memXXX函数
16.5.3 strXXX函数
16.5.4 释放内存的函数
16.5.5 动态内存分配的实例
16.6 日期时间函数
16.6.1 时间的定义
16.6.2 日历时间
16.6.3 时钟计时单元
16.6.4 格式化日期和时间
16.6.5 自定义时间格式
16.7 其他函数
16.7.1 错误处理函数
16.7.2 系统日志函数
16.7.3 环境管理函数
16.8 本章小结
第17章 嵌入式Linux的多任务编程
17.1 什么是多任务
17.1.1 对话级多任务
17.1.2 进程级多任务
17.1.3 线程级多任务
17.1.4 多任务处理的特点
17.2 进程
17.2.1 进程的概念
17.2.2 进程的数据结构
17.2.3 进程的创建
17.2.4 文件描述符共享
17.2.5 vfork()函数
17.2.6 exec()函数族
17.2.7 执行新程序
17.2.8 进程的终止
17.2.9 进程的退出状态
17.2.10 Zombie进程
17.3 线程
17.3.1 线程的概念
17.3.2 线程的创建
17.3.3 线程的终止
17.3.4 线程的基本属性
17.3.5 线程属性的修改
17.3.6 线程的扩展属性
17.4 线程池
17.4.1 线程池的工作原理
17.4.2 线程池的实现
17.4.3 工作状态的记录
17.4.4 线程池的测试
17.5 本章小结
第18章 多任务间通信和同步
18.1 信号
18.1.1 信号的概念
18.1.2 信号的产生
18.1.3 kill()函数和raise()函数
18.1.4 alarm()函数和pause()函数
18.1.5 about()函数
18.1.6 信号的处理
18.1.7 signal()函数
18.1.8 sigaction()函数
18.1.9 信号集
18.1.10 sigprocmask()函数
18.1.11 sigpending()函数
18.1.12 sigsuspend()函数
18.2 管道
18.2.1 管道的相关概念
18.2.2 管道的创建
18.2.3 多进程中的管道通信
18.2.4 管道的应用实例
18.2.5 FIFO的相关概念
18.2.6 FIFO的创建
18.2.7 FIFO的读写规则
18.2.8 FIFO的应用实例
18.3 共享内存
18.3.1 系统调用mmap()
18.3.2 系统调用munmap()
18.3.3 系统调用msync()
18.3.4 mmap()的应用实例
18.4 System V共享内存
18.4.1 系统调用shmget()
18.4.2 系统调用shmat()
18.4.3 系统调用shmdt()
18.4.4 System V共享内存的应用实例
18.5 消息队列
18.5.1 系统调用msgget()
18.5.2 系统调用msgsnd()
18.5.3 系统调用msgrcv()
18.5.4 系统调用msgctl()
18.5.5 消息队列的应用实例
18.6 System V信号量
18.6.1 系统调用semget()
18.6.2 系统调用semop()
18.6.3 系统调用semctl()
18.6.4 System V信号量的应用实例
18.7 POSIX信号量
18.7.1 系统调用sem_init()
18.7.2 系统调用sem_wait()
18.7.3 系统调用sem_post()
18.7.4 系统调用sem_destory()
18.7.5 POSIX信号量的应用实例
18.8 互斥锁
18.8.1 系统调用pthread_mutex_init()
18.8.2 系统调用pthread_mutex_lock()
18.8.3 系统调用pthread_mutex_trylock()
18.8.4 系统调用pthread_mutex_unlock()
18.8.5 系统调用pthread_mutex_destory()
18.8.6 互斥锁的应用实例
18.9 条件变量
18.9.1 系统调用pthread_cond_init()
18.9.2 系统调用pthread_cond_wait()
18.9.3 系统调用pthread_cond_timedwait()
18.9.4 系统调用pthread_cond_signal()
18.9.5 系统调用pthread_cond_broadsignal()
18.9.6 系统调用pthread_cond_destroy()
18.9.7 条件变量的应用实例
18.10 本章小结
第19章 设备驱动开发基础
19.1 Linux设备管理和驱动概述
19.1.1 Linux设备的分类
19.1.2 设备驱动程序的作用
19.1.3 访问设备的实现
19.1.4 Linux设备控制方式
19.2 Linux设备驱动开发流程
19.2.1 构造和运行模块
19.2.2 字符设备驱动编写
19.2.3 字符设备驱动实例
19.2.4 并发控制
19.2.5 阻塞与非阻塞
19.2.6 select和poll
19.2.7 中断处理
19.2.8 内存与I/O操作
19.3 块设备驱动编写
19.3.1 块设备的I/O操作特点
19.3.2 block_device_operations结构体
19.3.3 gendisk结构体
19.3.4 request结构体
19.3.5 request操作函数
19.3.6 bio结构体
19.3.7 注册与注销
19.3.8 加载与卸载
19.3.9 打开与释放
19.3.10 ioctl()函数
19.3.11 I/O请求处理
19.4 本章小结
第20章 嵌入式Linux的网络编程
20.1 TCP/IP协议
20.2 TCP协议
20.2.1 TCP连接建立的过程
20.2.2 TCP连接的标识
20.2.3 关闭TCP连接
20.3 UDP协议
20.4 socket简介
20.4.1 socket的定义
20.4.2 socket的类型
20.5 TCP Server程序设计
20.5.1 TCP的通信过程
20.5.2 TCP Server程序
20.5.3 网络地址的表示
20.5.4 建立socket
20.5.5 绑定本地地址
20.5.6 字节顺序转换
20.5.7 IP地址转换
20.5.8 listen()函数
20.5.9 等待连接
20.5.10 数据通信
20.5.11 关闭套接字
20.6 TCP Client程序设计
20.6.1 DNS操作
20.6.2 连接服务器
20.6.3 测试实例
20.7 UDP通信的程序设计
20.7.1 UDP的通信过程
20.7.2 UDP通信服务器端
20.7.3 UDP通信客户端
20.8 多线程文件服务器
20.8.1 文件服务器主程序
20.8.2 动态分配监听端口
20.8.3 多线程服务器的实现
20.8.4 大数据量的读写函数
20.8.5 客户端测试例程
20.8.6 编译和测试
20.9 Proxy源代码分析
20.9.1 主函数main()
20.9.2 参数处理函数parse_args()
20.9.3 守护进程函数daemonize()
20.9.4 代理服务函数do_proxy()
20.9.5 错误信息函数errorout()
20.10 本章小结
第21章 MiniGUI图形界面设计
21.1 MiniGUI概述
21.1.1 MiniGUI的特点
21.1.2 MiniGUI v1.3.3软件包
21.1.3 MiniGUI运行模式
21.2 MiniGUI的安装和使用
21.2.1 安装MiniGUI库
21.2.2 安装MiniGUI的资源
21.2.3 配置MiniGUI
21.2.4 编译应用程序例子
21.2.5 交叉编译MiniGUI库
21.2.6 交叉编译例程
21.2.7 QVFB图形引擎
21.2.8 FrameBuffer图形引擎
21.3 利用Eclipse编写MiniGUI程序
21.3.1 建立vacs工程
21.3.2 配置编译选项
21.3.3 配置外部工具QVFB
21.3.4 运行vacs
21.3.5 调试vacs
21.4 MiniGUI的编程基础
21.4.1 头文件
21.4.2 程序入口
21.4.3 创建和显示主窗口
21.4.4 进入消息循环
21.4.5 窗口过程函数
21.4.6 屏幕输出
21.4.7 程序的退出
21.5 消息循环和窗口过程
21.5.1 消息处理函数
21.5.2 重要的消息
21.5.3 窗口及窗口过程
21.6 对话框和控件编程
21.6.1 控件的概念
21.6.2 预定义控件
21.6.3 自定义控件
21.6.4 控件子类化
21.6.5 对话框和对话框模板
21.6.6 模态和非模态对话框
21.7 图形设备接口
21.7.1 图形设备上下文
21.7.2 矩形操作和区域操作
21.7.3 像素值和调色板
21.7.4 位图操作函数
21.7.5 字体和文本输出
21.7.6 绘制图形
21.8 其他功能
21.8.1 读写配置文件
21.8.2 定点数运算
21.9 MiniQQ界面设计
21.9.1 登录窗口
21.9.2 好友列表窗口
21.9.3 聊天窗口
21.9.4 其他
21.10 本章小结
第22章 CAN总线驱动设计
22.1 CAN总线介绍
22.2 SJ A1000介绍
22.2.1 SJA1000的特性
22.2.2 SJA1000内部原理
22.3 SJ A1000寄存器介绍
22.3.1 控制寄存器CR
22.3.2 命令寄存器CMR
22.3.3 状态寄存器SR
22.3.4 中断寄存器IR
22.3.5 发送缓冲器
22.3.6 接收缓冲器
22.3.7 验收滤波器
22.4 SJ A1000与S3C2440连接
22.5 SJ A1000的驱动程序
22.5.1 驱动程序源代码
22.5.2 测试的操作方法
22.6 本章小结
第23章 SD卡驱动设计
23.1 SD卡概述及协议
23.1.1 SD卡概述
23.1.2 SD卡协议
23.2 SD卡驱动设计
23.2.1 块设备驱动设计
23.2.2 SD卡驱动程序分析
23.2.3 SD卡驱动程序设计
23.3 本章小结
第24章 网络驱动设计
24.1 Linux网络设备概述
24.2 DM9000芯片介绍
24.3 重要的数据结构
24.3.1 通用部分
24.3.2 硬件相关部分
24.3.3 物理层相关数据
24.3.4 网络层协议相关部分
24.3.5 服务处理部分
24.4 网络设备初始化
24.5 激活和关闭网络设备
24.6 中断控制的实现
24.7 发送过程的实现
24.8 接收过程的实现
24.8.1 sk_buff结构
24.8.2 接收函数的实现
24.9 其他接口函数
24.10 本章小结
第25章 综合案例——嵌入式B超
25.1 系统终端的结构设计
25.1.1 总体结构
25.1.2 显示控制芯片选型
25.2 系统终端的软件设计
25.2.1 U-Boot
25.2.2 嵌入式Linux移植
25.2.3 MiniGUI移植
25.3 FPGA与ARM接口设计
25.3.1 硬件连接
25.3.2 FPGA驱动程序设计
25.4 显示芯片的连接与控制
25.4.1 选择SM501的原因
25.4.2 SM501驱动程序设计
25.5 超声动态图像的实时显示
25.5.1 图像动态显示
25.5.2 坐标转换和灰度插值
25.6 图形界面的结构
25.6.1 需求分析
25.6.2 总体结构
25.6.3 网络通信
25.6.4 多线程编程
25.7 操作界面设计
25.7.1 区域分配
25.7.2 键盘响应
25.7.3 控件设计
25.8 测量模块设计
25.8.1 椭圆的画法
25.8.2 椭圆测量周长和面积
25.8.3 轨迹法测量面积
25.9 本章小结
前言
  你想知道手中的MP4由什么组成吗?
  你想亲手制作一个电子相框吗?
  你想深入研究操作系统内核,学习编写驱动程序吗?
  你想为嵌入式系统设计功能强大的图形界面吗?
  你想知道一个真实的嵌入式系统是如何从无到有建立起来的吗?
  本书将通过作者亲身开发的经验带给你详细实用的解答。
  嵌入式Linux开发的前景
  嵌入式产业发展迅猛,已成为计算机体系的重要组成部分。嵌入式系统产品正不断渗透到各个行业之中,其产业增幅也不断加大。在后PC技术时代,嵌入式系统将拥有最大的市场。任何一个普通人都可以拥有从小到大的各种使用嵌入式技术的电子产品,小到手机、MP3等,大到智能家电、车载电子设备等。在工业和服务领域中,使用嵌入式技术的数字机床、工业机器人、安全系统等也在逐渐改变传统工业和服务方式。正是因为如此大的需求,促使笔者结合多年的开发经验,编写了本书。
  本书特点
  1.注重读者的学习与接受情况。在嵌入式Linux系统下进行开发,一个很大的困难就是各种工具纷繁复杂,不知从何入手。本书在每个部分都安排了一章,引导读者一步一步熟悉各种开发工具和环境,使读者首先建立起感性认识,为进一步深入学习打下基础。
  2.代码注释规范细致。为了便于读者学习,在实例代码中,进行了非常详细的注释,这些注释可以引导读者理解和掌握编写程序的关键过程。例如,下面的代码是C语言标准库章节中的实例。在实例中,代码的文件名、代码的作用和重要函数的功能提示,都体现在了代码注释中。
精彩书摘
  3.解决措施 (1)在无铅焊接时要选用高Tg值和Td值的层压材料。(2)尽量选用a2橡胶态中Z—CTE偏小的基板材料。(3)在确保产品质量和可靠性要求的前提下,应尽量靠近上述给出的峰值温度范围的低端,选取焊接峰值温度和时间。美国微电子封装专家C.G.Woychik指出:“使用通常的SnPb合金,在再流焊接时元器件和PCB所能承受的最高温度为240℃。而当使用SnAgCu(无铅)合金时,JEDEC规定最高温度为260℃。温度提高了就可能危及电子封装组装的完整性,特别是对许多叠层结构材料,易使各层间发生脱层,尤其是那些含有较多潮气的新材料。内部含有的潮气和温度的升高相结合,将使大多数常用的叠层板(HDI积层多层PCB)发生大范围的脱层。” 经过综合分析,在HDI积层多层PCB的无铅再流焊接中,当使用SnAgCu焊料合金时,峰值温度建议取为235℃,最高不要超过245℃。实践表明,采取此措施后,效果非常明显。No.064 再流焊接过程中的“墓碑缺陷 1.现象表现及描述 电子产品自进入表面组装之后,在大批量再流焊接工艺过程中,无源片式元器件的“墓碑”现象给PCBA组装焊接增加了许多麻烦。随着SMC/SMD的微小型化,再流焊接时经常会发生片式元器件的一端焊附在PCB的焊盘上,另一端翘起离开焊盘的现象,因此这种现象通常又称为“墓碑”现象,也有称“曼哈顿”现象或“立碑”现象的,如图5.19和图5.20所示。无铅焊料更高的熔点及更大的表面张力,将使阻容元器件在再流焊接过程中发生“墓碑”的现象更加严重。2.形成原因及机理 1)初始润湿的差并 造成“墓碑”的原因之一,是无源元器件两端焊料的初始润湿力不同所致,这种不同来自于两个焊端表面的温度和可焊性的差异。理想状态下,元器件两个焊端都会同时进行再流、润湿并形成焊点。此时,作用在两个焊端的力(如润湿力和焊料的表面张力)将同时作用并互相抵消。但如果不是这样,若其中一个焊端更快地进行再流和润湿,那么作用在该焊端上形成焊点的力,就可能使元器件另一个焊料还没有融化的焊端抬起来,从而形成“墓碑”现象。润湿机理包括三个重要参数:一是初始润湿时间,二是润湿力,三是完全润湿时间。发生完全润湿的时间长短直接关系到墓碑缺陷的产生,因为完全润湿发生时,在焊点和元器件上的作用力最大。如果元器件的一个焊端比另一个焊端先达到完全润湿,那么润湿力就有可能把元器件抬起来。"