内容简介
绪论篇
第1章 嵌入式系统架构与移植环境搭建
1.1 嵌入式系统硬件架构
1.1.1 微处理器
1.1.2 总线
1.1.3 存储器
1.2 嵌入式系统软件架构
1.3 嵌入式Linux移植环境搭建
1.3.1 Ubuntu开发平台
1.3.2 搭建交叉编译环境
1.3.3 获取内核
1.3.4 获取启动加载器
1.3.5 配置必要服务
1.3.6 PuTTY的安装和配置
1.4 本章小结
u-boot移植篇
第2章 u-boot工程与编译系统
2.1 u-boot介绍
2.1.1 u-boot工程简介
2.1.2 u-boot源码结构
2.1.3 u-boot的配置编译
2.2 u-boot常用命令与测试
2.2.1 获取帮助
2.2.2 环境变量相关命令
2.2.3 网络命令
2.2.4 Nand Flash操作命令
2.2.5 内存/寄存器相关命令
2.2.6 系统引导命令
2.3 u-boot编译过程分析
2.3.1 主机构建环境配置过程
2.3.2 目标机相关配置过程
2.3.3 make命令执行过程
2.4 本章小结
第3章 u-boot启动流程分析
3.1 u-boot启动第一阶段流程
3.1.1 设置异常向量
3.1.2 CPU进入SVC模式
3.1.3 设置控制寄存器地址
3.1.4 关闭看门狗
3.1.5 屏蔽中断
3.1.6 设置MPLLCON、UPLLCON和CLKDIVN
3.1.7 关闭MMU和cache
3.1.8 初始化存储控制器
3.1.9 复制u-boot第二阶段代码到RAM
3.1.10 设置栈
3.1.11 清除BSS段
3.1.12 跳转到第二阶段代码入口
3.2 u-boot启动第二阶段代码分析
3.2.1 gd_t结构体
3.2.2 bd_t结构体
3.2.3 init_sequence数组
3.2.4 start_armboot()顺序分析
3.2.5 main_loop函数分析
3.3 本章小结
第4章 ARM9/S3C2440 u-boot移植实战
4.1 移植准备工作
4.1.1 开发环境介绍
4.1.2 删减u-boot文件
4.1.3 建立My2440配置
4.1.4 配置和编译u-boot
4.2 u-boot芯片级移植
4.2.1 启动代码结构优化
4.2.2 系统时钟移植
4.2.3 存储器控制器设置
4.2.4 在u-boot工程中全面支持CONFIG_S3C2440宏配置
4.3 u-boot调试方法探索
4.3.1 通过LED指示运行状态
4.3.2 在第一阶段的代码中添加打印调试方法
4.3.3 在内存中加载和运行u-boot
4.4 Nor Flash驱动移植
4.4.1 Nor Flash的工作模式
4.4.2 Nor Flash的存储结构
4.4.3 Nor Flash的硬件连接
4.4.4 Nor Flash的操作方法
4.4.5 Nor Flash驱动分析
4.4.6 Nor Flash驱动移植
4.4.7 Nor Flash命令测试
4.4.8 完善u-boot的命令行功能
4.5 DM9000驱动移植
4.5.1 DM9000网卡端口访问
4.5.2 DM9000网卡时序分析
4.5.3 DM9000网卡驱动分析
4.5.4 DM9000网卡驱动移植
4.5.5 网卡驱动测试
4.5.6 通过TFTP下载程序到内存运行
4.6 u-boot启动内核
4.6.1 ARM架构的Linux内核启动
4.6.2 内核标记列表
4.6.3 u-boot启动命令分析1——go命令
4.6.4 u-boot启动命令分析2——bootm命令
4.6.5 u-boot启动命令的配置与移植
4.7 Nand Flash与驱动移植
4.7.1 Nand Flash启动原理
4.7.2 Nand Flash硬件特性
4.7.3 Linux MTD子系统
4.7.4 Nand Flash初始化流程分析
4.7.5 Nand Flash命令实现分析
4.7.6 页读取操作详解
4.7.7 Nor Flash和Nand Flash启动自动判断
4.7.8 Nand Flash拷贝代码实现
4.7.9 Nand Flash板级驱动移植
4.7.10 Nand Flash命令测试
4.8 YAFFS文件系统移植
4.8.1 YAFFS文件系统
4.8.2 YAFFS在Nand Flash上的存储结构
4.8.3 YAFFS在内存中的组织结构
4.8.4 在u-boot中添加对烧写YAFFS镜像的支持
4.8.5 YAFFS文件系统镜像制作
4.8.6 YAFFS的烧写与测试
4.9 UBIFS文件系统移植
4.9.1 UBI层
4.9.2 UBIFS介绍
4.9.3 在u-boot中添加对UBIFS的支持
4.9.4 制作UBIFS文件系统镜像
4.9.5 UBIFS的烧写与测试
4.10 SD卡驱动移植
4.10.1 MMC/SD/SDIO介绍
4.10.2 SD/MMC协议
4.10.3 S3C2440 SDI控制器操作
4.10.4 SD卡驱动分析
4.10.5 SD卡驱动移植
4.11 USB驱动移植
4.11.1 USB概述
4.11.2 USB系统架构
4.11.3 USB的通信方法
4.11.4 USB的描述符
4.11.5 USB设备请求
4.11.6 USB设备枚举
4.11.7 S3C2440 USB设备控制器
4.11.8 u-boot USB设备控制器驱动分析
4.11.9 USB设备驱动移植
4.11.10 USB驱动移植
4.11.11 USB功能测试
4.12 u-boot一键式菜单实现
4.12.1 一键式菜单需求分析
4.12.2 一键式菜单测试步骤
4.12.3 一键式菜单源码分析
4.13 本章小结
第5章 ARM11/S3C6410 u-boot移植实战
5.1 移植准备工作
5.1.1 开发环境
5.1.2 删减u-boot文件
5.1.3 建立My6410配置
5.1.4 配置和编译u-boot
5.2 u-boot芯片级移植
5.2.1 修改第一阶段启动代码start.S
5.2.2 板级底层初始化文件lowlevel_init.S移植
5.2.3 时钟初始化函数移植
5.2.4 内存初始化函数实现
5.2.5 Nand Flash复制代码实现
5.2.6 SD卡复制代码实现
5.2.7 底层调试方法探索
5.2.8 完善My6410的板级配置
5.2.9 烧写与测试
5.3 DM9000驱动移植
5.3.1 DM9000网卡端口访问
5.3.2 DM9000网卡时序分析
5.3.3 DM9000网卡驱动移植
5.3.4 网卡驱动测试
5.4 u-boot启动内核
5.4.1 u-boot启动命令的配置与移植
5.4.2 修改go命令以支持zImage格式镜像的启动
5.5 Nand Flash驱动移植
5.5.1 将u-boot下载到内存中运行
5.5.2 Nand Flash驱动移植
5.5.3 Nand Flash命令测试
5.6 YAFFS文件系统移植
5.6.1 在u-boot中添加对烧写YAFFS镜像的支持
5.6.2 YAFFS文件系统镜像制作
5.6.3 YAFFS的烧写与测试
5.7 UBIFS文件系统移植
5.7.1 在u-boot中添加对UBIFS的支持
5.7.2 UBIFS文件系统镜像制作
5.7.3 UBIFS的烧写与测试
5.8 SD卡驱动移植
5.8.1 S3C6410主机控制器操作
5.8.2 S3C6410主机控制器操作序列
5.8.3 SD卡驱动分析
5.8.4 SD卡驱动移植
5.8.5 通过SD卡更新系统
5.9 USB驱动移植
5.9.1 S3C6410 USB2.0高速OTG
5.9.2 u-boot USB设备控制器驱动分析
5.9.3 USB设备驱动移植
5.9.4 USB功能测试
5.10 本章小结
Linux内核移植篇
第6章 Linux内核工程与编译系统
6.1 Linux内核架构
6.1.1 内核体系结构
6.1.2 内核组件
6.1.3 内核目录结构
6.2 Linux内核的配置与编译
6.2.1 配置内核
6.2.2 编译内核
6.3 Linux内核构建系统
6.3.1 内核配置过程
6.3.2 扩展内核代码
6.3.3 内核中的Makefile
6.3.4 内核中的Kconfig
6.4 内核调试技术
6.4.1 调试准备
6.4.2 内核调试配置选项
6.4.3 源码级别的调试接口
6.4.4 使用printk()打印调试信息
6.4.5 使用strace跟踪系统调用
6.4.6 使用OOPS调试系统故障
6.5 本章小结
第7章 Linux内核启动流程分析
7.1 内核镜像生成
7.2 内核启动流程1——汇编部分
7.2.1 内核启动代码入口
7.2.2 深入源码分析
7.2.3 汇编启动代码分析总结
7.3 内核启动流程2——C语言部分
7.3.1 start_kernel()函数
7.3.2 rest_init()函数
7.3.3 kernel_init()函数
7.3.4 init_post()函数
7.4 内核启动流程3——Busybox的init进程
7.4.1 init进程启动流程
7.4.2 添加初始化活动
7.4.3 执行初始化活动
7.5 本章小结
第8章 Linux移植准备及最小系统构建
8.1 移植准备工作
8.1.1 开发环境
8.1.2 删减Linux文件
8.1.3 建立My2440配置
8.1.4 建立My6410配置
8.1.5 编译测试
8.2 最小系统搭建
8.2.1 嵌入式根文件系统制作
8.2.2 安装initramfs根文件系统
8.3 本章小结
第9章 Linux网卡驱动移植
9.1 Linux网络子系统
9.2 核心数据结构
9.2.1 net_device结构
9.2.2 sk_buff结构
9.3 DM9000网卡驱动分析
9.3.1 board_info结构
9.3.2 dm9000_probe()函数
9.3.3 dm9000_open()函数
9.3.4 dm9000_start_xmit()函数
9.3.5 数据包接收函数
9.3.6 数据包发送函数
9.3.7 中断处理函数
9.4 My2440网卡驱动移植
9.4.1 添加DM9000的平台设备
9.4.2 在内核配置添加对DM9000的支持
9.5 My6410网卡驱动移植
9.5.1 添加DM9000的平台设备
9.5.2 在内核配置中添加对网络子系统的支持
9.5.3 在内核配置添加对DM9000的支持
9.6 安装NFS根文件系统
9.6.1 在内核配置添加对NFS的支持
9.6.2 挂载NFS根文件系统
9.7 制作基于共享库的根文件系统
9.8 本章小结
第10章 Linux混杂设备驱动
10.1 My2440 RTC驱动移植
10.2 My6410 RTC驱动移植
10.2.1 修改RTC驱动rtc-s3c.c
10.2.2 完善对6410 RTC驱动的平台支持
10.2.3 在机器配置文件中添加RTC设备
10.2.4 在内核中配置RTC
10.3 RTC驱动测试
10.4 为My2440添加ADC和按键驱动
10.4.1 按键驱动分析
10.4.2 在内核中添加ADC和按键驱动
10.5 为My6410添加ADC驱动
10.6 本章小结
第11章 Linux I2C驱动移植
11.1 I2C协议概述
11.1.1 I2C总线物理拓扑结构
11.1.2 I2C通信协议
11.2 Linux I2C子系统框架
11.3 I2C驱动中的数据结构及操作
11.3.1 i2c_adapter结构
11.3.2 i2c_algorithm结构
11.3.3 i2c_msg结构
11.3.4 i2c_driver结构
11.3.5 i2c_client结构
11.4 I2C适配器的设备接口
11.4.1 i2cdev_open()函数
11.4.2 i2cdev_read()函数
11.4.3 i2cdev_ioctl()函数
11.5 S3C2440(6410)I2C适配器驱动的实现
11.5.1 S3C2440 I2C platform总线匹配
11.5.2 S3C2440 I2C总线驱动描述结构
11.5.3 probe方法的实现
11.5.4 S3C2440 I2C总线通信方法
11.6 S3C2440(6410)I2C适配器驱动移植
11.6.1 添加I2C平台设备
11.6.2 在内核配置中支持I2C驱动
11.6.3 编写I2C总线驱动测试程序
11.7 S3C2440(6410)I2C设备驱动的实现
11.7.1 At24系列I2C EEPROM设备驱动的实现
11.7.2 传统只读EEPROM设备驱动的实现
11.8 I2C EEPROM设备驱动移植
11.9 本章小结
第12章 Linux SPI驱动移植
12.1 SPI协议概述
12.1.1 SPI总线物理拓扑结构
12.1.2 时钟极性和时钟相位
12.1.3 SPI的优缺点
12.2 Linux SPI子系统
12.3 SPI驱动中的数据结构及操作
12.3.1 spi_master结构
12.3.2 spi_driver结构
12.3.3 spi_device结构
12.3.4 spi_message结构
12.3.5 spi_bitbang结构
12.4 SPI控制器的设备接口
12.5 S3C2440 SPI控制器驱动的实现
12.5.1 S3C2440 SPI platform总线匹配
12.5.2 S3C2440 SPI控制器驱动描述结构
12.5.3 probe方法的实现
12.5.4 S3C2440 SPI总线通信方法
12.6 S3C6410 SPI控制器驱动的实现
12.6.1 S3C6410 SPI控制器驱动描述结构
12.6.2 probe方法的实现
12.6.3 S3C6410 SPI总线通信方法
12.7 S3C2440 SPI控制器驱动移植
12.7.1 在机器配置文件中添加对SPI的支持
12.7.2 扩展Kconfig
12.7.3 在内核配置中支持SPI驱动
12.7.4 SPI驱动测试
12.8 S3C6410 SPI控制器驱动移植
12.8.1 添加6410的SPI驱动
12.8.2 添加SPI平台设备
12.8.3 添加6410 DMA平台代码
12.8.4 添加SPI、DMA相关的时钟资源
12.8.5 在机器配置文件中添加对SPI的支持
12.8.6 SPI驱动测试
12.9 S3C2440(S3C6410)SPI协议驱动移植
12.9.1 AT25系列SPI EEPROM协议驱动的实现
12.9.2 SPI EEPROM设备驱动移植
12.10 本章小结
第13章 Nand Flash驱动移植
13.1 Linux MTD子系统
13.2 MTD子系统中的数据结构及操作
13.2.1 mtd_info结构
13.2.2 mtd_notifier结构
13.2.3 mtd_part/mtd_partitions结构
13.3 MTD块设备实现分析
13.4 Nand Flash驱动的实现
13.4.1 Nand Flash platform总线匹配
13.4.2 S3C2440 Nand Flash控制器驱动描述结构
13.4.3 probe方法的实现
13.4.4 S3C2440 Nand Flash读写方法分析
13.5 S3C2440 Nand Flash控制器驱动移植
13.5.1 在机器配置文件中添加对Nand Flash的支持
13.5.2 完善S3C2440的Nand Flash驱动
13.5.3 在内核配置中支持Nand Flash驱动
13.6 S3C6410 Nand Flash控制器驱动移植
13.6.1 添加6410 Nand Flash驱动
13.6.2 添加Nand Flash平台设备
13.6.3 在机器配置文件中添加对Nand Flash的支持
13.6.4 其他修改
13.7 YAFFS2文件系统移植
13.7.1 将YAFFS2文件系统移植到Linux内核
13.7.2 利用mtd-utils烧写YAFFS2文件系统镜像
13.8 在内核中配置对UBIFS的支持
13.9 本章小结
第14章 SD/MMC卡驱动移植
14.1 Linux MMC子系统
14.2 MMC子系统中的数据结构及操作
14.2.1 mmc_host结构
14.2.2 mmc_card结构
14.2.3 mmc_driver结构
14.2.4 mmc_request结构
14.3 卡探测过程分析
14.4 S3C2440 SD/MMC主控制器驱动的实现
14.4.1 SD/MMC主控制器驱动platform总线匹配
14.4.2 S3C2440 SD/MMC主控制器驱动描述结构
14.4.3 probe方法的实现
14.4.4 S3C2440 SD/MMC主控制器请求处理分析
14.5 S3C6410高速MMC控制器驱动的实现
14.5.1 SDHCI驱动框架
14.5.2 SDHCI主机卡探测过程
14.5.3 S3C6410 HSMMC控制器驱动
14.5.4 S3C6410 HSMMC控制器请求处理
14.6 S3C2440 SD/MMC主机控制器驱动移植
14.6.1 在机器配置文件中添加对SD/MMC主控制器的支持
14.6.2 在内核配置中添加对SD/MMC主控制器驱动的支持
14.6.3 在内核配置中添加对中文字符集和FAT文件系统的支持
14.6.4 在文件系统中添加对热插拔事件处理的支持
14.6.5 SD/MMC主控制器驱动测试
14.7 S3C6410 HSMMC控制器驱动移植
14.7.1 添加6410 Nand Flash驱动
14.7.2 在机器配置文件中添加对HSMMC的支持
14.7.3 修改内核SDHCI驱动
14.8 本章小结
第15章 LCD驱动移植
15.1 LCD硬件原理
15.1.1 LCD的硬件构成
15.1.2 TFT屏显示时序
15.2 Linux帧缓冲子系统
15.3 帧缓冲子系统中的数据结构及操作
15.3.1 fb_info结构
15.3.2 fb_var_screeninfo结构和fb_fix_screeninfo结构
15.3.3 fb_cmap结构
15.4 帧缓冲字符设备接口
15.5 Linux显示启动Logo
15.6 S3C2440帧缓冲驱动的实现
15.6.1 S3C2440 LCD控制器硬件描述
15.6.2 驱动platform总线匹配
15.6.3 S3C2440帧缓冲驱动描述结构
15.6.4 probe方法实现
15.7 S3C6410帧缓冲驱动的实现
15.8 S3C2440帧缓冲驱动移植
15.8.1 在板级初始化文件中添加对帧缓冲的支持
15.8.2 修改Makefile和Kconfig
15.8.3 在内核配置中添加对帧缓冲驱动的支持
15.8.4 帧缓冲驱动测试
15.9 S3C6410帧缓冲驱动移植
15.9.1 添加6410帧缓冲驱动
15.9.2 在机器配置文件中添加对帧缓冲的支持
15.9.3 帧缓冲驱动测试
15.10 本章小结
第16章 触摸屏驱动移植
16.1 Linux输入子系统
16.2 输入子系统中的数据结构及操作
16.2.1 input_dev结构
16.2.2 input_handler结构
16.2.3 input_handle结构
16.3 输入子系统核心层的实现
16.4 通用事件处理驱动
16.5 输入事件报告流程
16.6 S3C2440(6410)触摸屏驱动的分析
16.6.1 模块初始化函数的实现
16.6.2 中断处理与事件上报
16.7 S3C2440触摸屏驱动移植与测试
16.7.1 S3C2440触屏驱动移植
16.7.2 S3C2440触屏驱动测试
16.8 S3C6410触摸屏驱动移植与测试
16.8.1 添加6410的触摸屏驱动
16.8.2 添加触屏平台设备
16.8.3 在机器配置文件中添加对触屏的支持
16.9 本章小结
第17章 声卡驱动移植
17.1 ALSA体系架构
17.1.1 ALSA设备文件
17.1.2 驱动代码的文件结构
17.2 声卡描述结构snd_card
17.3 PCM功能子层
17.3.1 PCM的概念
17.3.2 PCM设备描述结构snd_pcm
17.3.3 PCM流与PCM子流
17.3.4 PCM功能子层逻辑关系小结
17.3.5 PCM设备文件的建立
17.3.6 PCM设备文件的访问
17.4 声卡控制项
17.4.1 控制项创建
17.4.2 控制项回调函数
17.4.3 Control设备建立
17.5 ASoC声卡驱动架构
17.6 ASoC架构中的Machine驱动
17.6.1 创建ASoC声卡平台设备
17.6.2 ASoC声卡的平台驱动
17.7 ASoC架构中的Codec驱动
17.7.1 Codec的DAI和PCM的配置
17.7.2 Codec的控制IO
17.7.3 混音器和其他音频控制项
17.7.4 Codec设备与ASoC声卡注册
17.8 ASoC架构中的Platform驱动
17.8.1 CPU DAI驱动
17.8.2 音频DMA驱动
17.8.3 创建音频DMA缓冲区
17.8.4 音频DMA的PCM操作
17.9 S3C2440+UDA1341声卡驱动配置与测试
17.9.1 在机器配置文件中添加对声卡的支持
17.9.2 在内核配置中支持声卡驱动
17.9.3 应用层alsa-1ib移植
17.9.4 编写ALSA应用程序
17.9.5 播放和录音测试
17.10 S3C6410+WM9714声卡驱动移植
17.10.1 添加6410声卡驱动
17.10.2 在内核配置中支持声卡驱动
17.10.3 alsa-utils工具集移植
17.11 本章小结
第18章 USB驱动移植
18.1 USB子系统架构
18.2 USB驱动中的描述符结构
18.3 USB主机驱动
18.3.1 主机控制器驱动
18.3.2 OHCI主机控制器驱动
18.4 S3C2440/S3C6410 USB主机驱动的实现
18.5 USB设备驱动
18.5.1 USB设备驱动描述结构
18.5.2 USB请求块URB
18.5.3 URB的处理流程
18.5.4 usb_bulk_msg()和usb_control_msg()
18.5.5 探测和断开函数
18.6 USB骨架程序
18.7 USB设备驱动实例
18.7.1 DNW驱动的实现
18.7.2 USB键盘驱动的实现
18.8 本章小结
应用程序移植篇
第19章 嵌入式Qt移植
19.1 Qt开发环境搭建与使用
19.1.1 Qt SDK的下载与安装
19.1.2 第一个Qt程序
19.1.3 利用QtCreator建立一个工程
19.2 Qt的功能模块与裁剪
19.2.1 Qt模块的构成
19.2.2 图形用户界面
19.2.3 信号与槽
19.2.4 布局管理
19.2.5 主视窗
19.3 嵌入式Qt移植与测试
19.3.1 触屏库tslib移植
19.3.2 Qt库移植
19.3.3 嵌入式Qt程序测试
19.3.4 嵌入式Qt工程配置与测试
19.4 本章小结
第20章 嵌入式多媒体程序移植
20.1 音频播放程序madplay的移植
20.1.1 在Ubuntu中安装madplay
20.1.2 在Ubuntu中测试madplay
20.1.3 将madplay移植到开发板
20.1.4 在开发板中测试madplay
20.2 视频播放程序MPlayer的移植
20.2.1 在Ubuntu中安装MPlayer
20.2.2 在Ubuntu中测试MPlayer
20.2.3 将MPlayer移植到开发板
20.2.4 在开发板中测试MPlayer
20.3 利用Qt开发视频播放器
20.3.1 MPlayer的SLAVE模式
20.3.2 示例播放器MyPlayer的实现
20.4 本章小结
第21章 嵌入式数据库移植
21.1 SQLite数据库的使用
21.1.1 使用命令行操作SQLite
21.1.2 使用C语言操作SQLite
21.1.3 在Qt中操作SQLite
21.1.4 在QTableView中显示数据库内容
21.2 SQLite数据库的移植
21.2.1 将SQLite移植到开发板
21.2.2 在开发板中测试SQLite
21.3 本章小结
第22章 嵌入式Web服务器移植
22.1 Boa的使用与HTML页面测试
22.2 CGI程序测试
22.2.1 CGI的概念和原理
22.2.2 编写CGI脚本测试
22.2.3 CGIC库的基本使用
22.3 通过网页控制设备
22.4 通过网页监控设备
22.5 网页视频监控
22.6 将Web服务器移植到开发板
22.6.1 将Boa移植到开发板
22.6.2 将CGIC移植到开发板
22.6.3 将mjpg-streamer移植到开发板
22.6.4 在开发板上搭建Web服务站点
22.7 本章小结
第23章 嵌入式JVM移植
23.1 phoneME虚拟机移植
23.1.1 获取源代码
23.1.2 编译和安装
23.1.3 测试步骤
23.2 JamVM虚拟机移植
23.2.1 GNU Classpath移植
23.2.2 JamVM移植
23.2.3 JamVM测试
23.3 在JamVM上运行Jetty服务器
23.3.1 Jetry服务器启动
23.3.2 在Jetty服务器中部署Web应用
23.3.3 Servlet和JSP页面测试
23.4 本章小结