1、RK平台Sensor驱动概述

1.1 RK平台Sensor子系统架构

RK平台Sensor子系统采用分层的软件架构设计,从底层硬件到上层应用依次划分为:硬件层 → 内核驱动层 → HAL硬件抽象层 → Android框架层。这种分层设计使得驱动开发者只需关注内核驱动层与设备树的适配,上层逻辑由通用框架统一处理。

架构核心要点:RK平台的Sensor驱动遵循Linux内核的IIO(Industrial I/O)子系统或Input子系统规范,通过设备树描述硬件资源,利用中断、I2C/SPI总线与Sensor芯片通信。
RK平台Sensor子系统分层架构 Android应用 / SensorManager API Android Sensor Framework Sensor HAL (libsensorservice) Linux Kernel Sensor Driver IIO Subsystem / Input Subsystem I2C/SPI总线驱动 | 中断处理 | 寄存器配置 Sensor硬件芯片 (ACC/GYRO/MAG/ALS)

1.2 Sensor驱动在Android/Linux中的位置

在RK平台的Android系统架构中,Sensor驱动横跨内核空间与用户空间两个层面。内核空间负责硬件寄存器操作、中断响应、数据采集;用户空间负责数据上报、校准、融合算法。下表清晰展示了各层级的职责与接口关系:

层级 组件 职责 接口/协议
应用层 App / Game 调用SensorManager获取数据 Android SDK API
框架层 SensorService 管理Sensor列表、数据分发 Binder IPC
HAL层 sensors.xxx.so 封装内核接口、数据校准 HAL接口规范
内核驱动 Sensor Driver 寄存器读写、中断处理、数据上报 IIO / Input API
硬件层 Sensor Chip 物理量采集(加速度/角速度/磁场) I2C / SPI / GPIO
驱动开发者关注点:在RK平台进行Sensor驱动移植时,主要工作集中在内核驱动层和设备树。HAL层通常由芯片原厂提供或使用通用适配层,无需大量修改。

1.3 驱动移植的整体流程

RK平台Sensor驱动移植遵循一套标准化的步骤,从硬件确认到功能验证,每一步都有明确的交付物。整体流程可概括为以下7个关键阶段:

  1. 硬件原理图确认 — 确认Sensor芯片型号、I2C/SPI总线编号、中断GPIO、供电电压、复位引脚。
  2. 设备树编写 — 在RK平台设备树(.dts)中添加Sensor节点,配置总线地址、中断号、电源域、时钟等资源。
  3. 内核驱动移植 — 基于芯片Datasheet编写或移植IIO/Input驱动,实现probe、remove、suspend/resume、数据读取等回调。
  4. 编译与烧录 — 配置内核Kconfig/Makefile,编译生成boot.img或内核模块,烧录至RK开发板。
  5. 基础功能验证 — 使用i2c-tools、sysfs节点、cat /sys/bus/iio/devices/iio:device0/in_*等命令验证驱动加载与数据读取。
  6. HAL层适配 — 修改Sensor HAL配置文件,注册新Sensor类型、校准参数、上报速率。
  7. 系统集成测试 — 使用Android CTS/VTS Sensor测试套件、SensorTest工具进行完整功能与性能验证。
RK平台Sensor驱动移植整体流程 硬件确认 原理图/GPIO 设备树编写 dts节点 驱动移植 probe/read 编译烧录 boot.img 基础验证 i2c-tools HAL适配 校准/注册 系统集成测试 (CTS/VTS)
常见移植陷阱:
  • 设备树中中断号与GPIO对应错误,导致驱动无法响应中断。
  • I2C地址与芯片手册不一致(7位地址 vs 8位地址混淆)。
  • 电源域未正确使能,Sensor芯片无法上电初始化。
  • HAL层Sensor类型注册错误,导致Android系统无法识别设备。

1.4 设备树在Sensor驱动中的关键作用

RK平台使用扁平设备树(Flattened Device Tree, FDT)来描述硬件资源。Sensor驱动通过设备树获取以下关键信息:

设备树属性 说明 示例值
compatible 驱动匹配字符串 "bosch,bma253"
reg I2C从设备地址 0x18
interrupt-parent 中断控制器 &gpio1
interrupts 中断号与触发类型 <RK_PB2 IRQ_TYPE_EDGE_RISING>
vdd-supply 电源域控制 &vcc_3v3
mount-matrix 安装方向矩阵(校准用) "1","0","0","0","1","0","0","0","1"
设备树适配原则:驱动代码应尽量从设备树解析参数,避免硬编码。这样同一份驱动代码可以支持不同硬件配置的RK主板,提高代码复用率。