1. 实际经验:所开发驱动程序或内核模块的来龙去脉(需求、设计思想、实现方法、要点难点,特别是硬件调试过程中所遇到的特殊情况),所修复BUG的现象、调试手段、原因分析和解决方案。

2. 驱动调试:内核的调试手段、应用程序的调试手段(内核Panic所dump的信息以及Panic的分析、应用程序core dump的分析)。

3. 驱动基础:mknod与udev,module相关API,内核Makefile的编写,设备编号的申请,设备的注册,简单驱动的fops(open/read/write/ioctl/release),用户空间和内核空间的数据交换,阻塞操作的实现、select/poll的支持,mmap的实现,DMA机制及其注意事项。

4. 中断机制:Linux中断机制的内在逻辑,中断处理程序的实现要点,中断共享机制,中断上下文与进程上下文的区别(为什么在中断上下文中不能执行导致进程调度的函数)中断与异常的区别,中断的管理(开中断与关中断)。

5. 下半部:Linux下半部机制的必要性,三种类型下半部(softirq/tasklet/work queue)的区别与应用场景,三种下半部机制的API,中断处理程序、下半部以及进程上下文之间的同步问题。

6. 内核同步:内核中竞争与同步机制的内在逻辑,内核同步方法(原子操作/spinlock/信号量/读写锁/完成变量completionvariable/Seq_lock/Read-copy-update/Per-CPU变量/禁止内核抢占、中断和下半部/内存屏障)的内在逻辑、区别与应用场景。

7. 内存分配:Linux内存管理及分配机制(buddy system和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的架构,文件open的过程(普通文件、字符设备、块设备)、系统调用open和字符设备驱动open函数的参数差异。

15. 其他知识:Makefile的编写/Shell编程/Busybox/GCC编译过程及其优化/GDB命令/动态链接库的链接方式/NPTL之线程管理接口/ELF/Linux的Log机制/变量在内存中的存储/Daemon进程/孤儿进程
Logo

更多推荐