2010年初对思科实施嵌入式Linux开发培训,感谢思科员工的支持。第一天_________________________________________________________________课程一: 动手构建一个嵌入式Linux系统_________________________________________________________________ 1. 进入嵌入式Linux的精彩世界1.1 Linux的特色、版本演进与发展方向1.2 嵌入式Linux系统组成1.3 开发环境构建1.3.1 安装设置ARM工具链1.3.2 安装设置NFS文件系统1.3.3 安装设置SSH服务1.3.3 安装设置TFTP服务1.4 GNU工具链和GDB调试1.4.1 经常使用GNU工具的使用1.4.2 使用gdb调试器 2. 构建Linux Bootloader2.1 编译和运行U-Boot2.2 U-Boot移植 3. 内核编译与配置3.1 内核配置Kconfig和Makefile3.2 内核编译3.2 在内核中新增和修改程序 4. 构建文件系统4.1 文件系统组成4.2 Busybox编译与配置4.3 加入C库4.4 加入应用程序4.4.1 编写一个应用程序4.4.2 使用NFS服务4.4.3 使用TFTP服务次日第5章 让系统映像更小5.1 内核裁剪5.2 文件系统裁剪5.2.1 C库裁剪5.2.2 应用程序裁剪_________________________________________________________________课程二: Linux内核和内核开发技术(驱动开发必备的内核知识)_________________________________________________________________第6章 成为一个Linux内核开发者6.1 patch和邮件列表6.2官方源代码演进6.3 商业发行版版本维护6.4 源代码与项目管理工具6.5 内核代码检查和check-in第7章 Linux内核工做机理7.1 内核整体结构7.2 进程管理7.3 内存管理7.4 文件系统7.5 系统调用第8章 Linux内核编程8.1 内核编程主要API8.1.1 同步与并发8.1.2 等待队列8.1.3 内核延时8.1.4 内存申请和释放8.2 定时器8.3 中断顶底半部8.3.1 软中断8.3.2 tasklet8.3.3 工做队列8.3.4 threaded_irq8.4 Linux内核线程8.5 IO与内存访问8.6 DMA与cache一致性第9章 Linux内核模块开发9.1 内核模块组成9.2 编写一个内核模块9.3 加载和卸载内核模块9.4 内核模块进入文件系统第三天第10章 Linux内核调试方法10.1 printk10.2 oops和panic10.3 内核debug选项10.4 gdb、kgdb和kdb10.5 使用仿真器_________________________________________________________________课程三: Linux设备驱动开发(驱动原理、软件架构与设备实例)_________________________________________________________________第11章 Linux字符设备驱动结构11.1 Linux字符设备驱动结构11.2 globalmem虚拟设备实例描述11.3 globalmem设备驱动11.3.1加载与卸载设备驱动11.3.2打开与释放函数11.3.3读写函数11.3.4 seek函数11.3.5 ioctl函数11.4 globalmem驱动的编译与加载11.5 globalmem驱动在用户空间的验证第12章 Linux设备驱动中的并发控制12.1并发控制的概念12.2什么时候须要并发控制12.3自旋锁12.3.1自旋锁的概念12.3.2自旋锁相关数据结构与函数12.4信号量12.4.1信号量的概念12.4.2信号量与同步12.4.3信号量与互斥12.4.4信号量相关数据结构与函数12.5增长并发控制后的globalmem驱动12.5.1在globalmem驱动中增长并发控制12.5.2在用户空间验证globalmem设备的并发控制第13章 Linux设备驱动中的阻塞与非阻塞I/O13.1阻塞与非阻塞I/O13.2 poll操做的概念13.3什么时候须要poll操做13.4等待队列waitqueues13.5 Linux poll操做相关数据结构与函数13.5.1应用程序中的poll相关数据结构与函数13.5.2设备驱动中的poll相关数据结构与函数13.6支持poll操做的globalmem驱动13.6.1在globalmem驱动中增长poll操做13.6.2在用户空间验证globalmem设备的poll第14章 Linux设备驱动中的异步通知14.1异步通知的概念14.2什么时候须要异步通知14.3 Linux异步通知相关数据结构与函数14.4支持异步通知的globalmem驱动14.4.1在globalmem驱动中增长异步通知14.4.2在用户空间验证globalmem的异步通知第15章 硬件和综合因素:中断、IO访问、驱动分层结构15.1 以触摸屏驱动为例剖析IO访问15.2 以触摸屏驱动为例剖析中断的使用15.3 以音频驱动为例剖析剖析DMA的使用15.4 范举多个驱动子系统剖析Linux驱动的框架结构第四天第16章 Linux块设备驱动16.1块设备的I/O操做特色16.2 Linux块设备驱动结构16.3块设备驱动注册与注销16.4块设备的打开与释放16.5块设备驱动的ioctl函数16.6块设备I/O请求队列16.6.1请求队列的概念16.6.2请求队列的相关数据结构与函数16.6.3请求队列的保护机制16.7块设备的读写流程16.8实例:硬盘设备驱动第17章 Linux Ethernet设备驱动17.1 Linux网络设备驱动结构17.2网络设备驱动注册与注销17.3网络设备初始化17.4网络设备打开与释放17.5数据发送流程17.6数据接收流程17.7网络链接状态17.8参数设置和统计数据17.9实例:CS8900网卡设备驱动第18章 Linux PCI设备驱动18.1 PCI的I/O空间、存储空间和配置空间18.2 Linux PCI设备驱动架构18.3 PCI设备驱动注册与注销18.4 PCI设备初始化18.5 PCI设备的probe18.6 PCI设备打开与释放18.7 PCI设备数据读写与控制18.8 PCI设备驱动中断处理18.8实例:NE2000 PCI网卡驱动_________________________________________________________________课程四: Linux内核移植(BSP构建)_________________________________________________________________第19章 Linux BSP构建19.1 BSP的组成部分19.2 plat/mach各组件的实现19.2.1 内核节拍19.2.2中断管理19.2.3 时钟19.2.4 GPIO19.2.5 DMA19.2.6 IO内存映射19.3设备与资源19.3.1 platform device、resource和plarform data19.3.2 uart/spi/i2c等设备板级resource