展锐平台 Sensor Hub驱动添加
sensor hub 架构
上图是展锐平台sensor hub 的整体架构图。
sensor hub 分为三部分,AP、sensor hub、sensors。
外部的 sensor IC 通过 I3C、I2C、SPI 挂载于 sensor hub 核,sensor hub 核通过 SIPC 通讯方式与 AP 核进行交互。
对于图中各部分模块的解释:
- sensor hub HAL:实现 Android 定义的标准 sensor HAL 接口。
- sensor hub driver:将 HAL 层下发的命令传递给 sensor hub;将 sensor hub 反馈的信息及上报的 sensor 事件传递给 HAL 层;提供调试接口。
- sensor hub algo:sensor 算法源码,以库方式释放(闭源)。
- sensor hub manage:处理 AP 发送的命令;采集和上报 sensor 数据。
- sensor driver:sensor 的驱动代码,被 sensor hub manage 调用。
sensor hub 工程编译
进入bsp目录,执行命令source build/envsetup.sh,并执行命令lunch,选择要编译的工程。
对于不同类型的工程,分别执行命令make sensorhub 或 make contexthub。
生成的可执行产物分别在目录:bsp/sensorhub/public/build/(项目名) 下
或者bsp/contexthub/out/(项目名)/(board 名) 下
配置sensor hub 功能宏
工程功能宏文件defconfig在目录:bsp/sensorhub/public/project/(项目名) 下
或bsp/contexthub/device/CH/(项目名)/(board 名)/ 下
可直接修改defconfig文件来配置功能宏。
同时也可以使用make sensorhub_menuconfig 或者make contexthub_menuconfig 命令进行功能宏配置(可以避免功能宏之间的依赖导致的错误)。
方法如下:
- 进入bsp目录,执行命令source build/envsetup.sh,并执行命令lunch,选择工程。
- 执行make sensorhub_menuconfig 或者make contexthub_menuconfig 命令,弹出工程配置窗口进行修改。
添加sensor hub sensor 驱动
驱动代码目录:bsp/sensorhub/public/sensor_hub_sprd/public/system/sensor_driver
或bsp/contexthub/modules/sensorhub/sensor_hub_sprd/public/system/sensor_driver
之后以contexthub中的驱动为例:
在对应sensor类型中添加驱动代码
以color_drivers为例,添加完驱动代码之后,需要在该sensor类型目录下的.cmake文件和Kconfig文件中添加对应代码。
增加sensor功能宏
Kconfig文件添加举例如下:
config COLOR_TCS34303_SUPPORT
bool "COLOR_TCS34303_SUPPORT"
depends on SPRD_SENSOR_HUB_SUPPORT
help
color tcs34303 support status
增加 sensor 功能宏的默认配置
在各项目的 defconfig 文件中,将该型号 sensor 的功能宏默认配置为关闭。
将驱动加入 sensor hub 工程编译
.cmake文件添加举例如下:
if(CONFIG_COLOR_TCS34303_SUPPORT)
list(APPEND SRCS
"${COLOR_DRIVERS_PATH}/tcs34303/sensor_driver_color_tcs34303.c"
"${COLOR_DRIVERS_PATH}/tcs34303/color_tcs34303.c"
)
endif()
使用 list(APPEND SRCS xxx)追加驱动文件到 SRCS,并用新增的功能宏控制该修改。
使用 cp_library_include_directories()声明需要用到的头文件路径。
使用 cp_append_export_library()声明需要用到的库文件。
overlay 实现
对于同一个项目,同样类型的 sensor 有多个供应商,但 sensor hub 有限的 SRAM 空间难以兼容太多 sensor 驱动。
为解决这个问题,引入 memory overlay 方案。
在配置sensor hub 功能宏时,依次选择 sensorhub config > SPRD Sensor Module Configurations。
勾选 SENSORS_DRIVER_OVERLAY,根据页面提示保存并退出。
以color_drivers中的驱动为例,在 color_tcs34303.c 中添加 sensor overlay 管理及 sensor 初始化注册程序。
#include "sensor_driver_color_tcs34303.h"
#ifdef CONFIG_SENSORS_DRIVER_OVERLAY
#include "color_overlay.h"
overlay_color_driver_init(tcs34303, color_tcs34303_sensor_init);
#else // CONFIG_SENSORS_DRIVER_OVERLAY
DRIVER_INIT(color_tcs34303_sensor_init);
#endif //CONFIG_SENSORS_DRIVER_OVERLAY
在链接脚本(lds 文件)中将每一供的驱动都加入编译。
在目录:bsp/sensorhub/public/ms_customize/
或 bsp/contexthub/device/CH/(项目名)/(board 名)/
中新增多供。
修改对应目录下的编译脚本,分别对 text 段、data 段、bss 段 overlay 声明驱动。