《ARM嵌入式Linux系统开发详解目录.pdf》由会员分享,可在线阅读,更多相关《ARM嵌入式Linux系统开发详解目录.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 目录 VI目 录 第 1 篇 Linux 嵌入式开发基础篇 第 1 章 嵌入式系统入门.2 1.1 什么是嵌入式系统.2 1.2 嵌入式系统应用领域.2 1.2.1 家用电器.2 1.2.2 交通工具.3 1.2.3 公共电子设施.3 1.3 嵌入式系统发展.4 1.3.1 嵌入式微控制器.4 1.3.2 嵌入式微处理器.5 1.3.3 未来嵌入式系统发展的方向.6 1.4 典型的嵌入式系统组成.6 1.5 小结.7 第 2 章 嵌入式软硬件系统.8 2.1 电路基本知识.8 2.1.1 什么是模拟电路.8 2.1.2 什么是数字电路.8 2.1.3 数制转换.9 2.2 计算机组成原理.1
2、0 2.2.1 计算机体系的发展.10 2.2.2 中央处理器.10 2.2.3 存储系统.11 2.2.4 总线系统.12 2.2.5 输入输出系统.12 2.3 软件基础知识.12 2.3.1 什么是软件.13 2.3.2 软件开发流程.13 目录 VII2.3.3 常见的软件开发模型.14 2.3.4 计算机编程语言.14 2.3.5 数据结构.15 2.4 操作系统知识.15 2.4.1 什么是操作系统.16 2.4.2 操作系统的发展历史.16 2.4.3 操作系统由什么组成.16 2.4.4 几种操作系统的设计思路.17 2.4.5 操作系统分类.17 2.5 小结.18 第 3
3、章 ARM 处理器.19 3.1 微处理器和微控制器.19 3.2 ARM 处理器介绍.19 3.2.1 ARM 微处理器的应用领域.20 3.2.2 ARM 的功能特点.20 3.3 ARM 指令集.21 3.3.1 算术运算指令.21 3.3.2 逻辑运算指令.22 3.3.3 分支指令.23 3.3.4 数据传送指令.23 3.4 ARM 的结构.24 3.4.1 ARM 体系结构的命名方法.24 3.4.2 处理器系列划分.25 3.4.3 处理器工作模式.25 3.4.4 存储系统.26 3.4.5 寻址方式.27 3.5 ARM 的功能选型.29 3.5.1 ARM 的选型原则.2
4、9 3.5.2 几种常见的 ARM 核处理器选型参考.32 3.6 小结.32 第 4 章 嵌入式 Linux.33 4.1 常见的嵌入式操作系统.33 4.1.1 VxWorks.33 4.1.2 Windows CE.34 4.1.3 PalmOS.34 4.1.4 Symbian.34 4.2 嵌入式 Linux 操作系统.34 目录 VIII4.2.1 什么是 Linux.35 4.2.2 Linux 与 UNIX 的不同GPL 版权协议介绍.35 4.2.3 Linux 发行版.36 4.2.4 常见的嵌入式 Linux 系统.37 4.3 小结.37 第 5 章 建立软件开发环境.
5、38 5.1 独立的 Linux 系统.38 5.1.1 安装 Ubuntu Linux.38 5.1.2 关键一步系统的网络设置.46 5.1.3 其他必要的设置.46 5.1.4 怎样安装卸载软件.48 5.1.5 怎样配置系统服务.48 5.1.6 安装主要的开发工具.48 5.1.7 安装其他的开发工具和文档.49 5.2 运行在 Windows 上的 Linux 系统.50 5.2.1 什么是 Cygwin.50 5.2.2 如何安装 Cygwin.50 5.2.3 安装开发环境.54 5.3 Linux 常用工具.54 5.3.1 Linux shell 和常用命令.55 5.3.
6、2 文本编辑工具 vi.56 5.3.3 搜索工具 find 和 grep.57 5.3.4 FTP 工具.61 5.3.5 串口工具 minicom.63 5.4 Windows 常用工具.65 5.4.1 代码编辑管理工具 Source Insight.65 5.4.2 串口工具 XShell.71 5.5 ARM 集成开发环境 ADS.72 5.5.1 ADS 集成开发环境介绍.73 5.5.2 配置 ADS 调试环境.73 5.5.3 建立自己的工程.75 5.6 小结.78 第 6 章 第一个 Linux 应用程序.79 6.1 向世界问好Hello,World!.79 6.1.1
7、用 vi 编辑源代码文件.79 6.1.2 用 gcc 编译程序.80 6.1.3 执行程序.80 目录 IX6.2 程序背后做了什么.80 6.2.1 程序执行的过程.81 6.2.2 窥视程序执行中的秘密.82 6.2.3 动态库的作用.83 6.3 程序如何来的编译的全部过程.84 6.3.1 编译源代码.84 6.3.2 连接目标文件到指定的库.85 6.4 更简单的办法用 Makefile 管理工程.86 6.4.1 什么是 Makefile.87 6.4.2 它是如何工作的.87 6.4.3 如何使用 Makefile.87 6.4.4 好的源代码管理习惯.88 6.5 小结.88
8、 第 2 篇 Linux 嵌入式开发应用篇 第 7 章 Linux 应用程序编程基础.90 7.1 内存管理和使用.90 7.1.1 堆和栈的区别.90 7.1.2 内存管理函数 malloc()和 free().93 7.1.3 实用的内存分配函数 calloc()和 realloc().93 7.1.4 内存管理编程实例.94 7.2 ANSI C 文件管理.97 7.2.1 文件指针和流.97 7.2.2 存储方式.98 7.2.3 标准输入、标准输出和标准错误.98 7.2.4 缓冲.98 7.2.5 打开关闭文件.99 7.2.6 读写文件.100 7.2.7 文件流定位.103 7
9、.2.8 ANSI C 文件编程实例.103 7.3 POSIX 文件 I/O 编程.104 7.3.1 底层的文件 I/O 操作.104 7.3.2 文件描述符.104 7.3.3 创建/打开/关闭文件.105 7.3.4 读写文件内容.108 7.3.5 文件内容定位.109 目录 X7.3.6 修改已打开文件的属性.110 7.3.7 POSIX 文件编程实例.110 7.4 小结.112 第 8 章 开发多进程/线程程序.113 8.1 多进程开发.113 8.1.1 什么是进程.113 8.1.2 进程环境和属性.114 8.1.3 创建进程.115 8.1.4 等待进程结束.117
10、 8.1.5 退出进程.118 8.1.6 常用进程间通信的方法.120 8.1.7 进程编程实例.124 8.2 多线程开发.125 8.2.1 线程的概念.126 8.2.2 进程和线程对比.126 8.2.3 创建线程.127 8.2.4 取消线程.128 8.2.5 等待线程.129 8.2.6 使用 pthread 库线程操作实例.129 8.3 小结.131 第 9 章 网络通信应用.132 9.1 网络通信基础.132 9.1.1 TCP/IP 协议族.132 9.1.2 IP 协议.133 9.1.3 TCP 协议.135 9.1.4 UDP 协议.135 9.1.5 学习分析
11、协议的方法.135 9.2 Socket 通信基本概念.137 9.2.1 创建 socket 对象.138 9.2.2 面向连接的 Socket 通信实现.138 9.2.3 面向连接的 Echo 服务编程实例.140 9.2.4 无连接的 Socket 通信实现.144 9.2.5 无连接的时间服务编程实例.145 9.3 Socket 高级应用.148 9.3.1 Socket 超时处理.148 9.3.2 使用 Select 机制处理多连接.149 9.3.3 使用 Poll 机制处理多连接.151 目录 XI9.3.4 多线程环境 Socket 编程.152 9.4 小结.152 第
12、 10 章 串行口通信编程.154 10.1 串口介绍.154 10.1.1 什么是串口.154 10.1.2 串口工作原理.154 10.1.3 串口流量控制.155 10.2 开发串口应用程序.156 10.2.1 操作串口需要用到的头文件.156 10.2.2 串口操作方法.157 10.2.3 串口属性设置.157 10.2.4 与 Windows 串口终端通信.161 10.3 串口应用实例手机短信发送.163 10.3.1 PC 与手机连接发送短信的物理结构.164 10.3.2 AT 指令介绍.164 10.3.3 GSM AT 指令集.165 10.3.4 PDU 编码方式.1
13、65 10.3.5 建立与手机的连接.167 10.3.6 使用 AT 指令发送短信.167 10.4 小结.171 第 11 章 嵌入式 GUI 程序开发.172 11.1 Linux GUI 介绍.172 11.1.1 Linux GUI 的发展.172 11.1.2 常见的嵌入式 GUI.173 11.2 开发图形界面程序.174 11.2.1 安装 Qt 开发环境.174 11.2.2 建立简单的 Qt 程序.176 11.2.3 Qt 库编程结构.178 11.3 深入 Qt 编程.179 11.3.1 使用 Widget.179 11.3.2 对话框程序设计.181 11.3.3
14、信号与槽系统.185 11.4 移植 Qtopia 到 ARM 开发板.186 11.4.1 需要的资源.186 11.4.2 准备工作.187 11.4.3 编译主机 Qt 工具.187 11.4.4 交叉编译 qtopia.189 目录 XII11.5 小结.190 第 12 章 软件项目管理.191 12.1 源代码管理.191 12.1.1 什么是软件的版本.191 12.1.2 版本控制的概念.192 12.2 版本控制系统 Subversion.193 12.2.1 在 Linux 系统下使用 Subversion 服务端.193 12.2.2 在 Windows 系统下使用 To
15、rtoiseSVN 客户端.195 12.3 开发文档管理常见的开发文档.199 12.3.1 可行性研究报告.200 12.3.2 项目开发计划.200 12.3.3 软件需求说明书.200 12.3.4 概要设计.200 12.3.5 详细设计.200 12.3.6 用户手册.201 12.3.7 其他文档.201 12.4 使用 trac 管理软件开发文档.201 12.4.1 安装 trac.201 12.4.2 配置 trac 基本设置.202 12.4.3 配置 trac 全局脚本.204 12.4.4 设置 trac 的 Web 界面.205 12.5 Bug 跟踪系统.208
16、12.5.1 Bug 管理的概念和作用.208 12.5.2 使用 Bugzilla 跟踪 Bug.208 12.6 小结.211 第 3 篇 Liux 系统篇 第 13 章 ARM 体系结构及开发实例.214 13.1 ARM 体系结构介绍.214 13.1.1 ARM 体系结构.214 13.1.2 ARM 指令集介绍.215 13.2 编程模型.216 13.2.1 数据类型.216 13.2.2 处理器模式.216 13.2.3 寄存器.217 目录 XIII13.2.4 通用寄存器.217 13.2.5 程序状态寄存器.219 13.2.6 异常处理.219 13.2.7 内存和内存
17、 I/O 映射.220 13.3 内存管理单元.221 13.3.1 内存管理介绍.221 13.3.2 内存访问顺序.222 13.3.3 地址翻译过程.222 13.3.4 访问权限.223 13.4 常见接口和控制器.223 13.4.1 GPIO 接口.223 13.4.2 中断控制器.224 13.4.3 RTC 控制器.224 13.4.4 看门狗定时器.225 13.4.5 试验:使用 GPIO 点亮 LED.226 13.5 小结.227 第 14 章 深入 Bootloader.228 14.1 初识 Bootloader.228 14.1.1 PC(个人电脑)上的 Boot
18、loader.228 14.1.2 什么是嵌入式系统的 Bootloader.229 14.1.3 嵌入式系统常见的 Bootloader.229 14.2 U-Boot 分析.230 14.2.1 获取 U-Boot.230 14.2.2 U-Boot 工程结构分析.230 14.2.3 U-Boot 总体工作流程.232 14.3 U-Boot 启动流程分析.233 14.3.1 _start 标号.233 14.3.2 reset 标号.235 14.3.3 cpu_init_crit 标号.237 14.3.4 lowlevel_init 标号.238 14.3.5 relocate
19、标号.239 14.3.6 start_armboot()函数.240 14.3.7 main_loop()函数.244 14.4 移植 U-Boot 到开发板.248 14.4.1 U-Boot 移植的一般步骤.248 14.4.2 移植 U-Boot 到目标开发板.249 14.4.3 移植 U-Boot 的常见问题.250 目录 XIV 14.5 小结.251 第 15 章 解析 Linux 内核.252 15.1 基本知识.252 15.1.1 什么是 Linux 内核.252 15.1.2 Linux 内核版本.253 15.1.3 如何获取 Linux 内核代码.253 15.1.
20、4 编译内核.253 15.2 Linux 内核的子系统.260 15.2.1 系统调用接口.260 15.2.2 进程管理子系统.261 15.2.3 内存管理子系统.262 15.2.4 虚拟文件系统.263 15.2.5 网络堆栈.264 15.2.6 设备驱动.265 15.2.7 依赖体系结构的代码.266 15.3 Linux 内核代码的工程结构.266 15.3.1 源代码目录布局.266 15.3.2 几个重要的 Linux 内核文件.267 15.4 内核编译系统.268 15.4.1 内核编译系统基本架构.269 15.4.2 内核顶层 Makefile 分析.269 15
21、.4.3 内核编译文件分析.274 15.4.4 目标文件清除机制.278 15.4.5 编译辅助程序.279 15.4.6 KBuild 变量.281 15.5 小结.282 第 16 章 嵌入式 Linux 启动流程.283 16.1 Linux 内核初始化流程.283 16.2 PC 的初始化流程.284 16.2.1 PC BIOS 功能和作用.284 16.2.2 硬盘的数据结构.285 16.2.3 完整的初始化流程.286 16.3 嵌入式系统的初始化.286 16.4 Linux 内核初始化.287 16.4.1 解压缩内核映像.287 16.4.2 进入内核代码.289 16
22、.5 启动 init 内核进程.291 目录 XV16.6 根文件系统初始化.292 16.6.1 根文件系统介绍.292 16.6.2 挂载虚拟文件系统.294 16.7 内核交出权限.300 16.8 init 进程.300 16.9 初始化 RAM Disk.301 16.9.1 RAM Disk 介绍.301 16.9.2 如何使用 RAM Disk.302 16.9.3 实例:使用 RAM Disk 作为根文件系统.302 16.10 小结.303 第 17 章 Linux 文件系统.304 17.1 Linux 文件管理.304 17.1.1 文件和目录的概念.304 17.1.2
23、 文件的结构.305 17.1.3 文件的类型.305 17.1.4 文件系统的目录结构.307 17.1.5 文件和目录的存取权限.308 17.1.6 文件系统管理.310 17.2 Linux 文件系统原理.311 17.2.1 非日志文件系统.311 17.2.2 日志文件系统.311 17.3 常见的 Linux 文件系统.312 17.3.1 ext2 文件系统.312 17.3.2 ext3 文件系统.315 17.3.3 ReiserFS 文件系统.315 17.3.4 JFFS 文件系统.316 17.3.5 cramfs 文件系统.318 17.4 其他文件系统.319 1
24、7.4.1 网络文件系统.319 17.4.2 /proc 影子文件系统.320 17.5 小结.323 第 18 章 建立交叉编译工具链.324 18.1 什么是交叉编译.324 18.2 需要哪些东西.325 18.3 手工创建工具链.325 18.3.1 准备工作获取源代码.326 18.3.2 开始了建立工作环境.326 目录 XVI 18.3.3 建立 Linux 内核头文件.327 18.3.4 编译安装 binutils.330 18.3.5 编译安装 gcc 的 C 编译器.331 18.3.6 编译安装 glibc 库.332 18.3.7 编译安装 gcc 的 C、C+编译
25、器.333 18.3.8 最后的工作.334 18.4 使用脚本创建工具链.334 18.5 更简便的方法获取已编译好的交叉编译环境.336 18.6 小结.336 第 19 章 强大的命令系统 BusyBox.337 19.1 BusyBox 简介.337 19.1.1 简单易懂的 BusyBox.337 19.1.2 BusyBox 工作原理.338 19.1.3 安装 BusyBox.339 19.2 交叉编译 BusyBox.341 19.3 使用 BusyBox.343 19.3.1 BusyBox 初始化.344 19.3.2 目标板 BusyBox 安装.346 19.4 小结.
26、348 第 20 章 Linux 内核移植.349 20.1 Linux 内核移植要点.349 20.2 平台相关代码结构.350 20.3 建立目标平台工程框架.351 20.3.1 加入编译菜单项.352 20.3.2 设置宏与代码文件的对应关系.352 20.3.3 测试工程框架.353 20.4 建立目标平台代码框架.354 20.4.1 ARM 处理器相关结构.354 20.4.2 建立 machine_desc 结构.356 20.4.3 加入处理函数.356 20.4.4 加入定时器结构.357 20.4.5 测试代码结构.357 20.5 构建目标板代码.357 20.5.1
27、处理器初始化.358 20.5.2 端口映射.360 20.5.3 中断处理.361 目录 XVII20.5.4 定时器处理.361 20.5.5 编译最终代码.361 20.6 小结.362 第 21 章 内核和应用程序调试技术.363 21.1 使用 GDB 调试应用程序概述.363 21.2 基本的调试技术.363 21.2.1 列出源代码.366 21.2.2 断点管理.368 21.2.3 执行程序.370 21.2.4 显示程序变量.370 21.2.5 信号管理.371 21.2.6 调试实例.371 21.3 多进程调试.372 21.4 调试意外终止的程序.374 21.5
28、内核调试技术.376 21.5.1 printk 打印调试信息.376 21.5.2 使用/proc 虚拟文件系统.377 21.5.3 使用 KDB 调试工具.379 21.5.4 KDB 调试指令.382 21.6 小结.384 第 4 篇 Linux 嵌入式驱动开发篇 第 22 章 Linux 设备驱动.386 22.1 设备驱动介绍.386 22.2 Linux 内核模块.386 22.2.1 内核模块简介.387 22.2.2 内核模块的结构.387 22.2.3 内核模块的加载和卸载.388 22.2.4 编写一个基本的内核模块.389 22.2.5 编译内核模块.390 22.2
29、.6 为内核模块添加参数.391 22.3 Linux 设备驱动.392 22.3.1 PCI 局部总线介绍.392 22.3.2 Linux 设备驱动基本概念.393 目录 XVIII 22.3.3 字符设备.394 22.3.4 块设备.396 22.3.5 网络设备.396 22.4 字符设备驱动开发实例.396 22.4.1 开发一个基本的字符设备驱动.397 22.4.2 测试字符设备驱动.399 22.5 小结.400 第 23 章 网络设备驱动程序.401 23.1 网络基础知识.401 23.1.1 ISO/OSI 网络参考模型.401 23.1.2 TCP/IP 协议.402
30、 23.2 以太网基础.404 23.2.1 工作原理.405 23.2.2 常见以太网标准.405 23.2.3 拓扑结构.406 23.2.4 工作模式.406 23.3 网卡工作原理.407 23.4 内核网络分层结构.408 23.4.1 内核网络结构.408 23.4.2 与网络有关的数据结构.409 23.4.3 内核网络部分的全局变量.410 23.5 内核网络设备驱动框架.411 23.5.1 net_device 结构.411 23.5.2 数据包接收流程.413 23.5.3 数据包发送流程.415 23.6 实例:DM9000 网卡驱动分析.416 23.6.1 DM90
31、00 芯片介绍.416 23.6.2 网卡驱动程序框架.416 23.6.3 DM9000 网卡驱动主要数据结构.417 23.6.4 加载驱动程序.418 23.6.5 停止和启动网卡.423 23.6.6 发送数据包.425 23.6.7 接收数据包.427 23.6.8 中断和定时器处理.429 23.7 小结.431 第 24 章 Flash 设备驱动.432 24.1 Linux Flash 驱动结构.432 目录 XIX24.1.1 什么是 MTD.432 24.1.2 MTD 系统结构.433 24.2 Flash 设备基础.434 24.2.1 存储原理.434 24.2.2
32、性能比较.435 24.3 内核 MTD 层.436 24.3.1 mtd_info 结构.436 24.3.2 mtd_part 结构.439 24.3.3 mtd_partition 结构.440 24.3.4 map_info 结构.440 24.3.5 nand_chip 结构.442 24.4 Flash 设备框架.443 24.4.1 NOR Flash 设备驱动框架.443 24.4.2 NAND Flash 设备驱动框架.444 24.5 Flash 设备驱动实例NOR Flash 设备驱动剖析.445 24.5.1 数据结构.446 24.5.2 驱动初始化.446 24.5
33、.3 驱动卸载.447 24.6 Flash 设备驱动实例NAND Flash 设备驱动分析.448 24.6.1 S3C2440 NAND 控制器介绍.448 24.6.2 数据结构.450 24.6.3 驱动初始化.450 24.6.4 驱动卸载.454 24.6.5 初始化 NAND 控制器.455 24.6.6 设置芯片操作.456 24.6.7 电源管理.458 24.7 小结.459 第 25 章 USB 驱动开发.460 25.1 USB 体系介绍.460 25.1.1 USB 设计目标.460 25.1.2 USB 体系概述.461 25.1.3 USB 体系工作流程.462 25.2 USB 驱动程序框架.462 25.2.1 Linux 内核 USB 驱动框架.462 25.2.2 主机驱动结构.465 25.2.3 设备驱动结构.468 25.2.4 USB 驱动程序框架.470 目录 XX 25.3 USB 驱动实例剖析.473 25.3.1 USB 串口驱动.473 25.3.2 USB 键盘驱动.475 25.4 小结.478