android sensor hal,Android Sensor详解(3)porting drvier

本文详细介绍了在Linux内核中移植和编译传感器驱动的过程,包括将驱动文件放入相应目录、修改dtsi文件、更新Makefile和Kconfig、设置设备权限,并提供了debug方法,如检查电源和I2C状态。此外,还提到了HAL层的简单移植步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值