一面考察基础功底(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。
多点触控通过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开发指南》三大驱动知识库,越早加入一定是越先享受到福利的,还可以得到我的面试指导。
我始终相信,努力不会骗人,每天的细小积累,都是日后翻盘的筹码。
想要系统性梳理技术知识,尤其是在嵌入式领域,一份好的学习资料和清晰的计算机基础框架能让你事半功倍。

当前星球内容有:
1、八股文,部门内容预览:
网络相关的八股文知识点,是面试中的高频考点。

算法题解也是笔试面试的重中之重。

驱动/操作系统相关知识点覆盖全面。

2、大厂校招笔试真题集:

(当前已涵盖大疆、小米、联发科、VIVO、字节、影石、德赛西威、海康威视、理想、蔚来、经纬恒润、美团、芯原股份、全志科技、诺瓦星云、CVTE、科大讯飞、芯动科技)
3、大厂校招面经合集:
部分内容预览:

加入我们,一起见证飞一样的成长: