根据面经准备面试-第一期-2026小米嵌入式软开

#嵌入式笔面经分享##牛客AI配图神器#1.I2C协议时序
I2C协议是两线制串行通信协议,物理层包括SCL时钟线、SDA数据线,支持一主多从架构
核心时序包括起始信号:
scl为高电平,sda从高到低跳变,标志通信开始
scl为高电平,sda从低到高跳变,标志通信结束
数据传输时:scl高电平时,sda必须稳定,低电平时sda可变化,准备下一位,每个字节八位,高位在前
接收方在第 9 个时钟周期拉低 SDA 表示应答,不拉低为非应答
主设备通过控制scl和sda生成起始信号,发送从设备地址(7位地址+1位读写位),等待应答后传输数据,最后停止信号结束

2.I2C 协议的应用场景和实现
我在项目中用 I2C 连接过温湿度传感器(如 SHT30)和 EEPROM,传感器通过 I2C 将采集的数据传给 MCU,EEPROM 通过 I2C 存储配置参数,

3.Linux 下 I2C 驱动编程的三层结构
回答:linux下I2C驱动为核心层、总线层、设备驱动层
核心层:提供通用api,管理总线和设备的匹配关系,是连接总线层和设备驱动层的桥梁
总线层(控制器驱动):对应具体I2C控制器,实现硬件时序,负责将核心层的抽象请求转化为实际的 SCL/SDA 电平操作
设备驱动层(外设驱动):针对具体 I2C 设备(如传感器),定义i2c_driver结构体,实现probe(初始化设备)、remove(清理)等函数,通过核心层 API 与设备通信。

4.platform 与设备树的区别

platform总线:是Linux内核为无物理总线的片上外设(GPIO、定时器)设计的虚拟总线
设备树:是一种文本文件,用树形结构描述硬件信息(外设、引脚、中断),替代传统板级C代码,驱动通过属性与设备树节点匹配
核心区别:platform 是 “驱动 - 设备” 匹配机制,设备树是 “硬件信息描述工具”;现代内核中,platform 设备通常由设备树自动生成

5.Linux 下如何获取设备树中的硬件信息
内核通过of函数解析设备树,查找节点,

6.TCP 与 UDP 的区别,Socket 编程步骤及差异
TCP服务器编程步骤:
socket创建TCP套接字
bind绑定ip和端口
listen监听连接
accept阻塞等待客户端连接,返回新套接字
recv收发数据
close关闭连接

UDP无需listen、accept、connect
收发用sendto,需指定目标地址,UDP无连接概念,一个套接字可与多个地址通信

7.IO复用:select、poll、epoll区别
三者均用于单线程管理多个I/O流,

8.Linux 字符设备驱动设计流程,read/write 实现及应用访问方式
定义file_operations结构体,实现open/read/write/release等操作函数,注册字符设备:通过cdev_init初始化cdev,cdev_add注册到内核,分配设备号(alloc_chrdev_region),创建设备文件:通过class_create和device_create自动生成/dev/xxx(替代手动mknod。

read从设备读取数据到用户空间,内核到用户
write是从用户空间写入到设备,从用户到内核

应用程序访问方式 1打开设备,获取文件描述符
2.调用驱动的read函数,数据通过copy_to_user传递到buf
3.调用驱动的write函数,数据通过copy_from_user从buf传入内核
全部评论
这个技术面相当强
4 回复 分享
发布于 08-22 22:24 江苏
同学,瞅瞅我司,医疗独角兽,校招刚开,HC充足,我的主页最新动态,绿灯直达,免笔试~
1 回复 分享
发布于 08-21 19:38 广东
同学面的手机部还是汽车部,这些问题是根据简历上的项目提问的吗,还是单纯的问的八股
1 回复 分享
发布于 08-21 16:02 上海

相关推荐

8.22 秋招第一面,面了一小时,那会八股还是完全不熟的状态,直接裸面上了,答的非常无敌糟糕,全程汗流浃背,面完是真的快虚脱了...1. 自我介绍2. 聊目前华为实习内容之后就开始了八股盛宴😭😭😭3. 什么是中断上下文,为什么在中断处理函数中不能休眠(第一个问题我就没听清,我回答的是中断上下半部内容,被点出来后慌的我,补充说的也不是很好)4. 继续问什么是进程上下文(那会完全不了解)5. 介绍DMA(只点到了概念的大概意思),继续追问是什么驱使我用DMA而不是CPU6. 如果遇到IIC读写错误的问题,你会怎么排查7. 如果一个当驱动模块发生panic时,如何调试(没遇过,只回答了日志抓取),继续问有没有做过rundump或者kkdump?8. 有无用过中断下半部的工作队列和Tasklet(没用过,那会我连tasklet是什么都不知道😰)9. 在工作队列中可以休眠吗10.工作队列是工作在进程上下文还是中断上下文(这一块那时的我依旧完全不了解)11.驱动能直接访问用户空间的内存吗(默认不能),那如何实现间接访问(我只了解用户访问驱动的那套流程,反过来的实现完全不了解😇,后面面试官告诉我Linux有提供专门的内核函数copy_from_user/copy_to_user)12.c和c++哪个熟13.介绍c++的RAII机制,追问实现自动释放内存的原理,动态管理内存的底层逻辑是?14.介绍一下多态,虚函数表是干嘛的(多态和继承那块我是真的经不起问,一问一个不知道)15.介绍堆栈的区别16.有没有分析过内存泄露的问题17.介绍一下之前用gdb调试的经历18.有没有用gdb调试过踩内存的问题(🈚)19.什么是优先级反转(又一个当时完全不知道的问题...)20.线程间有哪些同步机制,怎么解决并发竞争的问题21.进程间的通信方式有哪些22.谈谈你遇到过的印象深刻的技术难题23.问我自学看了哪些书(Linux设备驱动开发详解、c++ primer…)有什么收获24.有接触过Linux启动这块吗25.反问就是现在的我回头再复盘这一面,依旧还是心累的😥😥秋招第一面直接来了个巨大暴击,一下就看到了很多不足,那会给我的直观感觉就是,是真的要把重心放到秋招面试的准备上来了,原本还打算九月底才结束暑期实习,那会当场就决定必须得早点all in秋招。之后就开始猛猛整理操作系统和c++的八股,无缘了影石,但这场面试非常的有用!
查看24道真题和解析
点赞 评论 收藏
分享
评论
40
197
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务