1.实际经验:所开发驱动程序或内核模块的来龙去脉(需求、设计思想、实现方式、要点难点,非常是硬件调试过程中所遇见的特殊情况),所修补BUG的现象、调试手段、原因剖析和解决方案。
2.驱动调试:内核的调试手段、应用程序的调试手段(内核Panic所dump的信息以及Panic的剖析、应用程序coredump的剖析)。
3.驱动基础:mknod与udev,module相关API,内核Makefile的编撰,设备编号的申请,设备的注册,简单驱动的fops(open/read/write/ioctl/release),用户空间和内核空间的数据交换linux内核与驱动,阻塞操作的实现、select/poll的支持,mmap的实现,DMA机制及其注意事项。
4.中断机制:Linux中断机制的内在逻辑,中断处理程序的实现要点,中断共享机制,中断上下文与进程上下文的区别(为何在中断上下文中不能执行造成进程调度的函数)中断与异常的区别,中断的管理(开中断与关中断)。
5.下半部:Linux下半部机制的必要性linux内核与驱动,三种类型下半部(softirq/tasklet/workqueue)的区别与应用场景,三种下半部机制的API,中断处理程序、下半部以及进程上下文之间的同步问题。
6.内核同步:内核中竞争与同步机制的内在逻辑,内核同步方式(原子操作/spinlock/讯号量/读写锁/完成变量completionvariable/Seq_lock/Read-copy-update/Per-CPU变量/严禁内核占领、中断和下半部/显存屏障)的内在逻辑、区别与应用场景。
7.显存分配:Linux显存管理及分配机制(buddysystem和slab等),kmalloc的原理、应用场景及参数,alloc_pages化学页面分配,高档显存映射,Per-CPU数据,alloc_bootmem启动时的显存分配。
8.定时延时:内核定时、延时及等待机制(忙等待,内核定时器,schedule_timeout,等待队列、进程的阻塞与唤起)
9.电源管理:Linux内核的电源管理机制,驱动程序中电源管理的实现。
10.驱动子系统:嵌入式系统中常用简单总线插口(I2C/SPI/UART/SDIO)驱动子系统,重点外设模块(MTD及其文件系统/MicroSD/LCD/Camera/Audio/网卡/WIFI/BT/USB/按键与触屏)驱动子系统。
11.硬件基础:ARM体系结构的基础知识(寄存器、运行模式、MMU、Cache、常用汇编指令),中断控制器,DMA控制器等,重点外设的硬件逻辑。
12.进程管理:O(1)调度算法和CFS调度算法的思想与实现方式,优先级反转及其解决方式,内核占领(严禁占领、抢占时机),进程的管理(阻塞与唤起、等待队列、调度、放弃CPU等),进程与线程的区别、内核线程与普通进程的区别。
13.系统启动:内核启动详尽次序(上电->Bootloader->start_kernel()->各内核子系统的启动->启动新线程Init用于启动系统[...]->启动新线程用于创建各内核线程->IDLE),模块INIT的实现机制(各类INIT宏所标示的函数的调用时机)。
14.文件系统:Linux虚拟文件系统VFS的构架linux查看端口占用,文件open的过程(普通文件、字符设备、块设备)、系统调用open和字符设备驱动open函数的参数差别。
15.其他知识:Makefile的编撰/Shell编程/Busybox/GCC编译过程及其优化/GDB命令/动态链接库的链接形式/NPTL之线程管理插口/ELF/Linux的Log机制/变量在显存中的储存/Daemon进程/孤儿进程