内容简介
第1篇 嵌入式Linux内核驱动开发
第1章 Linux内核裁剪和定制
1.1 Linux内核开发简介
1.2 Linux源码阅读工具
1.2.1 Source Insight
1.2.2 Eclipse
1.2.3 Vim+ctags+cscope
1.2.4 LXR
1.3 Linux内核源码
1.3.1 目录树概览
1.3.2 快速确定主板关联代码
1.4 Linux内核中的Makefile文件
1.4.1 顶层Makefile
1.4.2 子目录的Makefile
1.5 Linux内核中的Kconfig文件
1.5.1 Kconfig基本语法
1.5.2 配置项和配置开关
1.6 配置和编译Linux内核
1.6.1 快速配置内核
1.6.2 内核配置详情
1.6.3 编译内核
1.6.4 运行内核
1.7 Linux内核裁剪实例
1.7.1 GPIO子系统配置
1.7.2 LED子系统配置
1.7.3 串口配置
1.7.4 USB Host驱动配置
1.7.5 USB Gadget驱动配置
1.7.6 SD/MMC驱动配置
1.7.7 网卡驱动配置
1.7.8 NFS Client配置
1.7.9 PPP拨号配置
1.7.10 MTD配置
1.7.11 UBIFS文件系统配置
1.7.12 CAN驱动配置
1.8 EPC-28x平台内核快速编译
第2章 Linux设备驱动基础
2.1 Linux内核模块
2.1.1 Linux和模块
2.1.2 编写内核模块
2.1.3 最简单的内核模块
2.1.4 带参数的内核模块
2.2 Linux设备
2.2.1 Linux设备和分类
2.2.2 设备节点和设备号
2.2.3 设备的注册和注销
2.3 Linux设备和驱动
2.3.1 驱动在Linux中的地位
2.3.2 驱动的基本要素
2.3.3 驱动和应用程序的差别
2.3.4 驱动的入口和出口
2.3.5 支持udev设备管理方法
2.3.6 设备驱动的操作方法
2.4 字符驱动框架
2.4.1 字符驱动框架
2.4.2 测试程序
2.5 第一个完整意义上的驱动
2.5.1 ioctl命令
2.5.2 内核空间的ioctl
2.5.3 用户空间的ioctl
2.5.4 LED驱动范例
2.6 内核/用户空间的数据交换
2.6.1 检查地址的合法性
2.6.2 往用户空间传递数据
2.6.3 从用户空间获取数据
2.6.4 支持读/写的驱动范例
2.7 在驱动中使用中断
2.7.1 申请和释放中断
2.7.2 中断处理程序编写
2.7.3 按键驱动
2.8 混杂设备驱动编程
2.8.1 混杂设备和驱动
2.8.2 混杂设备驱动框架
2.9 I/O内存访问
2.9.1 静态I/O映射
2.9.2 动态I/O映射
2.9.3 I/O内存访问函数
2.10 Linux设备驱动模型
2.10.1 设备
2.10.2 驱动
2.10.3 总线
2.10.4 类
2.11 平台设备和驱动
2.11.1 资源
2.11.2 平台设备
2.11.3 平台驱动
2.11.4 平台驱动与普通驱动的差异
2.11.5 平台驱动范例
第3章 LED子系统和驱动
3.1 LED子系统驱动简介
3.2 LED子系统的分层结构
3.3 LED设备的实现
3.4 i.MX28平台的LED设备
第4章 GPIO驱动
4.1 GPIOLIB简介
4.2 GPIOLIB的内核接口
4.3 GPIOLIB的实现方法
4.4 驱动示例
第5章 输入子系统和按键驱动
5.1 输入子系统
5.1.1 输入子系统构成
5.1.2 各事件管理器详解
5.1.3 设备驱动
5.2 驱动实现
5.2.1 电路和原理
5.2.2 按键驱动实现
第6章 I2C总线和外设驱动
6.1 I2C子系统
6.1.1 I2C子系统的设计思路
6.1.2 I2C子系统的实现
6.1.3 I2C子系统在/sys文件系统的信息
6.2 I2C驱动实现示例
6.2.1 FM24C02A驱动的设计思路
6.2.2 添加FM24C02A设备
6.2.3 实现FM24C02A驱动
6.2.4 实现I2C驱动
第7章 SPI总线和外设驱动
7.1 硬件连接
7.2 SPI驱动架构简析
7.2.1 SPI核心层
7.2.2 SPI主控制器驱动层
7.2.3 SPI设备驱动层
7.2.4 SPI数据传输
7.3 SPI NOR Flash驱动
7.3.1 驱动实现
7.3.2 配置和编译
7.3.3 测试块设备
7.4 SPI数码管显示驱动
7.4.1 电路原理
7.4.2 驱动实现
7.4.3 驱动编译和测试
第8章 UART和SC16IS752驱动
8.1 UART驱动简析
8.1.1 重要数据结构
8.1.2 UART驱动API
8.2 SC16IS752芯片和电路原理
8.2.1 SC16IS752芯片介绍
8.2.2 电路原理
8.2.3 驱动移植思路
8.3 I2C接口驱动实现
8.3.1 定义i2c_device_id
8.3.2 添加注册I2C设备
8.3.3 I2C驱动实现
8.4 UART相关驱动
8.4.1 信息描述和数据结构
8.4.2 底层操作函数和实现
8.4.3 probe函数和实现
8.4.4 uart_ops函数和实现
8.4.5 中断处理
8.5 串口测试
第9章 SGTL5000声卡驱动移植
9.1 背景交代
9.2 电路原理图
9.3 驱动移植
9.3.1 引脚设置
9.3.2 添加SGTI5000 I2C设备
9.3.3 配置和编译
9.3.4 修正播放音频的问题
9.4 音频接口操作
第10章 AP6181无线网卡驱动移植
10.1 硬件原理图
10.2 驱动移植
10.2.1 修改引脚功能
10.2.2 添加mmc设备
10.2.3 添加驱动源码
10.2.4 添加唤醒中断
10.2.5 添加上下电控制
10.2.6 修改内核配置文件
10.2.7 配置内核
10.2.8 编译内核、模块驱动
10.3 使用网卡
10.3.1 加载驱动模块
10.3.2 连接到AP
第11章 SIM6320-PCIE 3G模块驱动移植
11.1 驱动移植
11.1.1 添加驱动源码
11.1.2 配置内核
11.2 PPP拨号上网
第2篇 嵌入式Linux系统整合
第12章 嵌入式Linux和Bootloader
12.1 概述
12.1.1 系统硬件和映像布局
12.1.2 嵌入式Linux Bootloader
12.1.3 U-Boot介绍
12.2 U-Boot使用
12.2.1 U-Boot常用命令
12.2.2 环境变量
12.2.3 使用网络
12.2.4 NAND Flash操作
12.2.5 组合命令
12.3 U-Boot源码介绍
12.3.1 U-Boot目录简介
12.3.2 U-Boot的启动简介
12.3.3 U-Boot的驱动
12.3.4 U-Boot的命令
12.3.5 U-Boot的平台相关代码
12.3.6 U-Boot的配置文件
12.3.7 U-BootTools
12.4 U-Boot编译实例
12.4.1 编译说明
12.4.2 i.MX28U-Boot的实用工具
第13章 嵌入式Linux文件系统
13.1 根文件系统
13.1.1 根文件系统布局
13.1.2 根文件系统类型
13.2 使用BusyBox制作根文件系统
13.2.1 BusyBox介绍
13.2.2 交叉编译BusyBox
13.2.3 构建根文件系统
13.3 制作根文件系统镜像
第14章 Buildroot
14.1 Buildroot简介
14.2 安装Buildroot
14.3 使用Buildroot构建根文件系统
14.3.1 配置Buildroot
14.3.2 编译Builcroot
14.4 使用新的文件系统
14.4.1 完善文件系统
14.4.2 测试文件系统
14.5 发布文件系统
第15章 OpenWRT
15.1 OpenWRT简介
15.2 OpenWRT下载
15.2.1 SVN下载
15.2.2 Git下载
15.3 安装OpenWRT
15.4 使用OpenWRT定制文件系统
15.4.1 检查编译环境
15.4.2 配置系统
15.4.3 编译
第3篇 产品化和创意
第16章 产品化和创意
16.1 做最适合的系统
16.2 做可靠的系统
16.2.1 分区域保护
16.2.2 双备份
16.3 做用户满意的系统
16.4 快速启动
16.4.1 精简Bootloader
16.4.2 精简内核
16.4.3 精简根文件系统
参考文献