岗位与流程
内核/驱动方向常见岗位:BSP 工程师、Linux 内核研发、外设驱动开发、固件/RTOS 开发。流程与后端类似:笔试(C+OS)→ 两轮技术面 → HR 面,部分芯片/终端厂加一轮主管面。
一面高频题
- 指针与数组的区别?函数指针的典型用法?volatile 何时必须用?
- 用户态与内核态切换发生在什么时候?开销在哪?
- 进程/线程/协程调度的区别?Linux CFS 的基本思想?
- 虚拟内存:页表、缺页中断、mmap 与 read 的差异?
- 中断上下半部为什么要分?tasklet/workqueue 的取舍?
- 自旋锁与互斥锁的适用场景?死锁四条件与内核里的规避手段?
- 字符设备驱动的注册流程?file_operations 里最关键的几个回调?
二面:项目与调试
- 驱动项目按「硬件手册 → 寄存器配置 → 中断/DMA → 并发保护 → 功耗」的线索讲,面试官会追问你踩过的坑。
- 调试必问:内核 oops/panic 怎么定位?会不会用 printk 分级、dmesg、ftrace、crash 工具?
- 场景题:外设偶发丢中断怎么排查?系统偶发卡顿 100ms 从哪查起?
准备建议
- 精读《Linux 内核设计与实现》调度/内存/中断三章,配合源码走读。
- 在开发板(树莓派即可)上完整跑通一个自写驱动的加载、并发访问与卸载。
- 简历量化:中断响应时延、DMA 吞吐、功耗数据比「熟悉内核」有效得多。