目 录 第1章 嵌入式系统概述(1) 1.1 嵌入式系统的定义、特点与组成(1) 1.1.1 嵌入式系统的定义(1) 1.1.2 嵌入式系统的特点(1) 1.1.3 嵌入式系统的组成(2) 1.2 嵌入式操作系统(3) 1.3 Linux操作系统(3) 1.3.1 Linux简介(3) 1.3.2 Linux的发行版本(4) 1.4 嵌入式技术的应用(4) 1.5 开发实践:认知嵌入式系统(5) 1.5.1 嵌入式系统硬件认知(5) 1.5.2 嵌入式系统运行测试(8) 1.6 小结(9) 1.7 思考与拓展(9) 第2章 嵌入式Linux开发环境(11) 2.1 Linux的安装与基本命令(11) 2.1.1 Linux的安装与配置(11) 2.1.2 Linux的软件包管理机制(15) 2.1.3 Linux的Shell与基本命令(17) 2.1.4 Linux的编辑器(20) 2.1.5 Shell脚本(22) 2.1.6 开发实践:Linux的安装与vim编辑器的使用(28) 2.1.7 小结(30) 2.1.8 思考与拓展(30) 2.2 常用的嵌入式开发工具(30) 2.2.1 嵌入式Linux的开发模式(30) 2.2.2 远程控制工具(31) 2.2.3 串口通信工具(32) 2.2.4 文件传输工具(33) 2.2.5 源代码管理工具(34) 2.2.6 开发实践:嵌入式开发工具的使用(36) 2.2.7 小结(38) 2.2.8 思考与拓展(38) 2.3 Linux的编译环境(38) 2.3.1 Linux程序的开发环境(38) 2.3.2 Linux编译器的安装与使用(39) 2.3.3 Linux的动态库与静态库(41) 2.3.4 Linux调试器的安装与使用(42) 2.3.5 Makefile文件的编写(44) 2.3.6 开发实践:Linux的编译环境(46) 2.3.7 小结(49) 2.3.8 思考与拓展(49) 第3章 嵌入式Linux系统的移植(51) 3.1 BootLoader的移植与应用(51) 3.1.1 BootLoader简介(51) 3.1.2 U-Boot的移植(53) 3.1.3 U-Boot的使用(55) 3.1.4 开发实践:U-Boot的编译(58) 3.1.5 小结(60) 3.1.6 思考与拓展(60) 3.2 Linux的内核与配置(60) 3.2.1 Linux的体系结构与内核(60) 3.2.2 Linux内核分析(62) 3.2.3 Linux内核的配置(71) 3.2.4 Linux内核调试技术(76) 3.2.5 开发实践:编译与测试(78) 3.2.6 小结(83) 3.2.7 思考与拓展(84) 3.3 Linux的文件系统与移植(84) 3.3.1 Linux文件系统(84) 3.3.2 Linux的根文件系统(86) 3.3.3 使用BusyBox制作根文件系统(88) 3.3.4 Ubuntu嵌入式系统移植(89) 3.3.5 开发实践:Ubuntu根文件系统的制作(92) 3.3.6 小结(93) 3.3.7 思考与拓展(94) 第4章 Linux应用开发技术(95) 4.1 Linux文件与多任务编程(95) 4.1.1 Linux文件编程(95) 4.1.2 Linux进程编程(105) 4.1.3 进程间通信技术(107) 4.1.4 Linux线程编程(120) 4.1.5 开发实践:Linux系统应用编程(127) 4.1.6 小结(134) 4.1.7 思考与拓展(135) 4.2 Linux网络编程(135) 4.2.1 网络编程基础(135) 4.2.2 UDP网络编程(139) 4.2.3 TCP网络编程(143) 4.2.4 开发实践:Linux网络编程(149) 4.2.5 小结(159) 4.2.6 思考与拓展(159) 4.3 Linux数据库开发(159) 4.3.1 嵌入式数据库(159) 4.3.2 SQLite3数据库的操作(160) 4.3.3 SQLite3数据库的编程(163) 4.3.4 开发实践:Linux数据库编程(168) 4.3.5 小结(170) 4.3.6 思考与拓展(170) 4.4 嵌入式Web服务器应用(170) 4.4.1 嵌入式Web服务器(170) 4.4.2 Boa服务器的移植与测试(171) 4.4.3 CGI开发技术(172) 4.4.4 开发实践:嵌入式Web服务器应用(174) 4.4.5 小结(178) 4.4.6 思考与拓展(178) 第5章 Linux驱动程序开发技术(179) 5.1 Linux驱动程序开发基础(179) 5.1.1 Linux驱动程序的概念(179) 5.1.2 Linux驱动程序的开发(184) 5.1.3 GPIO驱动程序的开发(192) 5.1.4 总线设备驱动程序(196) 5.1.5 基于设备树的驱动程序设计(199) 5.1.6 开发实践:LED驱动程序的开发(203) 5.1.7 小结(209) 5.1.8 思考与拓展(209) 5.2 字符设备驱动程序的开发(209) 5.2.1 按键驱动程序的开发(209) 5.2.2 ADC驱动程序的开发(217) 5.2.3 PWM驱动程序的开发(220) 5.2.4 开发实践:按键、ADC、PWM驱动程序的开发与测试(225) 5.2.5 小结(242) 5.2.6 思考与拓展(242) 5.3 总线设备驱动程序的开发(242) 5.3.1 I2C总线概述(242) 5.3.2 I2C总线驱动程序的开发(244) 5.3.3 I2C总线驱动程序接口函数(247) 5.3.4 开发实践:I2C总线驱动程序的开发(250) 5.3.5 小结(259) 5.3.6 思考与拓展(259) 5.4 块设备驱动程序的开发(259) 5.4.1 Linux块设备(260) 5.4.2 Linux块设备驱动程序的开发(261) 5.4.3 RamDisk块设备驱动程序的分析(275) 5.4.4 开发实践:RamDisk块设备驱动程序(276) 5.4.5 小结(281) 5.4.6 思考与拓展(281) 5.5 网络设备驱动程序的开发(281) 5.5.1 Linux网络设备概述(281) 5.5.2 网络设备驱动程序的开发(282) 5.5.3 虚拟网络设备驱动程序的开发(292) 5.5.4 开发实践:虚拟网络设备驱动程序的开发与测试(292) 5.5.5 小结(296) 5.5.6 思考与拓展(296) 参考文献(297)