1、 1 基于 ARM 的嵌入式 linux 系统 开发 原理与实战 基于 ARM 的嵌入式 linux系统开发 原理与实战 I 目 录 目 录 . I 第一章 嵌入式操作系统 .1 1.1 嵌入式操作系 统 .1 1.1.1 嵌入式操作系统特点 .1 1.1.2 嵌入式操作系统分类 .2 1.2 实时操作系统 .4 1.2.1 实时操作系统与通用操作系统的比较 .4 1.2.2 实时操作系统的评价指标 .7 1.3 基于 Linux 的嵌入式操作系统 .8 1.3.1 ARMLinux 简介 .9 1.3.2 uClinux 简介 . 11 1.4 嵌入式系统设计方法 . 13 1.4.1 嵌入
2、式系统开发的特点 . 13 1.4.2 嵌入式系统开发的流程 . 15 1.5 本章小结 . 16 1.6 本章习题 . 17 第二章 搭建 Linux 交叉编译开发环境 . 19 2.1 什么是交叉编译 . 19 2.2 建立交叉编译开发工具链 . 20 2.2.1 编译工具链 . 20 2.2.2 下载工具链 . 30 2.2.3 验证工具链 . 34 2.3 配置主机服务 . 35 2.3.1 配置 samba . 36 2.3.2 配置 DHCP . 37 2.3.3 配置 TFTP . 40 2.3.4 配置 NFS . 41 2.4 本章小结 . 43 2.5 本章习题 . 43
3、第三章 GNU 开发工具的使用方法 . 45 3.1 vi 使用说明 . 45 3.1.1 vi 简介 . 45 3.1.2 vi 基本命令 . 45 3.2 编写 Makefile . 50 3.2.1 什么是 Makefile . 51 3.2.2 Make 命令 . 53 3.2.3 隐含规则 . 55 3.3 使用 GCC. 56 3.3.1 GCC 的用法 . 57 3.3.2 GCC 选项 . 58 3.4 库文件的管理与使用 . 66 3.4.1 库文件命名 . 67 3.4.2 库文件操作 . 67 3.4.3 库文件升级 . 68 3.4.4 库文件使用 . 70 目 录 I
4、I 3.5 调试工具使用 . 71 3.5.1 kdb 使用 . 71 3.5.2 gdb 使用 . 76 3.6 仿真器使用 . 80 3.6.1 Multi-ICE Server 状态 . 80 3.6.2 Multi-ICE Server 配置 . 84 3.6.3 ADS V1.2 配合 Multi-ICE 调试 . 86 3.7 本章小结 . 90 3.8 本章习题 . 90 第四章 Bootloader(VIVI)移植 . 93 4.1 Bootloader 简介 . 93 4.1.1 BootLoader 的概念 . 93 4.1.2 BootLoader 的启动过程 . 95
5、4.2 vivi 概述 . 102 4.3 vivi 的配置和编译 . 103 4.4 vivi 代码导读 . 105 4.4.1 阶段 1: arch/s3c2410/head.S . 105 4.4.2 阶段 2: init/main.c. 107 4.5 本章小结 . 138 4.6 本章习题 . 138 第五章 ARM Linux 内核移植 . 139 5.1 内核结构 . 139 5.1.1 系统组成 . 139 5.1.2 代码目录结构 . 140 5.1.3 内核代码阅读 . 142 5.2 内核启动流程 . 143 5.2.1 vmlinux-armv.lds.in 和 hea
6、d-armv.S. 143 5.2.2 start_kernel 函数 . 146 5.3 定制 Linux 内核 . 148 5.3.1 裁剪、配置内核 . 149 5.3.2 编译内核 . 157 5.4 将内核下载到目标板上 . 158 5.5 本章小结 . 162 5.6 本章习题 . 162 第六章 Linux 中断处理程序开发 . 165 6.1 中断处理程序概述 . 165 6.1.1 中断的产生 . 165 6.1.2 IRQ(Interrupt Requirement) . 165 6.1.3 中断处理程序 . 166 6.1.4 置中断标志位 . 167 6.1.5 中断处
7、理程序的不可重入性 . 167 6.1.6 避免竞争条件的出现 . 169 6.2 ARM 处理器中断处理 . 169 6.2.1 ARM 处理器异常中断处理概述 . 169 6.2.2 支持中断跳转的解析程序 . 170 6.3 中断处理程序架构 . 173 6.4 时钟中断与看门狗技术 . 177 基于 ARM 的嵌入式 linux系统开发 原理与实战 III 6.4.1 时钟中断与定时器概念 . 177 6.4.2 时钟中断与定时器实现 . 178 6.4.3 看门狗技术 . 181 6.5 本章小结 . 181 6.6 本章习题 . 182 第七章 Linux 设备驱动开发 . 183
8、 7.1 设备驱动程序概述 . 183 7.1.1 设备驱动程序分类 . 183 7.1.2 其它相关概念 . 184 7.2 设备驱动程序架构 . 185 7.2.1 基本架构 . 185 7.2.2 相关数据结构 . 187 7.3 设备驱动程序开发实例 . 199 7.3.1 编写内核模 块 . 199 7.3.2 编写块(字符)设备驱动程序 . 201 7.3.3 编写网络设备驱动程序 . 208 7.4 本章小结 . 214 7.5 本章习题 . 215 第八章 Linux 文件系统移植 . 217 8.1 Linux 文件系统概述 . 217 8.1.1 Linux 文件系统的历史
9、 . 217 8.1.2 Linux 文件系统的基本概念 . 219 8.2 Linux 文件系统介绍 . 221 8.2.1 Extfs 和 Ext2fs . 222 8.2.2 Ext3fs . 224 8.2.3 ReiserFS . 225 8.2.4 XFS. 227 8.2.5 JFS. 228 8.2.6 JFFS2 . 229 8.2.7 其它文件系统简介 . 234 8.3 Linux 文件系统结构 . 235 8.3.1 VFS(Virtual File System) . 236 8.3.2 MTD(Memory Technology Device). 240 8.4 L
10、inux 文件系统移植 . 244 8.4.1 移植 JFFS2 文件系统 . 244 8.4.2 使用 Ramdisk . 250 8.5 本章小结 . 254 8.6 本章习题 . 254 第九章 Linux 应用程序开发 . 255 9.1 进程控制 . 255 9.1.1 Linux 进程概述 . 255 9.1.2 Linux 进程调度 . 255 9.1.3 相关系统调用及例程 . 258 9.2 进程间通信 . 273 9.2.1 Linux 进程间通信 概述 . 273 9.2.2 信号 . 275 9.2.3 管道 . 276 9.2.4 消息队列 . 278 目 录 IV 9.2.5 信号灯 . 279 9.2.6 共享内存 . 282 9.3 多线程应用程序开发 . 283 9.3.1 线程概述 . 283 9.3.2 Posix 线程库 API . 288 9.3.3 线程编程实例 . 307 9.4 本章小结 . 312 9.5 本章习题 . 313 第十章 Socket 编程 . 315 10.1 socket 编程基本概念 . 315 10.1.1 网间进程通信 . 315 10.1.2 服务方式 . 317 10.1.3 客 户 /服务器模式 .