蔚来嵌入式二面面经
这次主要围绕Linux内核和驱动开发来提问,难度还是比较大的,基础八股文比较少一点。
1. 项目相关追问
- 你在项目里移植过哪些驱动?遇到的主要问题是什么?
- 设备树修改过程能讲一下吗?如何确认设备树配置是否正确?
- MIPI 屏幕黑屏时,你是怎么一步一步定位问题的?
- 有没有写过 GPIO 中断驱动?怎么处理抖动和多次触发?
- 内核态和用户态之间的数据交互,你是怎么实现的?
2. Linux 内核基础
- Linux 内核里进程和线程的区别?
- 内核态和用户态是如何切换的?
- 系统调用的流程能讲一下吗?
- Oops 日志里信息怎么看?你会先关注哪些关键字段?
3. 驱动开发相关
- platform 驱动的 probe 流程是怎样的?
- 字符设备和块设备的区别?
- I²C/SPI 总线驱动的注册机制?
- DMA 和 CPU 拷贝的区别?在驱动里怎么选择?
- 中断上下文和进程上下文的差别?中断里能不能调用
msleep
? - 如果驱动加载失败,你会从哪些方面排查?
4. Linux 并发与同步
- 自旋锁和互斥锁的区别?
- 自旋锁在什么场景下会导致问题?
- 工作队列和 tasklet 的区别?
- 原子操作在内核里是怎么用的?
5. 综合八股与场景题
- CFS 调度器的基本思想?
kmalloc
和vmalloc
的区别?- 设备树和驱动匹配的过程?
- 如果写网络驱动时忘了处理 cache,一般会出现什么问题?
- 当你遇到驱动崩溃导致内核 panic,会如何调试?