岗位题目
Linux 驱动相关面试题
platform driver 的 probe 没有执行,可能是什么原因?
这题考 Linux platform 驱动匹配排障,回答要先判断是否完成设备和驱动匹配,再检查设备树、模块、表项和资源依赖。
一个 I2C 传感器在新板子上如何从设备树到驱动到用户态 bring up?
这题考新板传感器 bring-up 的全链路能力,回答要覆盖硬件确认、设备树描述、驱动匹配、寄存器验证和用户态接口。
Linux 驱动如何用异步通知把设备数据准备好这件事通知用户程序?
这题考 Linux 驱动事件通知机制,回答要讲清用户进程开启异步通知、驱动维护 fasync 队列、数据就绪时发送信号并由用户再读取数据。
Linux 用户空间和内核空间如何隔离,mmap 映射的是哪类地址?
这题考虚拟地址空间和驱动映射,回答要区分用户虚拟地址、内核虚拟地址、物理页和设备寄存器映射。
应用层调用 open 后如何进入内核驱动的 open?
这题考 VFS 到字符设备驱动的调用链,回答要从用户态系统调用、路径解析、inode/file、major/minor 到 file_operations.open 讲清楚。
驱动 probe 成功但设备仍异常,说明什么,如何排查?
这题考驱动 bring-up 排障思路,回答要说明 probe 成功只代表绑定和初始资源申请成功,不代表设备功能完全正确。
设备树中配置 64 位地址空间时,reg 里的四个数字分别表示什么?
这题考设备树地址编码规则,回答要强调 reg 由父节点的 address-cells 和 size-cells 决定,四个数字通常是 64 位地址高低和 64 位长度高低。
pinctrl 子系统如何调用设备树内容,描述符起什么作用?
这题考 pinctrl 子系统和设备树的关系,回答要说明设备树描述 pin state,pinctrl 核心解析成映射,控制器描述符提供可用引脚、复用和配置操作。
platform 与设备树是什么关系,二者有什么区别?
这题考 Linux 设备模型基础,回答要区分 platform 是非可发现设备的总线/驱动框架,设备树是描述硬件资源的数据来源。
Linux 驱动 probe 失败时资源清理策略是什么,devm_* 如何简化清理?
这题考驱动资源生命周期管理,回答要说明手动清理需按申请逆序 unwind,devm_* 把资源绑定到 device 生命周期并在失败或移除时自动释放。
驱动里申请 GPIO 或中断一般调用哪些接口,为什么不能直接操作寄存器?
这题考内核资源管理意识,回答要说明 GPIO 和 IRQ 应通过 descriptor、设备树和 devm 接口申请,不能绕过 pinctrl/irqchip 直接写寄存器。
ARM64 架构下 Linux 中断处理流程是什么,需要保存哪些寄存器?
这题考 ARM64 Linux 中断入口和上下文保存,回答要讲清异常向量、保存 pt_regs、GIC 分发、通用中断层处理和返回恢复。
insmod 和 modprobe 有什么区别,驱动模块依赖如何处理?
这题考内核模块加载工具差异,回答要说明 insmod 只插入指定 ko,modprobe 会按模块库、别名和依赖自动加载。
Linux 内核模块的 module_init 底层原理是什么?
这题考内核模块初始化机制,回答要说明 module_init 宏把初始化函数注册到特定入口,加载模块时内核完成 ELF 装载、符号解析、重定位后调用它。
Linux 内核空间和用户空间有哪些通信方式?
这题考内核用户态交互方式选型,回答要按控制、数据流、事件通知、配置调试和大块共享分别说明适用场景。
驱动中如何把内核内存拷贝到用户空间,需要注意什么?
这题考驱动用户拷贝安全,回答要说明必须使用 copy_to_user 等接口,检查长度和返回值,避免在原子上下文、持自旋锁或暴露未初始化数据。
Linux I2C 子系统和 input 子系统如何协作完成触摸屏驱动上报?
这题考触摸屏驱动架构,回答要把总线驱动负责寄存器访问、输入子系统负责事件上报、中断负责触发读取串起来。
MTD 子系统如何处理 SPI 多设备?
这题考 MTD、SPI core 和存储器驱动分层,回答要说明每个片选上的存储器作为独立 spi device,由 spi-nor 或 spi-mem 驱动注册成独立 MTD 设备和分区。