影石insta360嵌入式工程师面经
技术面试
1. 我们现在要在一块新的开发板上,挂在一个I2C接口的光线传感器。你能从头到尾说说,要让这个传感器正常工作,需要做哪些事吗?(比如设备树里怎么描述它?驱动里怎么和它通信?)
2. 我们为什么现在都用设备树(Device Tree)来描述硬件,而不是像以前那样直接在代码里写死?它给驱动开发带来了什么好处?
3. 你写好了一个字符设备驱动。用户空间的程序是怎么通过 `/dev/my_sensor` 这样的设备文件,最终调用到你驱动里实现的 `open`, `read`, `write` 函数的?中间的关联是怎么建立起来的?
4. 在一个驱动里,如果我想使用某个GPIO引脚或者想注册一个中断,一般需要调用内核的哪些函数去“申请”这些资源?内核为什么要设计成“申请”模式,而不是让我们直接去操作寄存器?
5. 除了I2C,我们还常用UART。标准的UART通信只需要TX、RX两根线就够了。但在一些高速传输的场景,为什么还需要RTS/CTS这两根流控线?它们是怎么解决问题的?
6. 在驱动里,如果不想让上层应用一直傻等(轮询)数据,可以用异步通知。你能用大白话讲讲,当设备数据准备好时,驱动是怎么通知到用户程序的吗?
7. 除了Linux,我们也用一些RTOS。你了解RTOS的任务切换机制吗?当一个系统时钟滴答(tick)中断来了,调度器大概会做哪些事,来决定下一个该运行哪个任务?
主管面试
1. 聊聊你过去的项目里,最有挑战性、解决后最有成就感的一个技术问题是什么?
2. 你对嵌入式开发的哪个方向最感兴趣?是偏底层的驱动、内核,还是偏上层的应用?为什么?
3. 对于这次实习,你最想学到或者收获什么?
4. 你对我们公司或者产品有什么了解吗?有什么想问我们的?
全部评论
(4) 回帖