android sensor hal,Android Sensor详解(3)porting drvier
kernel层porting
复制kernel driver file到相关目录
将cm36xxx.c复制到 drivers/input/misc中
将cm36xxx.h,lightsensor.h,capella_cm3602.h复制到kernel/include/linux中
修改/arch/arm/boot/dts/qcom/下的dtsi问题
查看电路图,看看driver它挂在什么地方,然后找到spec看driver的i2c address。
提取信息如下:sensor挂在bus6上,i2c adress为0x60,interrupt连接到SOC的gpio43上
因而我们可以修改相关的dtsi文件如下:
cm36xxx@60 {
compatible = "capella,cm36xxx";
reg = <0x60>;
capella,slave_address = <0x60>;
interrupt-parent = ;
interrupts = <43 0x2>;
capella,intrpin-gpios = ;
vio-supply = ;
};
这里要注意:compatible要与kernel driver中的cm36xxx_match_table中的compatible一致
修改makefile使能够编译driver
修改kernel/drivers/input/misc/Makefile
obj-$(CONFIG_SENSORS_CM36656) += cm36656.o
修改kernel/drivers/input/misc/Kconfig
config SENSORS_CM36xxx
tristate “CM36xxx optical sensor”
depends on I2C
default n
help
Say Y here to enable the CM36xxx Optical Sensor.
修改kernel/arch/arm64/configs/xxxx_defconfig
CONFIG_SENSORS_CM36xxx=y
修改相关权限
注意kernel driver中的misc的name
static const struct file_operations rgbsensor_fops = {
.owner = THIS_MODULE,
.open = rgbsensor_open,
.release = rgbsensor_release,
.unlocked_ioctl = rgbsensor_ioctl,
.compat_ioctl = rgbsensor_ioctl,
};
static struct miscdevice rgbsensor_misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = "asusRgbSensor",
.fops = &rgbsensor_fops
};
注意:rgb使用32位的lib因而需要compat_ioctl
修改system/core/rootdir/ueventd.rc
/dev/lightsensor 0640 system system
/dev/proximitySensor 0640 compass system
/dev/asusRgbSensor 0640 system system
修改init.rc文件
on post-fs-data
chown system system /dev/proximitySensor
chmod 0660 /dev/proximitySensor
chown system system /dev/lightsensor
chmod 0660 /dev/lightsensor
HAL层porting
这个很简单,只要在编译的时候能够load android.mk即可编译
注意open的目录名字与设备名字要相同
编译改错
一般厂商给的demo code在编译时都会出一些错误,因而需要我们BSP进行修正。这边会在后续的博客中解释。
debug的一些方法
查看电是否porting正常
cd sys/kernel/debug/regulator/
找到用哪个电,然后cat consumers
查看I2C是否挂起
adb shell访问/sys/class/i2c-adapter/i2c-X(X代表对应的I2C bus)目录,确认已经建立了X-00yy(yy代表slave address)
android sensor hal,Android Sensor详解(3)porting drvier相关推荐
- Android HIDL HAL 接口定义语言详解
1. HIDL 概述 在 Andoird 8.0 版本框架代码中,加入了 HIDL(HAL 接口定义语言),HIDL 的出现是为了将用户层和 HAL 层分割开,它指定了 HAL 和用户之间的接口,让用 ...
- Android 系统(252)---Android:BLE智能硬件开发详解
Android:BLE智能硬件开发详解 目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念 GATT(Generic Attribute Profile ) Characteris ...
- Android基础总结: Camera2详解之一 API学习
Camera2的API出来有些年头了,只是赶项目多次使用,没时间好好总结,年终了,正好结合google的官方Camera2demo 和开发中使用的情况,做个详细梳理,研究总结之后,才发现Camera2 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- android+发邮件,Android发送邮件的方法实例详解
Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...
- Android Telephony分析(五) ---- TelephonyRegistry详解
本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节. 从TelephonyRegistry的大部分方法中: ...
- Android Telephony分析(三) ---- RILJ详解
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程. 这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程. 在Telephony模块中,在RIL.Tracker(ServiceStateTr ...
- Android Gradle manifestPlaceholders 占位符详解
Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...
- Android Loader 异步加载详解二:探寻Loader内部机制
Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...
最新文章
- 空标签作为占位符调整距离
- 跑步机到了,看能坚持多久
- 在VS2010平台上创建并使用dll
- apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程
- LightOJ 1088 - Points in Segments 二分
- LINUX 使用tcgetattr函数与tcsetattr函数控制终端三
- 情怀java手机网游_经典端游移植手游 “情怀”赋予老IP全新活力
- java创建对象 的初始化顺序
- 20220129---CTF刷题---WEB--代码审计
- (前端开发)表格中的行全选、全不选、反选以及数据行背景色变换的示例代码
- java 封箱_java封箱和拆箱分析
- LeetCode 900. RLE 迭代器(模拟/二分查找)
- Cobar部署与测试
- poj2385 基础的动态规划算法 挑战程序设计竞赛
- 漫步数学分析十二——嵌套
- 开启html元素的编辑模式contenteditable=true
- python数据分析-为什么Python对大数据分析那么很重要?
- 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排
- apache 配置 中英
- mysql hash分区 子分区_mysql分区管理 - hash分区