| 进入嵌入式Linux的精彩世界 | 
Linux的特点、版本演进与发展方向嵌入式Linux系统组成开发环境构建
                    
安装设置ARM工具链安装设置NFS、SSH、TFTP服务GNU工具链和GDB调试 | 
| 嵌入式Linux构建与启动过程分析 | 
文件系统组成Busybox编译与配置加入C库Linux启动过程
                    
Bootloader内核启动过程用户空间init嵌入式Linux裁剪
                    
内核Kconfig和Makefile内核源代码目录内核裁剪文件系统裁剪 | 
| Linux内核进程调度 | 
task_struct进程调度算法进程调度时机实时性 | 
| Linux内核内存管理 | 
mm_struct, vmabuddy系统slab、kmallocDMA、NORMAL、HIGHMEM ZONE静态内存映射连续内存管理,CMA | 
| Linux内核文件系统 | 
虚拟文件系统inode、dentry、superblock文件系统与block层Flash文件系统 | 
| Linux 内核系统调用 | 
Linux系统调用实现原理Linux系统调用实现增加一个新的系统调用 | 
| 内核编程主要API | 
同步与并发等待队列内核延时内存申请和释放定时器中断顶底半部
                    
软中断tasklet工作队列threaded_irqLinux内核线程IO与内存访问DMA与cache一致性 | 
| Linux内核模块 | 
内核模块init和exit输入参数输出参数案例部分:4个试验案例演示模块各个功能 | 
| Linux内核调试方法 | 
printkOops和panic内核debug选项gdb、kgdb和kdb使用仿真器 | 
| Linux设备驱动模型 | 
Linux设备分类Sys,总线,设备和驱动热插拔电源管理udev | 
| Linux字符设备驱动结构 | 
Linux字符设备驱动结构globalmem虚拟设备实例描述globalmem设备驱动globalmem驱动的编译与加载globalmem驱动在用户空间的验证 | 
| Linux设备驱动中的并发控制 | 
并发控制的概念何时需要并发控制自旋锁信号量,mutex增加并发控制后的globalmem驱动 | 
| Linux设备驱动中的阻塞与非阻塞I/O | 
阻塞与非阻塞I/Opoll操作的概念何时需要poll操作等待队列waitqueuesLinux poll操作相关数据结构与函数支持poll操作的globalmem驱动 | 
| Linux 设备驱动中的异步通知 | 
异步通知的概念何时需要异步通知Linux异步通知相关数据结构与函数支持异步通知的globalmem驱动
                    
在globalmem驱动中增加异步通知在用户空间验证globalmem的异步通知 | 
| Linux MTD子系统与FLASH驱动 | 
Linux MTD子系统结构NOR FLASH驱动NAND FLASH驱动FLASH文件系统:JFFS2/YAFFS2/UBI | 
| Linux 网络设备驱动 | 
Linux网络协议栈sk_buffLinux网络设备驱动结构数据发送流程数据接收流程 | 
| 设备驱动的分层 | 
设备驱动分层框架实例1:input子系统实例2:LCD子系统 | 
| I2C驱动 | 
I2C主机驱动I2C client驱动I2C驱动电源管理I2C板文件信息 | 
| SPI驱动 | 
SPI主机驱动SPI client驱动SPI驱动电源管理SPI板文件信息 | 
| platform设备驱动 | 
platform驱动platform设备platform设备板级信息 | 
| 将Linux移植到一个新的ARM SoC | 
early_printkL2 cacheOS timerclk treeGPIOpinmuxIRQ chipDMAMACH_INITdevice tree社区维护 | 
| Linux调试与性能优化 | 
stracecore dumpgdb与多线程常用工具(top/vmstat/iostat/sysctl等)性能优化: oprofile, LTTng, gprof开机速度: bootchart功耗:powertop延迟:latencytop内存分析: procmem、procrank、smemtop, iostat, netstat等  |