ARM嵌入式Linux系统开发详解

ARM嵌入式Linux系统开发详解

弓雷, 编著

出版社:清华大学出版社

年代:2013

定价:59.8

书籍简介:

本书讲解基于ARM体系结构的嵌入式Linux系统开发。全书内容包括嵌入式系统的基本概念、应用领域等基础知识;ARM处理器的体系结构和功能特点;Linux系统内核结构和移植方法、Bootloader功能和移植;Linux应用程序开发,包括如何操作文件、管理内存、访问串口、多线程和多进程技术,并且剖析了应用程序的结构和工作流程;Linux系统设备驱动程序开发,包括如何编写内核模块、驱动程序分类和功能特点、并且给出网络设备驱动、Flash设备驱动和USB设备驱动实例分析。

作者介绍:

弓雷,从事嵌入式系统软件开发9年。擅长计算机通信技术,对操作系统内核及底层技术有深入研究。技术涉猎广泛,熟悉Intel IXA架构网络处理器、ARM体系结构、MIPS体系结构和TCP/IP网络协议栈等。曾经移植过Linux 2.6内核到嵌入式设备,参与研发了某部队火控武器通信系统、无人驾驶汽车项目通信系统及10GE/POS骨干网流量管理系统等。目前担任嵌入式软件研发工程师和微码软件研发工程师,从事某公司骨干网P2P流量管理设备的研发。

书籍目录:

第1篇 Linux嵌入式开发基础篇

第1章 嵌入式系统入门

1.1 什么是嵌入式系统

1.2 嵌入式系统应用领域

1.2.1 家用电器和电子类产品

1.2.2 交通工具

1.2.3 公共电子设施

1.3 嵌入式系统发展

1.3.1 嵌入式微控制器

1.3.2 嵌入式微处理器

1.3.3 未来嵌入式系统发展的方向

1.4 典型的嵌入式系统组成

1.5 小结

第2章 嵌入式软硬件系统

2.1 电路基本知识

2.1.1 什么是模拟电路

2.1.2 什么是数字电路

2.1.3 数制转换

2.2 计算机组成原理

2.2.1 计算机体系的发展

2.2.2 中央处理器

2.2.3 存储系统

2.2.4 总线系统

2.2.5 输入输出系统

2.3 软件基础知识

2.3.1 什么是软件

2.3.2 软件开发流程

2.3.3 常见的软件开发模型

2.3.4 计算机编程语言

2.3.5 数据结构

2.4 操作系统知识

2.4.1 什么是操作系统

2.4.2 操作系统的发展历史

2.4.3 操作系统由什么组成

2.4.4 几种操作系统的设计思路

2.4.5 操作系统分类

2.5 小结

第3章 ARM处理器

3.1 微处理器和微控制器

3.2 ARM处理器介绍

3.2.1 ARM微处理器的应用领域

3.2.2 ARM的功能特点

3.3 ARM指令集

3.3.1 算术运算指令

3.3.2 逻辑运算指令

3.3.3 分支指令

3.3.4 数据传送指令

3.4 ARM的结构

3.4.1 ARM体系结构的命名方法

3.4.2 处理器系列划分

3.4.3 处理器工作模式

3.4.4 存储系统

3.4.5 寻址方式

3.5 ARM的功能选型

3.5.1 ARM的选型原则

3.5.2 几种常见的ARM核处理器选型参考

3.6 小结

第4章 嵌入式Linux

4.1 常见的嵌入式操作系统

4.1.1 VxWorks

4.1.2 Windows CE

4.1.3 PalmOS

4.1.4 Symbian

4.2 嵌入式Linux操作系统

4.2.1 什么是Linux

4.2.2 Linux与UNIX的不同——GPL版权协议介绍

4.2.3 Linux发行版

4.2.4 常见的嵌入式Linux系统

4.3 小结

第5章 建立软件开发环境

5.1 独立的Linux系统

5.1.1 安装Ubuntu Linux

5.1.2 怎样安装、卸载软件

5.1.3 怎样配置系统服务

5.1.4 安装主要的开发工具

5.1.5 安装其他的开发工具和文档

5.2 运行在Windows上的Linux系统

5.2.1 什么是Cygwin

5.2.2 如何安装Cygwin

5.2.3 安装开发环境

5.3 Linux常用工具

5.3.1 Linux shell和常用命令

5.3.2 文本编辑工具vi

5.3.3 搜索工具find和grep

5.3.4 FTP工具

5.3.5 串口工具minicom

5.4 Windows常用工具

5.4.1 代码编辑管理工具Source Insight

5.4.2 串口工具XShell

5.5 ARM集成开发环境ADS

5.5.1 ADS集成开发环境介绍

5.5.2 配置ADS调试环境

5.5.3 建立自己的工程

5.6 小结

第6章 第一个Linux应用程序

6.1 向世界问好——Hello,World!

6.1.1 用vi编辑源代码文件

6.1.2 用gcc编译程序

6.1.3 执行程序

6.2 程序背后做了什么

6.2.1 程序执行的过程

6.2.2 窥视程序执行中的秘密

6.2.3 动态库的作用

6.3 程序如何来的——编译的全部过程

6.3.1 编译源代码

6.3.2 连接目标文件到指定的库

6.4 更简单的办法——用Makefile管理工程

6.4.1 什么是Makefile

6.4.2 它是如何工作的

6.4.3 如何使用Makefile

6.4.4 好的源代码管理习惯

6.5 小结

第2篇 Linux嵌入式开发应用篇

第7章 Linux应用程序编程基础

7.1 内存管理和使用

7.1.1 堆和栈的区别

7.1.2 内存管理函数malloc()和free()

7.1.3 实用的内存分配函数calloc()和realloc()

7.1.4 内存管理编程实例

7.2 ANSI C文件管理

7.2.1 文件指针和流

7.2.2 存储方式

7.2.3 标准输入、标准输出和标准错误

7.2.4 缓冲

7.2.5 打开、关闭文件

7.2.6 读写文件

7.2.7 文件流定位

7.2.8 ANSI C文件编程实例

7.3 POSIX文件I/O编程

7.3.1 底层的文件I/O操作

7.3.2 文件描述符

7.3.3 创建/打开/关闭文件

7.3.4 读写文件内容

7.3.5 文件内容定位

7.3.6 修改已打开文件的属性

7.3.7 POSIX文件编程实例

7.4 小结

第8章 开发多进程/线程程序

8.1 多进程开发

8.1.1 什么是进程

8.1.2 进程环境和属性

8.1.3 创建进程

8.1.4 等待进程结束

8.1.5 退出进程

8.1.6 常用进程间通信的方法

8.1.7 进程编程实例

8.2 多线程开发

8.2.1 线程的概念

8.2.2 进程和线程对比

8.2.3 创建线程

8.2.4 取消线程

8.2.5 等待线程

8.2.6 使用pthread库线程操作实例

8.3 小结

第9章 网络通信应用

9.1 网络通信基础

9.1.1 TCP/IP协议族

9.1.2 IP协议

9.1.3 TCP协议

9.1.4 UDP协议

9.1.5 学习分析协议的方法

9.2 Socket通信基本概念

9.2.1 创建socket对象

9.2.2 面向连接的Socket通信实现

9.2.3 面向连接的echo服务编程实例

9.2.4 无连接的Socket通信实现

9.2.5 无连接的时间服务编程实例

9.3 Socket高级应用

9.3.1 Socket超时处理

9.3.2 使用Select机制处理多连接

9.3.3 使用poll机制处理多连接

9.3.4 多线程环境Socket编程

9.4 小结

第10章 串口通信编程

10.1 串口介绍

10.1.1 什么是串口

10.1.2 串口工作原理

10.1.3 串口流量控制

10.2 开发串口应用程序

10.2.1 操作串口需要用到的头文件

10.2.2 串口操作方法

10.2.3 串口属性设置

10.2.4 与Windows串口终端通信

10.3 串口应用实例——手机短信发送

10.3.1 PC与手机连接发送短信的物理结构

10.3.2 AT指令介绍

10.3.3 GSM AT指令集

10.3.4 PDU编码方式

10.3.5 建立与手机的连接

10.3.6 使用AT指令发送短信

10.4 小结

第11章 嵌入式GUI程序开发

11.1 Linux GUI介绍

11.1.1 Linux GUI的发展

11.1.2 常见的嵌入式GUI

11.2 开发图形界面程序

11.2.1 安装Qt开发环境

11.2.2 建立简单的Qt程序

11.2.3 Qt库编程结构

11.3 深入Qt编程

11.3.1 使用Widget

11.3.2 对话框程序设计

11.3.3 信号与槽系统

11.4 移植Qtopia到ARM开发板

11.4.1 需要的资源

11.4.2 准备工作

11.4.3 编译主机Qt工具

11.4.4 交叉编译qtopia

11.5 小结

第12章 软件项目管理

12.1 源代码管理

12.1.1 什么是软件的版本

12.1.2 版本控制的概念

12.2 版本控制系统Subversion

12.2.1 在Linux系统下使用Subversion服务端

12.2.2 在Windows系统下使用TortoiseSVN客户端

12.3 开发文档管理——常见的开发文档

12.3.1 可行性研究报告

12.3.2 项目开发计划

12.3.3 软件需求说明书

12.3.4 概要设计

12.3.5 详细设计

12.3.6 用户手册

12.3.7 其他文档

12.4 使用trac管理软件开发文档

12.4.1 安装trac

12.4.2 配置trac基本设置

12.4.3 配置trac全局脚本

12.4.4 设置trac的Web界面

12.5 Bug跟踪系统

12.5.1 Bug管理的概念和作用

12.5.2 使用Bugzilla跟踪Bug

12.6 小结

第3篇 Linux系统篇

第13章 ARM体系结构及开发实例

13.1 ARM体系结构介绍

13.1.1 ARM体系结构

13.1.2 ARM指令集介绍

13.2 编程模型

13.2.1 数据类型

13.2.2 处理器模式

13.2.3 寄存器

13.2.4 通用寄存器

13.2.5 程序状态寄存器

13.2.6 异常处理

13.2.7 内存和内存I/O映射

13.3 内存管理单元

13.3.1 内存管理介绍

13.3.2 内存访问顺序

13.3.3 地址翻译过程

13.3.4 访问权限

13.4 常见接口和控制器

13.4.1 GPIO接口

13.4.2 中断控制器

13.4.3 RTC控制器

13.4.4 看门狗定时器

13.4.5 试验:使用GPIO点亮LED

13.5 小结

第14章 深入Bootloader

14.1 初识Bootloader

14.1.1 PC(个人电脑)上的Bootloader

14.1.2 什么是嵌入式系统的Bootloader

14.1.3 嵌入式系统常见的Bootloader

14.2 U-Boot分析

14.2.1 获取U-Boot

14.2.2 U-Boot工程结构分析

14.2.3 U-Boot总体工作流程

14.3 U-Boot启动流程分析

14.3.1 _start标号

14.3.2 reset标号

14.3.3 cpu_init_crit标号

14.3.4 lowlevel_init标号

14.3.5 relocate标号

14.3.6 start_armboot()函数

14.3.7 main_loop()函数

14.4 移植U-Boot到开发板

14.4.1 U-Boot移植的一般步骤

14.4.2 移植U-Boot到目标开发板

14.4.3 移植U-Boot的常见问题

14.5 小结

第15章 解析Linux内核

15.1 基本知识

15.1.1 什么是Linux内核

15.1.2 Linux内核版本

15.1.3 如何获取Linux内核代码

15.1.4 编译内核

15.2 Linux内核的子系统

15.2.1 系统调用接口

15.2.2 进程管理子系统

15.2.3 内存管理子系统

15.2.4 虚拟文件系统

15.2.5 网络堆栈

15.2.6 设备驱动

15.2.7 依赖体系结构的代码

15.3 Linux内核代码的工程结构

15.3.1 源代码目录布局

15.3.2 几个重要的Linux内核文件

15.4 内核编译系统

15.4.1 内核编译系统基本架构

15.4.2 内核顶层Makefile分析

15.4.3 内核编译文件分析

15.4.4 目标文件清除机制

15.4.5 编译辅助程序

15.4.6 KBuild变量

15.5 小结

第16章 嵌入式Linux启动流程

16.1 Linux内核初始化流程

16.2 PC的初始化流程

16.2.1 PC BIOS功能和作用

16.2.2 硬盘的数据结构

16.2.3 完整的初始化流程

16.3 嵌入式系统的初始化

16.4 Linux内核初始化

16.4.1 解压缩内核映像

16.4.2 进入内核代码

16.5 启动init内核进程

16.6 根文件系统初始化

16.6.1 根文件系统介绍

16.6.2 挂载虚拟文件系统

16.7 内核交出权限

16.8 init进程

16.9 初始化RAM Disk

16.9.1 RAM Disk介绍

16.9.2 如何使用RAM Disk

16.9.3 实例:使用RAM Disk作为根文件系统

16.10 小结

第17章 Linux文件系统

17.1 Linux文件管理

17.1.1 文件和目录的概念

17.1.2 文件的结构

17.1.3 文件的类型

17.1.4 文件系统的目录结构

17.1.5 文件和目录的存取权限

17.1.6 文件系统管理

17.2 Linux文件系统原理

17.2.1 非日志文件系统

17.2.2 日志文件系统

17.3 常见的Linux文件系统

17.3.1 ext2文件系统

17.3.2 ext3文件系统

17.3.3 ReiserFS文件系统

17.3.4 JFFS文件系统

17.3.5 cramfs文件系统

17.4 其他文件系统

17.4.1 网络文件系统

17.4.2 /proc影子文件系统

17.5 小结

第18章 建立交叉编译工具链

18.1 什么是交叉编译

18.2 需要哪些东西

18.3 手工创建工具链

18.3.1 准备工作——获取源代码

18.3.2 开始了——建立工作环境

18.3.3 建立Linux内核头文件

18.3.4 编译安装binutils

18.3.5 编译安装gcc的C编译器

18.3.6 编译安装glibc库

18.3.7 编译安装gcc的C、C++编译器

18.3.8 最后的工作

18.4 使用脚本创建工具链

18.5 更简便的方法——获取已编译好的交叉编译环境

18.6 小结

第19章 强大的命令系统BusyBox

19.1 BusyBox简介

19.1.1 简单易懂的BusyBox

19.1.2 BusyBox工作原理

19.1.3 安装BusyBox

19.2 交叉编译BusyBox

19.3 使用BusyBox

19.3.1 BusyBox初始化

19.3.2 目标板BusyBox安装

19.4 小结

第20章 Linux内核移植

20.1 Linux内核移植要点

20.2 平台相关代码结构

20.3 建立目标平台工程框架

20.3.1 加入编译菜单项

20.3.2 设置宏与代码文件的对应关系

20.3.3 测试工程框架

20.4 建立目标平台代码框架

20.4.1 ARM处理器相关结构

20.4.2 建立machine_desc结构

20.4.3 加入处理函数

20.4.4 加入定时器结构

20.4.5 测试代码结构

20.5 构建目标板代码

20.5.1 处理器初始化

20.5.2 端口映射

20.5.3 中断处理

20.5.4 定时器处理

20.5.5 编译最终代码

20.6 小结

第21章 内核和应用程序调试技术

21.1 使用gdb调试应用程序概述

21.2 基本的调试技术

21.2.1 列出源代码

21.2.2 断点管理

21.2.3 执行程序

21.2.4 显示程序变量

21.2.5 信号管理

21.2.6 调试实例

21.3 多进程调试

21.4 调试意外终止的程序

21.5 内核调试技术

21.5.1 printk打印调试信息

21.5.2 使用/proc虚拟文件系统

21.5.3 使用KDB调试工具

21.5.4 KDB调试指令

21.6 小结

第4篇 Linux嵌入式驱动开发篇

第22章 Linux设备驱动

22.1 设备驱动介绍

22.2 Linux内核模块

22.2.1 内核模块简介

22.2.2 内核模块的结构

22.2.3 内核模块的加载和卸载

22.2.4 编写一个基本的内核模块

22.2.5 编译内核模块

22.2.6 为内核模块添加参数

22.3 Linux设备驱动

22.3.1 PCI局部总线介绍

22.3.2 Linux设备驱动基本概念

22.3.3 字符设备

22.3.4 块设备

22.3.5 网络设备

22.4 字符设备驱动开发实例

22.4.1 开发一个基本的字符设备驱动

24.4.2 测试字符设备驱动

22.5 小结

第23章 网络设备驱动程序

23.1 网络基础知识

23.1.1 ISO/OSI网络参考模型

23.1.2 TCP/IP协议

23.2 以太网基础

23.2.1 工作原理

23.2.2 常见以太网标准

23.2.3 拓扑结构

23.2.4 工作模式

23.3 网卡工作原理

23.4 内核网络分层结构

23.4.1 内核网络结构

23.4.2 与网络有关的数据结构

23.4.3 内核网络部分的全局变量

23.5 内核网络设备驱动框架

23.5.1 net_device结构

23.5.2 数据包接收流程

23.5.3 数据包发送流程

23.6 实例:DM9000网卡驱动分析

23.6.1 DM9000芯片介绍

23.6.2 网卡驱动程序框架

23.6.3 DM9000网卡驱动主要数据结构

23.6.4 加载驱动程序

23.6.5 停止和启动网卡

23.6.6 发送数据包

23.6.7 接收数据包

23.6.8 中断和定时器处理

23.7 小结

第24章 Flash设备驱动

24.1 Linux Flash驱动结构

24.1.1 什么是MTD

24.1.2 MTD系统结构

24.2 Flash设备基础

24.2.1 存储原理

24.2.2 性能比较

24.3 内核MTD层

24.3.1 mtd_info结构

24.3.2 mtd_part结构

24.3.3 mtd_partition结构

24.3.4 map_info结构

24.3.5 nand_chip结构

24.4 Flash设备框架

24.4.1 NOR Flash设备驱动框架

24.4.2 NAND Flash设备驱动框架

24.5 Flash设备驱动实例——NOR Flash设备驱动剖析

24.5.1 数据结构

24.5.2 驱动初始化

24.5.3 驱动卸载

24.6 Flash设备驱动实例——NAND Flash设备驱动分析

24.6.1 S3C2440 NAND控制器介绍

24.6.2 数据结构

24.6.3 驱动初始化

24.6.4 驱动卸载

24.6.5 初始化NAND控制器

24.6.6 设置芯片操作

24.6.7 电源管理

24.7 小结

第25章 USB驱动开发

25.1 USB体系介绍

25.1.1 USB设计目标

25.1.2 USB体系概述

25.1.3 USB体系工作流程

25.2 USB驱动程序框架

25.2.1 Linux内核USB驱动框架

25.2.2 主机驱动结构

25.2.3 设备驱动结构

25.2.4 USB驱动程序框架

25.3 USB驱动实例剖析

25.3.1 USB串口驱动

25.3.2 USB键盘驱动

25.4 小结

内容摘要:

本书是获得了大量读者好评的“Linux典藏大系”中的《ARM嵌入式Linux系统开发详解》的第2版。本书由浅入深,全面、系统地介绍了基于ARM体系结构的嵌入式Linux系统开发所涉及的方方面面技术,并提供了大量实例供读者实战演练。另外,本书提供了9小时多媒体教学视频及书中涉及的实例源程序,便于读者高效、直观地学习。本书共分4篇。第1篇介绍了嵌入式系统入门、嵌入式软硬件系统、ARM处理器、嵌入式Linux、软件开发环境建立和第一个Linux应用程序;第2篇介绍了Linux应用程序编程基础、开发多进程/线程程序、网络通信应用、串行口通信编程、嵌入式GUI程序开发和软件项目管理;第3篇介绍ARM体系结构及开发实例、深入Bootloader、解析Linux内核、嵌入式Linux启动流程、Linux文件系统、建立交叉编译工具链、命令系统BusyBox、Linux内核移植,以及内核和应用程序调试技术;第4篇结合5个案例介绍了Linux设备驱动、网络设备驱动、Flash设备驱动和USB驱动的开发过程,以此提高读者的实战水平。本书适合广大从事嵌入式Linux系统开发的人员、对嵌入式Linux系统开发有兴趣的爱好者及大中专院校相关专业的学生阅读。相关培训院校及高校的老师亦可将本书作为教材使用。

编辑推荐:

嵌入式Linux开发精品图书全面升级,ChinaUnix社区鼎力推荐,赠送40段共9小时语音教学视频,送教学PPT
由浅入深,全面解析基于ARM体系结构的嵌入式Linux系统开发,结合多个实例和5个典型案例,深入剖析嵌入式开发的原理及过程
版本新颖:书中涉及的软件及开发环境都是当前最为流行的版本
由浅入深:从嵌入式系统的软硬件开始讲解,逐步深入到实际开发
内容全面:涵盖嵌入式Linux系统开发的大部分知识点和典型应用
注重原理:对每个知识点从概念和基本原理进行了详细而透彻的分析
重点突出:对Bootloader和Linux内核的功能和移植进行了详细介绍
实践性强:结合多个典型实例和5个应用案例,提高读者的开发水平

书籍规格:

书籍详细信息
书名ARM嵌入式Linux系统开发详解站内查询相似图书
丛书名Linux典藏大系
9787302340522
如需购买下载《ARM嵌入式Linux系统开发详解》pdf扫描版电子书或查询更多相关信息,请直接复制isbn,搜索即可全网搜索该ISBN
出版地北京出版单位清华大学出版社
版次2版印次1
定价(元)59.8语种简体中文
尺寸26 × 19装帧平装
页数印数 5000

书籍信息归属:

ARM嵌入式Linux系统开发详解是清华大学出版社于2013.出版的中图分类号为 TP316.89 的主题关于 Linux操作系统 的书籍。