欢迎来到天天文库
浏览记录
ID:42594657
大小:40.16 KB
页数:9页
时间:2019-09-18
《android系统之sensor学习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、android系统之sensor学习Sensor作为Android系统的一个输入设备,对Android设备来说是必不可少的。Sensor主要包括G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等。这里主要对G-Sensor模块进行解析。我的平台是AML8276,android系统是4.0.4,kernel是3.0,所用的gsensor是kionix_accel;整个sensor的工作包括driver,HAL,framework(c/c++,java)和application层;首先我们从驱动driver开始,然后一
2、层层向上看;一,驱动层在驱动层,内核需要增加和修改的部分包括: 1,相应硬件模块驱动代码,包括两个文件,这里是kionix_accel.h, kionix_accel.c,分别将kionix_accel.h放到kernel/common/customer/include/linux/中,将kionix_accel.c放到kernel/customer/drivers/misc/中; 2,编译目录(kernel/customer/drivers/misc/)下的Makefie和KConfig,在KConfig中增加: configSENSORS_KXTJ2
3、 tristate"KXTJ2accelerometersensordriver" dependsonI2C help SayyesheretosupportKionix'sKXTJ2accelerometersensor 在MakeFile下增加:obj-$(CONFIG_SENSORS_KXTJ2) +=kionix_accel.o 3,在平台编译配置文件中(也就是makemenuconfig生成的),增加:CONFIG_SENSORS_KXTJ2=y------->指定编译到内核中,如果是m则编译成ko;
4、4,在平台模块代码文件中(kernel/customer/boards/board-m6g17-t069.c),在相应的i2c配置中,增加此模块:staticstructi2c_board_info__initdataaml_i2c_bus_info_b[]={........#ifdefCONFIG_SENSORS_KXTJ2 { I2C_BOARD_INFO("kionix_accel", KIONIX_ACCEL_I2C_ADDR), //.irq=INT_GPIO_1, .platform_data=(void*)
5、&kionix_accel_pdata, },#endif} 经过以上几步操作以后,就可以将此模块驱动编译到内核中。G-sensordriver工作的大致流程:系统开机后,内核会先加载i2c总线驱动,然后再加载设备驱动,在设备驱动中的init函数中通过调用i2c_add_driver(&kionix_accel_driver)注册i2c_driver;此函数将driver注册到i2c_bus_type的总线上,此总线的匹配规则是利用i2c_client的名称和i2c_driver中id_table中的名称作匹配。其中i2c_client是系统自动创建的,boar
6、d-m6g17-t069.c文件中的结构变量staticstructi2c_board_info__initdataaml_i2c_bus_info_b中需要添加G-sensor的设备信息。当匹配成功时,i2c_driver中的probe()函数开始执行。module_init(kionix_accel_init)---->i2c_add_driver(&kionix_accel_driver)----->staticstructi2c_driverkionix_accel_driver={ .driver={ .name =KIONIX_ACCE
7、L_NAME, .owner =THIS_MODULE, }, .probe =kionix_accel_probe, .remove =__devexit_p(kionix_accel_remove), .id_table =kionix_accel_id,};Probe()函数kionix_accel_probe()主要完成以下功能:1.从i2c_client结构中得到初始化信息2.创建G-sensor的工作队列2.
此文档下载收益归作者所有