【Android驱动08】Sensor传感器框架以及驱动移植和调试方法(Kernel层部分)

接续上一节,本文主要介绍驱动部分的客制化

1, hardware层
通过系统调用open,read,write对sys/class/sensor/m_acc_misc读写操作
路径:vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/Acceleration.cpp
直接操作/sys/class/sensor/m_acc_misc节点,发命令。

2,kernel 层Sensor Driver 的客制化

2.1 驱动参数配置
Accelerometer 参数配置:
在这里插入图片描述
注意传感器的方向
在这里插入图片描述

2.2 创建传感器节点属性(所以传感器都需要通过次方法创建sys节点)
路径:drivers/misc/mediatek/sensors-1.0/hwmon/sensor_attributes/sensor_attr.c

static int __init sensor_attr_init(void)
sensor_attr_class = class_create(THIS_MODULE, “sensor”); //sys/class/sensor
sensor_attr_major = register_chrdev(0, “sensor”, &sensor_attr_fops);//注册sensor主设备号

int sensor_attr_register(struct sensor_attr_t *misc)
dev = MKDEV(sensor_attr_major, misc->minor);//对于每个sensor生成主次设备号
misc->this_device = device_create(sensor_attr_class, misc->parent, dev,misc,%s”, misc->name); //创建节点/dev/m_acc_misc
err = sensor_event_register(misc->minor);//向hwmon注册设备
obj->client[handle].head = 0;
obj->client[handle].tail = 0;
obj->client[handle].bufsize = CONTINUE_SENSOR_BUF_SIZE;

缓存各种传感器上报的数据存入buffer(所有传感器的数据都会通过一个buffer数组存储起来)
路径:drivers/misc/mediatek/sensors-1.0/hwmon/sensor_event/sensor_event.c

int sensor_input_event(unsigned char handle, const struct sensor_event *event)
client->buffer[client->head++] = *event; //将event存储用数组实现的队列中
client->head &= client->bufsize - 1;//0 1 2 3 … 2047 0 1 2 3… 2047 0 1 2 3…

unsigned int sensor_event_register(unsigned char handle)
obj->client[handle].head = 0;
obj->client[handle].tail = 0;
obj->client[handle].bufsize = BIO_SENSOR_BUF_SIZE;
obj->client[handle].buffull = false;

管理所有加速度传感器,并且注册的大量sys节点属性提供给上层访问,将所有加速度传感器接口通过节点属性给上层调用
路径:kernel-4.14/drivers/misc/mediatek/sensors-1.0/accelerometer/accel.c


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤舟簔笠翁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值