找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2862

积分

0

好友

388

主题
发表于 前天 10:50 | 查看: 14| 回复: 0

一面考察基础功底(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开发指南》三大驱动知识库,越早加入一定是越先享受到福利的,还可以得到我的面试指导。

我始终相信,努力不会骗人,每天的细小积累,都是日后翻盘的筹码。


想要系统性梳理技术知识,尤其是在嵌入式领域,一份好的学习资料和清晰的计算机基础框架能让你事半功倍。

八股文、大厂真题等知识星球内容概览

当前星球内容有:

1、八股文,部门内容预览:

网络相关的八股文知识点,是面试中的高频考点。

IP地址分类等技术知识点截图

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

判断链表是否有环的C语言代码实现

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

Linux内核MMU、Cache等操作系统相关问题

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

大疆嵌入式软件工程师笔试题型与示例

(当前已涵盖大疆、小米、联发科、VIVO、字节、影石、德赛西威、海康威视、理想、蔚来、经纬恒润、美团、芯原股份、全志科技、诺瓦星云、CVTE、科大讯飞、芯动科技

3、大厂校招面经合集:

部分内容预览:

影石Insta360嵌入式软件岗位面试问题

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




上一篇:支付行业AI人才战略转向:蚂蚁集团组织优化与春招70%AI岗解析
下一篇:软件设计师2018下半年真题解析:计算机基础、算法与网络综合知识精讲
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 17:07 , Processed in 0.585962 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表