linux驱动面试题目(含答案)I2C和SPI
c吧
全部回复
仅看楼主
level 6
1. I2C 子系统架构?
硬件层:I2C 控制器驱动(如 I2c-imx),实现总线时序(START/STOP/ACK)、寄存器操作;
核心层:I2C 核心(i2c-core),提供总线管理、设备 / 驱动注册、数据传输接口;
设备层:i2c_client(表示 I2C 设备),关联设备地址、总线号、设备树节点;
驱动层:i2c_driver(I2C 设备驱动),实现 probe/remove、数据传输接口。
2. I2C 子系统使用?(核心逻辑)
控制器注册:I2C 控制器驱动通过i2c_add_adapter注册适配器(i2c_adapter);
设备注册:从设备树解析 I2C 设备节点,创建i2c_client并关联到适配器;
驱动匹配:i2c_driver的of_match_table与i2c_client的设备树节点匹配,调用 probe;
数据传输:驱动通过i2c_transfer/i2c_smbus_read/write完成数据收发
3、I2C 子系统的主要组件有哪些?
i2c_adapter:表示 I2C 控制器(适配器),管理一条 I2C 总线,提供时序驱动;
i2c_client:表示总线上的 I2C 设备,包含设备地址、所属 adapter、设备树信息;
i2c_driver:I2C 设备驱动,包含匹配表、probe/remove、数据传输接口;
i2c_msg:I2C 传输消息结构体,描述传输方向、地址、数据长度、数据缓冲区;
i2c-core:核心层,负责 adapter/client/driver 的管理、匹配、传输调度。
4、I2C 设备驱动如何与设备匹配?
设备树匹配(主流):i2c_driver的of_match_table中compatible与设备树 I2C 子节点的compatible匹配;
ID 匹配:i2c_driver的id_table(包含设备名 / 地址)与i2c_client的name/addr匹配;
名称匹配: i2c_driver 的driver.name与 i2c_client 的name 匹配; 匹配成功后,内核调用 i2c_driver 的 probe函数,传入 i2c_client 。
5、SPI 子系统架构?
硬件层:SPI 控制器驱动(如 spi-imx),实现 SPI 时序(CLK/MOSI/MISO/CS)、寄存器操作;
核心层:SPI 核心(spi-core),管理适配器、设备、驱动,提供传输接口;
设备层:spi_device(SPI 设备),包含片选号、传输模式、速率、设备树信息;
驱动层:spi_driver(SPI 设备驱动),实现 probe/remove、数据传输逻辑。
6、SPI 子系统使用?(核心逻辑)
控制器注册:SPI 控制器驱动通过spi_register_master注册主控制器(spi_master);
设备注册:从设备树解析 SPI 子节点,创建spi_device并关联到spi_master;
驱动匹配:spi_driver的of_match_table与spi_device的设备树节点匹配,调用 probe;
数据传输:驱动通过spi_transfer/spi_write/read完成数据收发。
7、SPI 子系统的主要组件有哪些?
spi_master:表示 SPI 控制器(主设备),管理一条 SPI 总线,提供时序驱动;
spi_device:表示 SPI 从设备,包含片选号、传输速率、模式(CPOL/CPHA)、所属 master;
spi_driver:SPI 设备驱动,包含匹配表、probe/remove、数据传输接口;
spi_message:SPI 传输消息,包含多个spi_transfer,支持链式传输;
spi_transfer:单个 SPI 传输单元,描述传输方向、数据长度、缓冲区、片选控制。
8、SPI 设备驱动如何与设备匹配?
(1)设备树匹配(主流):spi_driver的of_match_table中compatible与设备树 SPI 子节点的compatible匹配;
(2)ID 匹配:spi_driver的id_table(设备名)与spi_device的modalias匹配;
(3)名称匹配 : spi_driver的 driver.name与 spi_device 的modalias匹配; 匹配成功后,内核调用 spi_driver的probe 函数,传入 spi_device 。
2026年01月05日 03点01分 1
1