秋招:小米 嵌入式 1面+2面(近100个问题 全面涵盖linux内核!!)
小米系统安全解bug岗,一二面将近问了100个问题,而且涵盖很广
一面 9.14
- 实习内容
- 驱动加k载流程
- 加载过程会做检测嘛
- 如果一个驱动所依赖的符号表在内核里没有会发生什么
- 加载过jj程中的重定向
- ko和直接编译进内核的驱动文件有啥不一样? 加载过程不一样
- insmod和modprobe有啥区别
- modprobe可以加载依赖
- 并行
- 如何做CPU的测试
- 遇到的问题
- 实现了那些gdb
- 收获了什么,为什么做这个
- I2C器件都有那些,有啥功能
- 几个马达,怎么控制转向?
- gstreamer使用过程中会格式转换么?
- 配置的I2C速率
- I2C时序
- 小车上有几个线程?
- 多线程遇到过什么问题?
- 原子变量怎么实现的?
- CPU还有什么提升的地方
- 原子变量用于什么场景的保护 用于多线程或多处理器环境中,确保对某些共享数据的无锁操作,避免竞争条件(race conditions)和数据不一致问题
- cache的作用?
- 缓存插入的方式(随机、LRU)
- 什么情况下缓存会导致效率变慢
- 什么情况下会清空TLB
- 设备树怎么理解
- 内核怎么得到设备树的信息
- 改过设备树么?
- 看过啥linux的源码
- 有那些锁?
- 互斥锁和自旋锁的区别
- 互斥锁可以嵌套么?
- 为什么会死锁,用一个场景描述
- 内存泄漏怎么查看?
- 越界怎么检测?
- free后再使用可以检测出来么?
二面 9.20
- 设备树配合pinctrl怎么配置
- pinctrl不同的函数集是用来配什么的
- gpio_chip测试了什么
- v4l2底层改了什么
- 调摄像头配置么?
- v4l2应用层的使用
- v4l2中拿取buffer内容
- I2C发送放在哪里?
- I2C设备树里都会配什么
- I2C的协议
- I2C的驱动框架
- 字符设备驱动的流程,api
- class_create的作用 内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,创建了这个类,再调用device_create()函数来在/dev目录下创建相应的设备节点。 这样,加载模块的时候,用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。
- file_options函数集有哪些
- poll这个文件接口是干嘛的 用于异步通知 非阻塞I/O+poll = 查询设备是否可访问+设备可访问后再通知用户进行处理
- tcp的服务端和客户端的链接api 服务端socket->bind->listen->accept 客户端socket->connect
- 总线匹配流程
- pinctrl的配置在realy_probe么?
- spi协议
- spi总线的数据结构
- 串口有几根线 txd rxd gnd
- 设计CPU有参考别的架构么?
- 5级流水是什么
- 虚拟外设有哪些?
- 虚拟转物理地址的过程
- TLB和MMU
- 页表项里的地址是物理地址还是虚拟地址
- 缺页中断的流程
- 缺页异常是用来干什么的?
- malloc会建立好映射关系么? 用的时候才会建立
- 匿名页和文件页
匿名页是指没有直接关联文件的内存页。它们通常用于进程的堆、栈、全局变量、共享内存(如
mmap
的匿名映射)、动态内存分配(如malloc
)等。这些页在进程运行时动态创建,不需要与磁盘文件相关联 文件页是与磁盘文件相关联的内存页。这些页用于将文件内容映射到内存,允许应用程序对文件进行高效的读写操作。文件页的主要用途包括内存映射 I/O(Memory-mapped I/O)和程序的代码段、数据段的加载。
区别总结
来源 | 动态内存(堆、栈、共享内存) | 磁盘文件(代码段、数据段、内存映射文件) |
与文件关联 | 无 | 有 |
交换(Swap) | 可以交换到交换空间 | 修改后可以同步回文件或交换到交换空间 |
主要用途 | 堆、栈、共享内存、动态分配内存 | 代码段、数据段、文件 I/O |
内存管理中的作用
- 匿名页:用于分配进程执行所需的动态内存、栈、共享内存等,确保进程有足够的私有工作内存。
- 文件页:允许文件系统与内存交互,支持内存映射文件 I/O,使程序加载更高效,支持代码共享,减少内存使用。
32. 伙伴系统作用
33. 有哪些zone
34.arm64有DMA还是DMA32 DMA是x86的
35.有哪些迁移类型
36.slab介绍一下
37.slab node?
38.页面分配的流程
__get_free_pages 从各个ZONE中找一个能分配的页 剩下按照标志进行分配的处理(清零等) >alloc_pages >alloc_pages_nodemask
39.进程调度
40.CFS是什么
41.CFS的调度周期
- 权重总和:表示所有可运行任务的权重之和,每个任务的权重由其静态优先级(niceness 值)决定。
CFS 使用“vruntime”(虚拟运行时间)来决定任务的优先级,每个任务的
vruntime
随着实际运行时间和其优先级变化。在调度时,CFS 会选择vruntime
最小的任务执行。
假设目标延迟为 20 毫秒,系统中有 4 个同等优先级的任务(权重相同),调度周期为:
每个任务将在 80 毫秒的调度周期内获得 20 毫秒的 CPU 时间 43. RR和FIFO的区别 44. RR是怎么管理的? 优先级队列 45. 抢占的时机 比较重要的是中断返回的时候也可以抢占 46. 中断注册流程 47. 放在什么数据结构? 48. 申请的中断号是硬件中断号还是软件中断号? 硬件中断号 49. 锁 50. 自旋锁和互斥锁的区别 51. 中断下半部有了解么? 52. tasklet和工作队列的区别 53. 软中断都在中断上下文中么? 不是 如果太多的话 有的会开一个线程 54. 软中断中是中断是开着还是关着 55. 文件系统了解么? 56. 文件名存在哪 dentry 57. IO的什么东西没听清
9/29 hr面
直接一个电话打过来大概聊了十分钟不到,十分标准的hr面。祖籍、成绩、比赛、获奖等等,应该根本没看简历,就依次问问题。
1. 自我介绍:高通、Oppo(sp)、vivo(sp)、小米(ssp)、荣耀(26k*12+80k)、华子(报批中)、美团、韶音、经纬恒润、乐鑫、TPLINK、中兴 2. 内容: 1.嵌入式学习的资料和路径 2.所有面试的题目和解答(持续更新)、对评论的快速解答 3.各种碎碎念 3.整理不易,buy me coffee☕️,为了回馈牛客和各个粉丝,文章都会先试读几天,热度过了再收录~