g_sensor工作原理

本文详细介绍了G-sensor在Linux内核中的驱动加载流程,包括i2c驱动、设备驱动的注册和初始化,以及在Android系统中如何通过ioctl与驱动交互。同时阐述了Android上层应用如何通过SensorService和SensorManager与硬件交互,以及rotate功能的实现机制。此外,还讨论了在实现sensor.so与driver间的ioctl通信时遇到的问题。

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

1.使G-sensor正常工作需要做的事:

G-sensor driver文件包括:

driver/i2c/chips/lis331dl.c     //驱动源文件
driver/i2c/chips/sensorioctl.h   //传感器头文件
include/linux/lis331dl.h        //lis331类型传感器头文件

并在/kernel/arch/arm/mach-s3c6410/mach-ur6410.c文件中i2c chanel1的结构变量i2c_devs1[] __initdata中需要添加G-sensor的设备信息,以使driver成功加载。同时在该文件中添加一个结构变量
//该G-sensor是挂载在i2c上面

struct lis331dl_platform_data lisGsensor_platform_data={
.name="lis331dl",
.pin_clk=0,
.pin_data=0,
.open_drain=1,
.interrupt=IRQ_EINT(3),
};
该结构变量在i2c_devs1[] __initdata中被引用。

/kernel/arch/arm/mach-s3c6410/mach-ur6410.c 中需要包含lis331dl.h。

在rootfs/system/etc/init.board.sh的最后一行加上mknod /dev/sensorioctl c 51 201&创建节点供ioctl使用。

编译后的sensor.so放在/rootfs/system/lib/hw下。

sensor.so和driver之间通过ioctl实现对G-sensor的状态控制。ioctl的命令编号定义在头文件sensorioctl.h中,分别放在
kernel/include/linux下和Androidsourcecode/hardware/libhardware/include/hardware下供driver和sensor.so使用。

G-sensor driver工作的大致流程:

系统开机后,先加载i2c总线驱动,然后加载设备驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值