当前位置:首页>Linux>小米春招Linux驱动岗通关秘籍——面试深度答案全解析

小米春招Linux驱动岗通关秘籍——面试深度答案全解析

  • 2026-09-02 19:17:43
小米春招Linux驱动岗通关秘籍——面试深度答案全解析

一面考察基础功底(60min)

1、kmalloc、vmalloc和kzalloc有何区别?何时使用哪种?

kmalloc分配物理连续内存,vmalloc虚拟连续物理不定,kzalloc是kmalloc清零版。DMA必须用kmalloc,大内存(>1页)考虑vmalloc。

问:GFP_KERNEL和GFP_ATOMIC在哪些情况下不能混用?为什么?

原子上下文(中断、软中断等)必须用GFP_ATOMIC,因为GFP_KERNEL可能睡眠。

2、请描述进程用户态堆空间malloc(128)的内核实现路径

用户空间malloc->brk系统调用->内核的do_brk->检查地址空间->分配VMA结构->实际访问时触发缺页异常->分配物理页。

问:如果频繁小内存分配(如64字节)导致性能问题,如何优化?

频繁小内存分配可以用slab缓存,或者自己实现内存池,批量申请然后分割使用。

3、字符设备驱动中file结构体和inode结构体有何区别?各自存储什么信息?

inode代表文件本身,一个文件只有一个inode;file代表打开实例,一个文件可以被多次打开,就有多个file结构。

4、自旋锁和信号量的根本区别是什么?了不了解底层实现?

自旋锁忙等待(spin_lock使用原子指令),信号量睡眠等待。指令级:自旋锁用test_and_set,信号量用原子减操作+调度。

问:如果自旋锁死锁了,系统会有什么表现?如何调试?

死锁时CPU空转100%,可用lockup detector检测或spin_dump查看持有者

5、DMA映射中dma_alloc_coherent和dma_map_single有什么区别?

dma_alloc_coherent分配并映射DMA内存;dma_map_single只映射已存在的内存给DMA用。

问:什么时候需要做dma_sync_single_for_device操作?

当CPU修改了DMA缓冲区的数据后,需要告诉设备"数据已更新",这时候就要做dma_sync_single_for_device。

6、中断处理中为什么要有顶半部和底半部?软中断、tasklet和工作队列如何选择?

顶半部快速处理硬件,底半部处理耗时操作,避免关中断时间太长。

问:中断线程化(threaded IRQ)的优势是什么?如何实现?

中断线程化把底半部放到内核线程里,好处是可以被调度,可以睡眠,实时性更好。用request_threaded_irq实现。

二面项目拷打(50min)

1、你说优化了中断延迟,具体做了什么?请从硬件寄存器配置讲到中断处理函数

先调整中断触发方式为边沿触发,然后中断线程化,把非关键操作移到工作队列。

问:那如何测量中断延迟?你观察到的优化前后数据是多少?

用ftrace的irq事件跟踪测量的。优化前平均延迟150μs,优化后降到50μs。

2、触摸屏驱动中,如何处理多点触控数据的上报?input子系统如何区分不同触点?

多点触控通过input_mt_report_slot_state上报,input子系统用ABS_MT_TRACKING_ID区分触点

问:如果硬件只支持单点,但需要模拟多点,如何设计算法?

单点模拟多点需记录手势状态,用软件算法推断多指操作

3、项目中提到了电源管理,触摸屏的休眠唤醒机制如何实现?

休眠时关闭触摸IC电源,只留中断引脚供电。有触摸时产生中断,中断处理函数里唤醒系统。

问:系统休眠时怎么唤醒系统?它的整个唤醒路径怎样的?

触摸->硬件中断->中断控制器->CPU->驱动中断处理->调用pm_wakeup_event->唤醒系统

4、驱动调试中你用了ftrace,具体追踪了什么事件?发现了什么性能瓶颈?

ftrace追踪了中断处理时间和调度延迟,发现i2c_transfer占用时间过长。

问:trace_printk和printk在性能影响上有什么区别?什么情况下必须用ftrace?

trace_printk无控制台输出开销,适合高频事件追踪。printk可能改变时序掩盖问题。

5、触摸坐标校准算法是你实现的吗?转换过程是怎样的?

简单说是两点校准:获取触摸的ADC值,用(ADC - min) * screen_size / (max - min)换算到屏幕坐标。

问:如果屏幕四个角校准点响应不一致怎么办?

四角不一致说明有非线性失真,我们用了4点校准+双线性插值来修正。

6、开源要注意什么?

寄存器定义可能涉及厂商NDA,需要确认能不能公开。算法如果是我们自己写的就没问题。

总结

其它自我介绍啥的就不列举了,主要列举关键问题。简历写了比较多Linux驱动相关的,所以整个面试其实还是围绕简历写的问。

当下正是金三银四时机,知识星球祝大家一臂之力,早日拿到offer。
知识星球这段时间以来,沉淀了很多的校招的笔试面试题目,以及各大厂面经,感谢各位球友的贡献。
社招相关的面经也在陆续丰富中,目前星球也已经有了《Linux驱动社招面经》《Linux驱动八股文》和《Linux BSP开发指南》三大驱动知识库,越早加入一定是越先享受到福利的,还可以得到我的面试指导。
我始终相信,努力不会骗人,每天的细小积累,都是日后翻盘的筹码。

ending

一个人可以走得很快,一群人才能走得更远。我创建了
知识星球,如果你也需要一个良好的学习环境,加入星球,跟我一起进步。这是一个笔试刷题+面试取经+就业指导+经验分享的私密圈子,你可以阅读星球专栏、向我提问,一起进步成长。
当前星球内容有:
1、八股文,部门内容预览:
网络:
算法:
驱动/操作系统相关:
2、大厂校招笔试真题集:
(当前已涵盖大疆、小米、联发科、VIVO、字节、影石、德赛西威、海康威视、理想、蔚来、经纬恒润、美团、芯原股份、全志科技、诺瓦星云、CVTE、科大讯飞、芯动科技)
3、大厂校招面经合集:
部分内容预览:
加入我们,一起见证飞一样的成长:

end

往期推荐

直到我干了底层开发,才知道不写业务代码有多爽

你解决bug的能力,暴露了你的水平

入职Linux驱动工程师后,我才知道的真相......

很底层的性能优化:让CPU更快地执行你的代码

薪资倒挂,大家都沉默了...

机遇:我是如何走向Linux驱动的...

当我用几道题考了一遍做Linux驱动的同事..

最新文章

随机文章