Linux内核开发与调试课程
课程天数:2天
课程介绍
关于LINUX的资料浩如烟海,学习LINUX的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?本着生动有趣、理论与实践密切结合的原则,本课程独辟蹊径,使用调试之剑披荆斩棘,带你闯荡纷繁复杂的LINUX世界。以格物的精神,钻研代码,深挖LINUX系统的核心机制,今日求得一理,明日再求得一理,步步推进。
课程收益
旨在实现三大目标:
1、深入理解LINUX操作系统的基础设施和核心机制;
2、学习开发LINUX程序(内核模块和应用程序)的工具和方法;
3、学习LINUX平台上的调试工具和调试典型问题的方法。
培训对象
嵌入式系统开发工程师、系统移植工程师;
课程大纲
第一单元:从Linus说起--LINUX概览
Linux内核演进过程;解析内核源代码树;内核文档;内核中的汇编代码;重要的内核模块;Linux各个发行版本及其特点的简要介绍;Linux的特点及相对于Windows的优势与劣势;学习Linux内核的方法;
第二单元:LINUX进程管理
进程和地址空间,虚拟内存原理,Page Fault,系统调用(vdso),内核态的关键组件,用户态的关键组件(libc),关键的系统进程;
第三单元:内核开发环境和工具
Linux下的常用开发工具(gnu c/c++, make);编辑及代码工具(vim,emacs,Eclipse);调试工具(gdb, kgdb); 高效率开发环境(putty + Source Insight); makefile深度解析;重新构建内核;
第四单元:内核模块
内核模块的结构;module_init();module_exit(); 模块参数;模块的描述信息(License,版本);编写Makefile;构建模块;加载模块;卸载;检查模块所依赖的内核函数;参见问题调试;
试验:修改和构建内核模块
自己动手用C语言编写一个内核模块,加载和测试;
第五单元:LINUX文件系统
“一切皆文件”;文件系统架构,组成;文件操作;设备文件系统;调试文件系统;Linux文件系统下重要目录及文件(etc,proc,sys,dev,lib,include);
第六单元:LINUX设备模型
字符设备,文件操作,read和write,ioctl,与应用程序通信;设备文件系统;poll和select;阻塞型I/O;块设备;blk.h;可移动设备;可分区设备;
第七单元:GDB和KDB/KGDB
GDB简介,GDB版本,GDB的架构和工作原理,ptrace,命令类型,命令语法,常用命令,调试符号,DWARF,符号文件,ELF结构,readelf,寻找符号的方法,栈回溯(bt),软件断点、硬件断点,复杂的断点命令,控制线程;KDB;加载内核符号;/proc/kcore;
第八单元:信号和异常处理
UNIX中的信号;信号处理; 信号一览,信号处理器,信号的分发和处理过;案例解析:segmentation fault;
第九单元:LINUX调优基础与vTune工具
困难性,性能目标示例,衡量性能的技术指标,测试性能的两种基本方法,Sampling、Instrumentation,典型的分析方法;
vTune:背景,版本历史,工作原理,主要功能,Hotspot分析,符号文件和符号文件设置,与Eclipse的集成,演示,指标解释;
第十单元:调试内核PANIC
系统崩溃概览,系统PANIC的过程,包括产生call stack和寻找函数符号的方法,导致PANIC的常见原因,Panic输出信息逐项解析,真实案例演示;Core Dump简介,工作原理,产生过程,失败的原因,使用GDB分析Core dump,真实案例演示;