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相关推荐

  1. Android HIDL HAL 接口定义语言详解

    1. HIDL 概述 在 Andoird 8.0 版本框架代码中,加入了 HIDL(HAL 接口定义语言),HIDL 的出现是为了将用户层和 HAL 层分割开,它指定了 HAL 和用户之间的接口,让用 ...

  2. Android 系统(252)---Android:BLE智能硬件开发详解

    Android:BLE智能硬件开发详解 目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念  GATT(Generic Attribute Profile ) Characteris ...

  3. Android基础总结: Camera2详解之一 API学习

    Camera2的API出来有些年头了,只是赶项目多次使用,没时间好好总结,年终了,正好结合google的官方Camera2demo 和开发中使用的情况,做个详细梳理,研究总结之后,才发现Camera2 ...

  4. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  5. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  6. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  7. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

  8. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

  9. Android Gradle manifestPlaceholders 占位符详解

    Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...

  10. Android Loader 异步加载详解二:探寻Loader内部机制

    Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...

最新文章

  1. 空标签作为占位符调整距离
  2. 跑步机到了,看能坚持多久
  3. 在VS2010平台上创建并使用dll
  4. apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程
  5. LightOJ 1088 - Points in Segments 二分
  6. LINUX 使用tcgetattr函数与tcsetattr函数控制终端三
  7. 情怀java手机网游_经典端游移植手游 “情怀”赋予老IP全新活力
  8. java创建对象 的初始化顺序
  9. 20220129---CTF刷题---WEB--代码审计
  10. (前端开发)表格中的行全选、全不选、反选以及数据行背景色变换的示例代码
  11. java 封箱_java封箱和拆箱分析
  12. LeetCode 900. RLE 迭代器(模拟/二分查找)
  13. Cobar部署与测试
  14. poj2385 基础的动态规划算法 挑战程序设计竞赛
  15. 漫步数学分析十二——嵌套
  16. 开启html元素的编辑模式contenteditable=true
  17. python数据分析-为什么Python对大数据分析那么很重要?
  18. 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排
  19. apache 配置 中英
  20. mysql hash分区 子分区_mysql分区管理 - hash分区

热门文章

  1. 使用matlab进行人工神经网络拟合
  2. excel提取单元格内特定字符(字/词)前(后)的内容
  3. windows上配置深度学习(李沐-动手学深度学习)
  4. RandomAccess接口详解
  5. 史上最全面Java面试汇总(面试题+答案)
  6. 28句最精辟有哲理的生活感悟说说,经典至极,总有一句说到你的心里
  7. 企业微信公众号怎么建立和运营?
  8. Problem -B DBZ的钥匙
  9. 生态版图 | 10月份YashanDB获信创产品认证,并与3款产品完成互认证
  10. 晏殊几何学导读花间流风方程定义与引理